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