1ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 2ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Copyright (C) 2012 The Android Open Source Project 3ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * you may not use this file except in compliance with the License. 6ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * You may obtain a copy of the License at 7ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 8ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 10ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Unless required by applicable law or agreed to in writing, software 11ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * See the License for the specific language governing permissions and 14ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * limitations under the License. 15ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 16ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 17ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 18ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdCore.h" 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdIntrinsics.h" 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdAllocation.h" 21ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 22ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsdIntrinsicInlines.h" 23ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 24ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsusing namespace android; 25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsusing namespace android::renderscript; 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstruct ConvolveParams { 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams float f[4]; 29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsenum { 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_CLEAR = 0, 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SRC = 1, 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_DST = 2, 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SRC_OVER = 3, 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_DST_OVER = 4, 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SRC_IN = 5, 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_DST_IN = 6, 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SRC_OUT = 7, 41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_DST_OUT = 8, 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SRC_ATOP = 9, 43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_DST_ATOP = 10, 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_XOR = 11, 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_NORMAL = 12, 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_AVERAGE = 13, 48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_MULTIPLY = 14, 49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SCREEN = 15, 50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_DARKEN = 16, 51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_LIGHTEN = 17, 52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_OVERLAY = 18, 53ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_HARDLIGHT = 19, 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SOFTLIGHT = 20, 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_DIFFERENCE = 21, 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_NEGATION = 22, 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_EXCLUSION = 23, 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_COLOR_DODGE = 24, 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_INVERSE_COLOR_DODGE = 25, 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SOFT_DODGE = 26, 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_COLOR_BURN = 27, 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_INVERSE_COLOR_BURN = 28, 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SOFT_BURN = 29, 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_REFLECT = 30, 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_GLOW = 31, 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_FREEZE = 32, 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_HEAT = 33, 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_ADD = 34, 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SUBTRACT = 35, 70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_STAMP = 36, 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_RED = 37, 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_GREEN = 38, 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_BLUE = 39, 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_HUE = 40, 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_SATURATION = 41, 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_COLOR = 42, 77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams BLEND_LUMINOSITY = 43 78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendSrcOver_K(void *dst, const void *src, uint32_t count8); 81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendDstOver_K(void *dst, const void *src, uint32_t count8); 82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendSrcIn_K(void *dst, const void *src, uint32_t count8); 83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendDstIn_K(void *dst, const void *src, uint32_t count8); 84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendSrcOut_K(void *dst, const void *src, uint32_t count8); 85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendDstOut_K(void *dst, const void *src, uint32_t count8); 86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendSrcAtop_K(void *dst, const void *src, uint32_t count8); 87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendDstAtop_K(void *dst, const void *src, uint32_t count8); 88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendXor_K(void *dst, const void *src, uint32_t count8); 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendMultiply_K(void *dst, const void *src, uint32_t count8); 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendAdd_K(void *dst, const void *src, uint32_t count8); 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsextern "C" void rsdIntrinsicBlendSub_K(void *dst, const void *src, uint32_t count8); 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams//#undef ARCH_ARM_HAVE_NEON 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic void ColorMatrix_uchar4(const RsForEachStubParamStruct *p, 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t xstart, uint32_t xend, 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t instep, uint32_t outstep) { 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ConvolveParams *cp = (ConvolveParams *)p->usr; 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams // instep/outstep can be ignored--sizeof(uchar4) known at compile time 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 *out = (uchar4 *)p->out; 102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 *in = (uchar4 *)p->in; 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t x1 = xstart; 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t x2 = xend; 105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += xstart; 107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += xstart; 108ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 109ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams switch (p->slot) { 110ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_CLEAR: 111ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++) { 112ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = 0; 113ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 114ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 115ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SRC: 116ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 117ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = *in; 118ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 119ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 120ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams //BLEND_DST is a NOP 121ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_DST: 122ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 123ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SRC_OVER: 124ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 125ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 126ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 127ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendSrcOver_K(out, in, len); 128ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 129ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 130ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 131ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 132ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 133ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 134ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 in_s = convert_short4(*in); 135ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 out_s = convert_short4(*out); 136ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in_s = in_s + ((out_s * (short4)(255 - in_s.a)) >> (short4)8); 137ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(in_s); 138ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 139ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 140ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_DST_OVER: 141ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 142ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 143ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 144ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendDstOver_K(out, in, len); 145ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 146ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 147ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 148ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 149ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 150ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 151ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 in_s = convert_short4(*in); 152ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 out_s = convert_short4(*out); 153ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in_s = out_s + ((in_s * (short4)(255 - out_s.a)) >> (short4)8); 154ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(in_s); 155ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 156ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 157ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SRC_IN: 158ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 159ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 160ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 161ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendSrcIn_K(out, in, len); 162ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 163ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 164ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 165ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 166ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 167ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 168ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 in_s = convert_short4(*in); 169ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in_s = (in_s * out->a) >> (short4)8; 170ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(in_s); 171ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 172ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 173ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_DST_IN: 174ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 175ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 176ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 177ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendDstIn_K(out, in, len); 178ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 179ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 180ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 181ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 182ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 183ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 184ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 out_s = convert_short4(*out); 185ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out_s = (out_s * in->a) >> (short4)8; 186ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(out_s); 187ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 188ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 189ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SRC_OUT: 190ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 191ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 192ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 193ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendSrcOut_K(out, in, len); 194ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 195ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 196ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 197ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 198ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 199ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 200ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 in_s = convert_short4(*in); 201ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in_s = (in_s * (short4)(255 - out->a)) >> (short4)8; 202ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(in_s); 203ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 204ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 205ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_DST_OUT: 206ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 207ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 208ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 209ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendDstOut_K(out, in, len); 210ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 211ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 212ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 213ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 214ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 215ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 216ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 out_s = convert_short4(*out); 217ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out_s = (out_s * (short4)(255 - in->a)) >> (short4)8; 218ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(out_s); 219ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 220ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 221ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SRC_ATOP: 222ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 223ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 224ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 225ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendSrcAtop_K(out, in, len); 226ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 227ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 228ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 229ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 230ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 231ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 232ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 in_s = convert_short4(*in); 233ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 out_s = convert_short4(*out); 234ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out_s.rgb = ((in_s.rgb * out_s.a) + 235ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams (out_s.rgb * ((short3)255 - (short3)in_s.a))) >> (short3)8; 236ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(out_s); 237ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 238ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 239ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_DST_ATOP: 240ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 241ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 242ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 243ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendDstAtop_K(out, in, len); 244ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 245ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 246ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 247ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 248ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 249ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 250ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 in_s = convert_short4(*in); 251ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 out_s = convert_short4(*out); 252ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out_s.rgb = ((out_s.rgb * in_s.a) + 253ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams (in_s.rgb * ((short3)255 - (short3)out_s.a))) >> (short3)8; 254ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4(out_s); 255ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 256ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 257ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_XOR: 258ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 259ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 260ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 261ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendXor_K(out, in, len); 262ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 263ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 264ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 265ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 266ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 267ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 268ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = *in ^ *out; 269ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 270ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 271ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_NORMAL: 272ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_NORMAL"); 273ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 274ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 275ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_AVERAGE: 276ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_AVERAGE"); 277ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 278ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 279ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_MULTIPLY: 280ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 281ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 282ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 283ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendMultiply_K(out, in, len); 284ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 285ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 286ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 287ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 288ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 289ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 290ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams *out = convert_uchar4((convert_short4(*in) * convert_short4(*out)) 291ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams >> (short4)8); 292ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 293ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 294ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SCREEN: 295ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_SCREEN"); 296ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 297ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 298ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_DARKEN: 299ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_DARKEN"); 300ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 301ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 302ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_LIGHTEN: 303ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_LIGHTEN"); 304ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 305ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 306ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_OVERLAY: 307ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_OVERLAY"); 308ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 309ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 310ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_HARDLIGHT: 311ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_HARDLIGHT"); 312ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 313ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 314ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SOFTLIGHT: 315ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_SOFTLIGHT"); 316ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 317ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 318ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_DIFFERENCE: 319ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_DIFFERENCE"); 320ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 321ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 322ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_NEGATION: 323ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_NEGATION"); 324ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 325ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 326ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_EXCLUSION: 327ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_EXCLUSION"); 328ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 329ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 330ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_COLOR_DODGE: 331ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_DODGE"); 332ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 333ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 334ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_INVERSE_COLOR_DODGE: 335ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_DODGE"); 336ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 337ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 338ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SOFT_DODGE: 339ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_DODGE"); 340ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 341ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 342ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_COLOR_BURN: 343ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_BURN"); 344ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 345ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 346ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_INVERSE_COLOR_BURN: 347ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_BURN"); 348ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 349ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 350ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SOFT_BURN: 351ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_BURN"); 352ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 353ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 354ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_REFLECT: 355ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_REFLECT"); 356ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 357ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 358ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_GLOW: 359ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_GLOW"); 360ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 361ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 362ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_FREEZE: 363ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_FREEZE"); 364ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 365ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 366ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_HEAT: 367ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_HEAT"); 368ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 369ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 370ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_ADD: 371ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 372ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 373ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 374ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendAdd_K(out, in, len); 375ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 376ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 377ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 378ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 379ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 380ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 381ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 382ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams oR = out->r, oG = out->g, oB = out->b, oA = out->a; 383ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->r = (oR + iR) > 255 ? 255 : oR + iR; 384ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->g = (oG + iG) > 255 ? 255 : oG + iG; 385ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->b = (oB + iB) > 255 ? 255 : oB + iB; 386ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->a = (oA + iA) > 255 ? 255 : oA + iA; 387ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 388ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 389ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SUBTRACT: 390ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#if defined(ARCH_ARM_HAVE_NEON) 391ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if((x1 + 8) < x2) { 392ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t len = (x2 - x1) >> 3; 393ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsdIntrinsicBlendSub_K(out, in, len); 394ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams x1 += len << 3; 395ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out += len << 3; 396ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams in += len << 3; 397ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 398ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 399ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams for (;x1 < x2; x1++, out++, in++) { 400ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 401ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams oR = out->r, oG = out->g, oB = out->b, oA = out->a; 402ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->r = (oR - iR) < 0 ? 0 : oR - iR; 403ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->g = (oG - iG) < 0 ? 0 : oG - iG; 404ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->b = (oB - iB) < 0 ? 0 : oB - iB; 405ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams out->a = (oA - iA) < 0 ? 0 : oA - iA; 406ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 407ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 408ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_STAMP: 409ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_STAMP"); 410ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 411ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 412ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_RED: 413ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_RED"); 414ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 415ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 416ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_GREEN: 417ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_GREEN"); 418ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 419ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 420ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_BLUE: 421ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_BLUE"); 422ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 423ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 424ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_HUE: 425ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_HUE"); 426ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 427ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 428ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_SATURATION: 429ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_SATURATION"); 430ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 431ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 432ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_COLOR: 433ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_COLOR"); 434ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 435ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 436ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams case BLEND_LUMINOSITY: 437ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented blend intrinsic BLEND_LUMINOSITY"); 438ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 439ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams break; 440ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 441ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams default: 442ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ALOGE("Called unimplemented value %d", p->slot); 443ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams rsAssert(false); 444ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 445ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 446ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 447ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 448ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsvoid * rsdIntrinsic_InitBlend(const android::renderscript::Context *dc, 449ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Script *script, 450ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RsdIntriniscFuncs_t *funcs) { 451ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 452ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams script->mHal.info.exportedVariableCount = 0; 453ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams funcs->root = ColorMatrix_uchar4; 454ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 455ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ConvolveParams *cp = (ConvolveParams *)calloc(1, sizeof(ConvolveParams)); 456ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return cp; 457ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 458ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 459ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 460