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