rsCpuIntrinsicBlend.cpp revision c905efd76fdcc1b8846b229bf7d991d185a7b4b7
1cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams/* 2cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * Copyright (C) 2012 The Android Open Source Project 3cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * 4cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * you may not use this file except in compliance with the License. 6cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * You may obtain a copy of the License at 7cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * 8cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * 10cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * Unless required by applicable law or agreed to in writing, software 11cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * See the License for the specific language governing permissions and 14cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams * limitations under the License. 15cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams */ 16cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 17cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 18709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuIntrinsic.h" 19709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuIntrinsicInlines.h" 20cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 21cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsusing namespace android; 22cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsusing namespace android::renderscript; 23cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 24709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace android { 25709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace renderscript { 26709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 27709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 28709a0978ae141198018ca9769f8d96292a8928e6Jason Samsclass RsdCpuScriptIntrinsicBlend : public RsdCpuScriptIntrinsic { 29709a0978ae141198018ca9769f8d96292a8928e6Jason Samspublic: 30709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual void populateScript(Script *); 31709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 32709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual ~RsdCpuScriptIntrinsicBlend(); 33c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuScriptIntrinsicBlend(RsdCpuReferenceImpl *ctx, const Script *s, const Element *e); 34709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 35709a0978ae141198018ca9769f8d96292a8928e6Jason Samsprotected: 36709a0978ae141198018ca9769f8d96292a8928e6Jason Sams static void kernel(const RsForEachStubParamStruct *p, 37709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 38709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t instep, uint32_t outstep); 39cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams}; 40cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 41709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 42709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 43709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 44cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 45cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsenum { 46cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_CLEAR = 0, 47cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC = 1, 48cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST = 2, 49cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_OVER = 3, 50cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_OVER = 4, 51cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_IN = 5, 52cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_IN = 6, 53cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_OUT = 7, 54cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_OUT = 8, 55cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_ATOP = 9, 56cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_ATOP = 10, 57cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_XOR = 11, 58cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 59cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_NORMAL = 12, 60cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_AVERAGE = 13, 61cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_MULTIPLY = 14, 62cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SCREEN = 15, 63cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DARKEN = 16, 64cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_LIGHTEN = 17, 65cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_OVERLAY = 18, 66cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HARDLIGHT = 19, 67cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFTLIGHT = 20, 68cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DIFFERENCE = 21, 69cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_NEGATION = 22, 70cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_EXCLUSION = 23, 71cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR_DODGE = 24, 72cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_INVERSE_COLOR_DODGE = 25, 73cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFT_DODGE = 26, 74cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR_BURN = 27, 75cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_INVERSE_COLOR_BURN = 28, 76cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFT_BURN = 29, 77cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_REFLECT = 30, 78cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_GLOW = 31, 79cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_FREEZE = 32, 80cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HEAT = 33, 81cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_ADD = 34, 82cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SUBTRACT = 35, 83cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_STAMP = 36, 84cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_RED = 37, 85cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_GREEN = 38, 86cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_BLUE = 39, 87cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HUE = 40, 88cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SATURATION = 41, 89cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR = 42, 90cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_LUMINOSITY = 43 91cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams}; 92cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 93fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcOver_K(void *dst, const void *src, uint32_t count8); 94fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstOver_K(void *dst, const void *src, uint32_t count8); 95fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcIn_K(void *dst, const void *src, uint32_t count8); 96fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstIn_K(void *dst, const void *src, uint32_t count8); 97fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcOut_K(void *dst, const void *src, uint32_t count8); 98fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstOut_K(void *dst, const void *src, uint32_t count8); 99fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcAtop_K(void *dst, const void *src, uint32_t count8); 100fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstAtop_K(void *dst, const void *src, uint32_t count8); 101fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendXor_K(void *dst, const void *src, uint32_t count8); 102fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendMultiply_K(void *dst, const void *src, uint32_t count8); 103fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendAdd_K(void *dst, const void *src, uint32_t count8); 104fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSub_K(void *dst, const void *src, uint32_t count8); 105fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams 106fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams//#undef ARCH_ARM_HAVE_NEON 107fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams 108709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicBlend::kernel(const RsForEachStubParamStruct *p, 109709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 110709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t instep, uint32_t outstep) { 111709a0978ae141198018ca9769f8d96292a8928e6Jason Sams RsdCpuScriptIntrinsicBlend *cp = (RsdCpuScriptIntrinsicBlend *)p->usr; 11236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray 11336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray // instep/outstep can be ignored--sizeof(uchar4) known at compile time 114cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uchar4 *out = (uchar4 *)p->out; 115cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uchar4 *in = (uchar4 *)p->in; 116cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t x1 = xstart; 117cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t x2 = xend; 118cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 119cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams switch (p->slot) { 120cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_CLEAR: 121cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++) { 122cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams *out = 0; 123cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 124cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 125cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_SRC: 126cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++, in++) { 12736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = *in; 128cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 129cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 13036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray //BLEND_DST is a NOP 131cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_DST: 13236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 13336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_OVER: 134fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 135fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 136fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 137fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcOver_K(out, in, len); 138fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 139fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 140fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 141fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 142fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 143cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++, in++) { 14436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 14536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 14636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = in_s + ((out_s * (short4)(255 - in_s.a)) >> (short4)8); 14736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 148cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 149cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 15036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_OVER: 151fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 152fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 153fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 154fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstOver_K(out, in, len); 155fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 156fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 157fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 158fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 159fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 16036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 16136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 16236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 16336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = out_s + ((in_s * (short4)(255 - out_s.a)) >> (short4)8); 16436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 16536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 16636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 16736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_IN: 168fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 169fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 170fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 171fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcIn_K(out, in, len); 172fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 173fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 174fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 175fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 176fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 17736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 17836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 17936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = (in_s * out->a) >> (short4)8; 18036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 18136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 18236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 18336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_IN: 184fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 185fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 186fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 187fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstIn_K(out, in, len); 188fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 189fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 190fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 191fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 192fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 19336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 19436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 19536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s = (out_s * in->a) >> (short4)8; 19636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 19736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 19836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 19936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_OUT: 200fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 201fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 202fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 203fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcOut_K(out, in, len); 204fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 205fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 206fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 207fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 208fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 20936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 21036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 21136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = (in_s * (short4)(255 - out->a)) >> (short4)8; 21236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 21336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 21436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 21536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_OUT: 216fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 217fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 218fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 219fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstOut_K(out, in, len); 220fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 221fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 222fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 223fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 224fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 22536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 22636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 22736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s = (out_s * (short4)(255 - in->a)) >> (short4)8; 22836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 22936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 23036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 23136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_ATOP: 232fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 233fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 234fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 235fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcAtop_K(out, in, len); 236fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 237fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 238fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 239fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 240fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 24136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 24236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 24336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 244fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out_s.rgb = ((in_s.rgb * out_s.a) + 245fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams (out_s.rgb * ((short3)255 - (short3)in_s.a))) >> (short3)8; 24636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 24736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 24836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 24936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_ATOP: 250fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 251fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 252fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 253fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstAtop_K(out, in, len); 254fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 255fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 256fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 257fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 258fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 25936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 26036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 26136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 262fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out_s.rgb = ((out_s.rgb * in_s.a) + 263fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams (in_s.rgb * ((short3)255 - (short3)out_s.a))) >> (short3)8; 26436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 26536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 26636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 26736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_XOR: 268fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 269fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 270fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 271fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendXor_K(out, in, len); 272fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 273fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 274fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 275fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 276fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 27736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 27836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = *in ^ *out; 27936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 28036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 28136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_NORMAL: 28236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_NORMAL"); 28336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 28436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 28536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_AVERAGE: 28636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_AVERAGE"); 28736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 28836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 28936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_MULTIPLY: 290fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 291fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 292fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 293fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendMultiply_K(out, in, len); 294fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 295fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 296fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 297fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 298fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 29936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 30036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4((convert_short4(*in) * convert_short4(*out)) 30136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray >> (short4)8); 30236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 30336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 30436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SCREEN: 30536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SCREEN"); 30636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 30736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 30836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DARKEN: 30936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_DARKEN"); 31036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 31136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 31236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_LIGHTEN: 31336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_LIGHTEN"); 31436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 31536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 31636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_OVERLAY: 31736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_OVERLAY"); 31836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 31936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 32036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HARDLIGHT: 32136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HARDLIGHT"); 32236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 32336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 32436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFTLIGHT: 32536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFTLIGHT"); 32636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 32736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 32836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DIFFERENCE: 32936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_DIFFERENCE"); 33036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_NEGATION: 33336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_NEGATION"); 33436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_EXCLUSION: 33736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_EXCLUSION"); 33836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 34036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR_DODGE: 34136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_DODGE"); 34236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 34336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 34436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_INVERSE_COLOR_DODGE: 34536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_DODGE"); 34636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 34736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 34836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFT_DODGE: 34936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_DODGE"); 35036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 35136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 35236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR_BURN: 35336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_BURN"); 35436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 35536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 35636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_INVERSE_COLOR_BURN: 35736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_BURN"); 35836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 35936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 36036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFT_BURN: 36136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_BURN"); 36236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 36336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 36436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_REFLECT: 36536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_REFLECT"); 36636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 36736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 36836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_GLOW: 36936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_GLOW"); 37036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 37136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 37236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_FREEZE: 37336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_FREEZE"); 37436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 37536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 37636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HEAT: 37736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HEAT"); 37836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 37936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 38036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_ADD: 381fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 382fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 383fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 384fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendAdd_K(out, in, len); 385fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 386fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 387fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 388fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 389fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 39036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 39136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray uint32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 39236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray oR = out->r, oG = out->g, oB = out->b, oA = out->a; 39336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->r = (oR + iR) > 255 ? 255 : oR + iR; 39436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->g = (oG + iG) > 255 ? 255 : oG + iG; 39536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->b = (oB + iB) > 255 ? 255 : oB + iB; 39636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->a = (oA + iA) > 255 ? 255 : oA + iA; 39736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 39836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 39936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SUBTRACT: 400fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 401fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 402fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 403fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSub_K(out, in, len); 404fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 405fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 406fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 407fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 408fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 40936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 41036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray int32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 41136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray oR = out->r, oG = out->g, oB = out->b, oA = out->a; 41236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->r = (oR - iR) < 0 ? 0 : oR - iR; 41336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->g = (oG - iG) < 0 ? 0 : oG - iG; 41436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->b = (oB - iB) < 0 ? 0 : oB - iB; 41536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->a = (oA - iA) < 0 ? 0 : oA - iA; 41636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 41736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 41836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_STAMP: 41936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_STAMP"); 42036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 42136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 42236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_RED: 42336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_RED"); 42436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 42536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 42636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_GREEN: 42736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_GREEN"); 42836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 42936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 43036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_BLUE: 43136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_BLUE"); 43236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 43336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 43436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HUE: 43536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HUE"); 43636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 43736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 43836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SATURATION: 43936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SATURATION"); 44036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 44136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 44236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR: 44336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR"); 44436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 44536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 44636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_LUMINOSITY: 44736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_LUMINOSITY"); 44836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 44936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 450cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 45136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray default: 45236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented value %d", p->slot); 45336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 454cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 455cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 456cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams} 457cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 458cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 459c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptIntrinsicBlend::RsdCpuScriptIntrinsicBlend(RsdCpuReferenceImpl *ctx, 460c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams const Script *s, const Element *e) 461c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams : RsdCpuScriptIntrinsic(ctx, s, e, RS_SCRIPT_INTRINSIC_ID_BLEND) { 462cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 463709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mRootPtr = &kernel; 464cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams} 465cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 466709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicBlend::~RsdCpuScriptIntrinsicBlend() { 467709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 468709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 469709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicBlend::populateScript(Script *s) { 470709a0978ae141198018ca9769f8d96292a8928e6Jason Sams s->mHal.info.exportedVariableCount = 0; 471709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 472709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 473c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptImpl * rsdIntrinsic_Blend(RsdCpuReferenceImpl *ctx, 474c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams const Script *s, const Element *e) { 475c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams return new RsdCpuScriptIntrinsicBlend(ctx, s, e); 476709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 477709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 478709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 479cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 480