rsCpuIntrinsicBlend.cpp revision 36889a0ecf564e3d47e7f69bb030c6b927061792
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 Samsstatic void One(const RsForEachStubParamStruct *p, uchar4 *out, 33cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams const uchar4 *py, const float* coeff) { 34cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams float4 i = convert_float4(py[0]); 35cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 36cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams float4 sum; 37cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.x = i.x * coeff[0] + 38cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.y * coeff[4] + 39cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.z * coeff[8] + 40cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.w * coeff[12]; 41cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.y = i.x * coeff[1] + 42cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.y * coeff[5] + 43cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.z * coeff[9] + 44cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.w * coeff[13]; 45cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.z = i.x * coeff[2] + 46cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.y * coeff[6] + 47cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.z * coeff[10] + 48cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.w * coeff[14]; 49cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.w = i.x * coeff[3] + 50cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.y * coeff[7] + 51cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.z * coeff[11] + 52cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams i.w * coeff[15]; 53cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 54cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.x = sum.x < 0 ? 0 : (sum.x > 255 ? 255 : sum.x); 55cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.y = sum.y < 0 ? 0 : (sum.y > 255 ? 255 : sum.y); 56cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.z = sum.z < 0 ? 0 : (sum.z > 255 ? 255 : sum.z); 57cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams sum.w = sum.w < 0 ? 0 : (sum.w > 255 ? 255 : sum.w); 58cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 59cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams *out = convert_uchar4(sum); 60cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams} 61cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 62cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsenum { 63cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_CLEAR = 0, 64cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC = 1, 65cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST = 2, 66cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_OVER = 3, 67cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_OVER = 4, 68cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_IN = 5, 69cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_IN = 6, 70cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_OUT = 7, 71cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_OUT = 8, 72cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SRC_ATOP = 9, 73cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DST_ATOP = 10, 74cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_XOR = 11, 75cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 76cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_NORMAL = 12, 77cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_AVERAGE = 13, 78cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_MULTIPLY = 14, 79cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SCREEN = 15, 80cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DARKEN = 16, 81cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_LIGHTEN = 17, 82cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_OVERLAY = 18, 83cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HARDLIGHT = 19, 84cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFTLIGHT = 20, 85cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_DIFFERENCE = 21, 86cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_NEGATION = 22, 87cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_EXCLUSION = 23, 88cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR_DODGE = 24, 89cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_INVERSE_COLOR_DODGE = 25, 90cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFT_DODGE = 26, 91cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR_BURN = 27, 92cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_INVERSE_COLOR_BURN = 28, 93cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SOFT_BURN = 29, 94cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_REFLECT = 30, 95cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_GLOW = 31, 96cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_FREEZE = 32, 97cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HEAT = 33, 98cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_ADD = 34, 99cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SUBTRACT = 35, 100cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_STAMP = 36, 101cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_RED = 37, 102cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_GREEN = 38, 103cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_BLUE = 39, 104cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_HUE = 40, 105cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_SATURATION = 41, 106cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_COLOR = 42, 107cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams BLEND_LUMINOSITY = 43 108cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams}; 109cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 110cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsstatic void ColorMatrix_uchar4(const RsForEachStubParamStruct *p, 111cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t xstart, uint32_t xend, 112cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t instep, uint32_t outstep) { 113cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams ConvolveParams *cp = (ConvolveParams *)p->usr; 11436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray 11536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray // instep/outstep can be ignored--sizeof(uchar4) known at compile time 116cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uchar4 *out = (uchar4 *)p->out; 117cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uchar4 *in = (uchar4 *)p->in; 118cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t x1 = xstart; 119cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams uint32_t x2 = xend; 120cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 121cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams in += xstart; 122cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams out += xstart; 123cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 124cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams switch (p->slot) { 125cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_CLEAR: 126cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++) { 127cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams *out = 0; 128cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 129cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 130cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_SRC: 131cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++, in++) { 13236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = *in; 133cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 134cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 13536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray //BLEND_DST is a NOP 136cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams case BLEND_DST: 13736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 13836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_OVER: 139cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams for (;x1 < x2; x1++, out++, in++) { 14036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 14136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 14236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = in_s + ((out_s * (short4)(255 - in_s.a)) >> (short4)8); 14336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 144cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 145cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams break; 14636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_OVER: 14736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 14836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 14936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 15036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = out_s + ((in_s * (short4)(255 - out_s.a)) >> (short4)8); 15136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 15236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 15336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 15436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_IN: 15536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 15636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 15736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = (in_s * out->a) >> (short4)8; 15836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 15936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 16036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 16136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_IN: 16236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 16336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 16436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s = (out_s * in->a) >> (short4)8; 16536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 16636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 16736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 16836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_OUT: 16936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 17036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 17136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray in_s = (in_s * (short4)(255 - out->a)) >> (short4)8; 17236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(in_s); 17336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 17436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 17536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_OUT: 17636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 17736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 17836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s = (out_s * (short4)(255 - in->a)) >> (short4)8; 17936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 18036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 18136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 18236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SRC_ATOP: 18336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 18436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 18536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 18636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s.rgb = ((in_s.rgb * out_s.a) >> (short3)8) + 18736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ((out_s.rgb * ((short3)255 - (short3)in_s.a)) >> (short3)8); 18836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 18936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 19036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 19136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DST_ATOP: 19236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 19336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 in_s = convert_short4(*in); 19436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray short4 out_s = convert_short4(*out); 19536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out_s.rgb = ((out_s.rgb * in_s.a) >> (short3)8) + 19636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ((in_s.rgb * ((short3)255 - (short3)out_s.a)) >> (short3)8); 19736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4(out_s); 19836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 19936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 20036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_XOR: 20136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 20236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = *in ^ *out; 20336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 20436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 20536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_NORMAL: 20636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_NORMAL"); 20736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 20836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 20936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_AVERAGE: 21036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_AVERAGE"); 21136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 21236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 21336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_MULTIPLY: 21436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 21536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray *out = convert_uchar4((convert_short4(*in) * convert_short4(*out)) 21636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray >> (short4)8); 21736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 21836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 21936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SCREEN: 22036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SCREEN"); 22136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 22236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 22336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DARKEN: 22436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_DARKEN"); 22536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 22636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 22736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_LIGHTEN: 22836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_LIGHTEN"); 22936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 23036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 23136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_OVERLAY: 23236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_OVERLAY"); 23336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 23436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 23536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HARDLIGHT: 23636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HARDLIGHT"); 23736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 23836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 23936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFTLIGHT: 24036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFTLIGHT"); 24136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 24236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 24336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_DIFFERENCE: 24436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_DIFFERENCE"); 24536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 24636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 24736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_NEGATION: 24836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_NEGATION"); 24936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 25036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 25136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_EXCLUSION: 25236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_EXCLUSION"); 25336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 25436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 25536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR_DODGE: 25636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_DODGE"); 25736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 25836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 25936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_INVERSE_COLOR_DODGE: 26036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_DODGE"); 26136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 26236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 26336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFT_DODGE: 26436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_DODGE"); 26536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 26636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 26736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR_BURN: 26836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_BURN"); 26936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 27036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 27136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_INVERSE_COLOR_BURN: 27236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_BURN"); 27336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 27436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 27536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SOFT_BURN: 27636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_BURN"); 27736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 27836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 27936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_REFLECT: 28036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_REFLECT"); 28136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 28236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 28336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_GLOW: 28436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_GLOW"); 28536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 28636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 28736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_FREEZE: 28836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_FREEZE"); 28936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 29036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 29136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HEAT: 29236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HEAT"); 29336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 29436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 29536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_ADD: 29636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 29736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray uint32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 29836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray oR = out->r, oG = out->g, oB = out->b, oA = out->a; 29936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->r = (oR + iR) > 255 ? 255 : oR + iR; 30036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->g = (oG + iG) > 255 ? 255 : oG + iG; 30136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->b = (oB + iB) > 255 ? 255 : oB + iB; 30236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->a = (oA + iA) > 255 ? 255 : oA + iA; 30336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 30436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 30536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SUBTRACT: 30636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray for (;x1 < x2; x1++, out++, in++) { 30736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray int32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a, 30836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray oR = out->r, oG = out->g, oB = out->b, oA = out->a; 30936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->r = (oR - iR) < 0 ? 0 : oR - iR; 31036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->g = (oG - iG) < 0 ? 0 : oG - iG; 31136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->b = (oB - iB) < 0 ? 0 : oB - iB; 31236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray out->a = (oA - iA) < 0 ? 0 : oA - iA; 31336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray } 31436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 31536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_STAMP: 31636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_STAMP"); 31736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 31836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 31936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_RED: 32036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_RED"); 32136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 32236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 32336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_GREEN: 32436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_GREEN"); 32536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 32636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 32736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_BLUE: 32836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_BLUE"); 32936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_HUE: 33236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_HUE"); 33336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_SATURATION: 33636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_SATURATION"); 33736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 33836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 33936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_COLOR: 34036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_COLOR"); 34136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 34236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 34336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray case BLEND_LUMINOSITY: 34436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented blend intrinsic BLEND_LUMINOSITY"); 34536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 34636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray break; 347cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 34836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray default: 34936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray ALOGE("Called unimplemented value %d", p->slot); 35036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray rsAssert(false); 351cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 352cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 353cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 354cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams if(x2 > x1) { 355cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams while(x1 != x2) { 356cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams One(p, out++, in++, cp->f); 357cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams x1++; 358cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 359cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams } 360cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams} 361cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 362cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsvoid * rsdIntrinsic_InitBlend(const android::renderscript::Context *dc, 363cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams android::renderscript::Script *script, 364cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams RsdIntriniscFuncs_t *funcs) { 365cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 366cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams script->mHal.info.exportedVariableCount = 0; 367cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams funcs->root = ColorMatrix_uchar4; 368cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 369cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams ConvolveParams *cp = (ConvolveParams *)calloc(1, sizeof(ConvolveParams)); 370cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams return cp; 371cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams} 372cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 373cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams 374