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 18cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams#include "rsdCore.h" 19cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams#include "rsdIntrinsics.h" 20cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams#include "rsdAllocation.h" 21cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 22cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams#include "rsdIntrinsicInlines.h" 23cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 24cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsusing namespace android; 25cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsusing namespace android::renderscript; 26cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 27cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsstruct ConvolveParams { 28cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams float f[4]; 29cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams}; 30cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 31cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 32cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsenum { 33cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_CLEAR = 0, 34cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC = 1, 35cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST = 2, 36cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_OVER = 3, 37cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_OVER = 4, 38cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_IN = 5, 39cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_IN = 6, 40cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_OUT = 7, 41cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_OUT = 8, 42cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_ATOP = 9, 43cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_ATOP = 10, 44cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_XOR = 11, 45cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 46cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_NORMAL = 12, 47cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_AVERAGE = 13, 48cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_MULTIPLY = 14, 49cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SCREEN = 15, 50cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DARKEN = 16, 51cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_LIGHTEN = 17, 52cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_OVERLAY = 18, 53cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HARDLIGHT = 19, 54cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFTLIGHT = 20, 55cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DIFFERENCE = 21, 56cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_NEGATION = 22, 57cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_EXCLUSION = 23, 58cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR_DODGE = 24, 59cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_INVERSE_COLOR_DODGE = 25, 60cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFT_DODGE = 26, 61cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR_BURN = 27, 62cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_INVERSE_COLOR_BURN = 28, 63cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFT_BURN = 29, 64cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_REFLECT = 30, 65cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_GLOW = 31, 66cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_FREEZE = 32, 67cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HEAT = 33, 68cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_ADD = 34, 69cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SUBTRACT = 35, 70cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_STAMP = 36, 71cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_RED = 37, 72cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_GREEN = 38, 73cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_BLUE = 39, 74cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HUE = 40, 75cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SATURATION = 41, 76cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR = 42, 77cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_LUMINOSITY = 43 78cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams}; 79cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 80fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcOver_K(void *dst, const void *src, uint32_t count8); 81fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstOver_K(void *dst, const void *src, uint32_t count8); 82fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcIn_K(void *dst, const void *src, uint32_t count8); 83fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstIn_K(void *dst, const void *src, uint32_t count8); 84fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcOut_K(void *dst, const void *src, uint32_t count8); 85fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstOut_K(void *dst, const void *src, uint32_t count8); 86fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcAtop_K(void *dst, const void *src, uint32_t count8); 87fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstAtop_K(void *dst, const void *src, uint32_t count8); 88fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendXor_K(void *dst, const void *src, uint32_t count8); 89fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendMultiply_K(void *dst, const void *src, uint32_t count8); 90fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendAdd_K(void *dst, const void *src, uint32_t count8); 91fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSub_K(void *dst, const void *src, uint32_t count8); 92fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams 93fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams//#undef ARCH_ARM_HAVE_NEON 94fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams 95cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsstatic void ColorMatrix_uchar4(const RsForEachStubParamStruct *p, 96cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t xstart, uint32_t xend, 97cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t instep, uint32_t outstep) { 98cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams ConvolveParams *cp = (ConvolveParams *)p->usr; 9936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray 10036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray // instep/outstep can be ignored--sizeof(uchar4) known at compile time 101cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uchar4 *out = (uchar4 *)p->out; 102cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uchar4 *in = (uchar4 *)p->in; 103cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t x1 = xstart; 104cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t x2 = xend; 105cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 106cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams in += xstart; 107cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams out += xstart; 108cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 109cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams switch (p->slot) { 110cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_CLEAR: 111cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++) { 112cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams *out = 0; 113cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 114cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 115cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_SRC: 116cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++, in++) { 11736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = *in; 118cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 119cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 12036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray //BLEND_DST is a NOP 121cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_DST: 12236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 12336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_OVER: 124fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 125fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 126fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 127fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcOver_K(out, in, len); 128fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 129fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 130fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 131fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 132fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 133cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++, in++) { 13436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 13536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 13636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = in_s + ((out_s * (short4)(255 - in_s.a)) >> (short4)8); 13736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 138cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 139cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 14036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_OVER: 141fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 142fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 143fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 144fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstOver_K(out, in, len); 145fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 146fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 147fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 148fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 149fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 15036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 15136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 15236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 15336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = out_s + ((in_s * (short4)(255 - out_s.a)) >> (short4)8); 15436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 15536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 15636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 15736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_IN: 158fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 159fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 160fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 161fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcIn_K(out, in, len); 162fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 163fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 164fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 165fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 166fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 16736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 16836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 16936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = (in_s * out->a) >> (short4)8; 17036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 17136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 17236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 17336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_IN: 174fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 175fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 176fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 177fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstIn_K(out, in, len); 178fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 179fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 180fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 181fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 182fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 18336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 18436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 18536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s = (out_s * in->a) >> (short4)8; 18636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 18736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 18836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 18936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_OUT: 190fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 191fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 192fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 193fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcOut_K(out, in, len); 194fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 195fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 196fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 197fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 198fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 19936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 20036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 20136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = (in_s * (short4)(255 - out->a)) >> (short4)8; 20236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 20336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 20436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 20536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_OUT: 206fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 207fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 208fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 209fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstOut_K(out, in, len); 210fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 211fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 212fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 213fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 214fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 21536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 21636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 21736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s = (out_s * (short4)(255 - in->a)) >> (short4)8; 21836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 21936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 22036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 22136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_ATOP: 222fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 223fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 224fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 225fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSrcAtop_K(out, in, len); 226fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 227fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 228fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 229fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 230fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 23136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 23236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 23336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 234fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out_s.rgb = ((in_s.rgb * out_s.a) + 235fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams (out_s.rgb * ((short3)255 - (short3)in_s.a))) >> (short3)8; 23636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 23736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 23836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 23936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_ATOP: 240fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 241fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 242fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 243fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendDstAtop_K(out, in, len); 244fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 245fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 246fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 247fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 248fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 24936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 25036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 25136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 252fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out_s.rgb = ((out_s.rgb * in_s.a) + 253fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams (in_s.rgb * ((short3)255 - (short3)out_s.a))) >> (short3)8; 25436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 25536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 25636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 25736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_XOR: 258fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 259fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 260fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 261fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendXor_K(out, in, len); 262fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 263fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 264fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 265fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 266fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 26736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 26836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = *in ^ *out; 26936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 27036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 27136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_NORMAL: 27236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_NORMAL"); 27336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 27436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 27536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_AVERAGE: 27636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_AVERAGE"); 27736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 27836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 27936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_MULTIPLY: 280fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 281fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 282fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 283fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendMultiply_K(out, in, len); 284fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 285fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 286fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 287fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 288fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 28936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 29036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4((convert_short4(*in) * convert_short4(*out)) 29136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray >> (short4)8); 29236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 29336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 29436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SCREEN: 29536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SCREEN"); 29636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 29736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 29836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DARKEN: 29936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_DARKEN"); 30036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 30136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 30236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_LIGHTEN: 30336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_LIGHTEN"); 30436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 30536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 30636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_OVERLAY: 30736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_OVERLAY"); 30836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 30936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 31036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HARDLIGHT: 31136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HARDLIGHT"); 31236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 31336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 31436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFTLIGHT: 31536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFTLIGHT"); 31636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 31736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 31836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DIFFERENCE: 31936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_DIFFERENCE"); 32036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 32136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 32236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_NEGATION: 32336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_NEGATION"); 32436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 32536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 32636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_EXCLUSION: 32736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_EXCLUSION"); 32836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 32936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR_DODGE: 33136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_DODGE"); 33236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_INVERSE_COLOR_DODGE: 33536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_DODGE"); 33636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFT_DODGE: 33936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_DODGE"); 34036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 34136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 34236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR_BURN: 34336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_BURN"); 34436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 34536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 34636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_INVERSE_COLOR_BURN: 34736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_BURN"); 34836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 34936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 35036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFT_BURN: 35136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_BURN"); 35236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 35336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 35436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_REFLECT: 35536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_REFLECT"); 35636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 35736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 35836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_GLOW: 35936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_GLOW"); 36036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 36136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 36236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_FREEZE: 36336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_FREEZE"); 36436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 36536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 36636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HEAT: 36736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HEAT"); 36836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 36936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 37036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_ADD: 371fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 372fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 373fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 374fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendAdd_K(out, in, len); 375fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 376fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 377fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 378fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 379fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 38036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 38136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray uint32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 38236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray oR = out->r, oG = out->g, oB = out->b, oA = out->a; 38336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->r = (oR + iR) > 255 ? 255 : oR + iR; 38436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->g = (oG + iG) > 255 ? 255 : oG + iG; 38536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->b = (oB + iB) > 255 ? 255 : oB + iB; 38636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->a = (oA + iA) > 255 ? 255 : oA + iA; 38736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 38836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 38936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SUBTRACT: 390fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON) 391fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams if((x1 + 8) < x2) { 392fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams uint32_t len = (x2 - x1) >> 3; 393fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams rsdIntrinsicBlendSub_K(out, in, len); 394fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams x1 += len << 3; 395fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams out += len << 3; 396fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams in += len << 3; 397fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams } 398fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif 39936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 40036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray int32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 40136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray oR = out->r, oG = out->g, oB = out->b, oA = out->a; 40236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->r = (oR - iR) < 0 ? 0 : oR - iR; 40336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->g = (oG - iG) < 0 ? 0 : oG - iG; 40436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->b = (oB - iB) < 0 ? 0 : oB - iB; 40536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->a = (oA - iA) < 0 ? 0 : oA - iA; 40636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 40736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 40836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_STAMP: 40936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_STAMP"); 41036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 41136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 41236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_RED: 41336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_RED"); 41436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 41536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 41636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_GREEN: 41736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_GREEN"); 41836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 41936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 42036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_BLUE: 42136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_BLUE"); 42236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 42336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 42436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HUE: 42536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HUE"); 42636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 42736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 42836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SATURATION: 42936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SATURATION"); 43036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 43136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 43236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR: 43336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR"); 43436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 43536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 43636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_LUMINOSITY: 43736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_LUMINOSITY"); 43836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 43936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 440cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 44136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray default: 44236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented value %d", p->slot); 44336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 444cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 445cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 446cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams} 447cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 448cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsvoid * rsdIntrinsic_InitBlend(const android::renderscript::Context *dc, 449cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams android::renderscript::Script *script, 450cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams RsdIntriniscFuncs_t *funcs) { 451cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 452cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams script->mHal.info.exportedVariableCount = 0; 453cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams funcs->root = ColorMatrix_uchar4; 454cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 455cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams ConvolveParams *cp = (ConvolveParams *)calloc(1, sizeof(ConvolveParams)); 456cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams return cp; 457cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams} 458cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 459cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 460