rsCpuIntrinsicBlend.cpp revision c905efd76fdcc1b8846b229bf7d991d185a7b4b7
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
18709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuIntrinsic.h"
19709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuIntrinsicInlines.h"
20cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
21cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsusing namespace android;
22cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsusing namespace android::renderscript;
23cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
24709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace android {
25709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace renderscript {
26709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
27709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
28709a0978ae141198018ca9769f8d96292a8928e6Jason Samsclass RsdCpuScriptIntrinsicBlend : public RsdCpuScriptIntrinsic {
29709a0978ae141198018ca9769f8d96292a8928e6Jason Samspublic:
30709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    virtual void populateScript(Script *);
31709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
32709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    virtual ~RsdCpuScriptIntrinsicBlend();
33c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams    RsdCpuScriptIntrinsicBlend(RsdCpuReferenceImpl *ctx, const Script *s, const Element *e);
34709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
35709a0978ae141198018ca9769f8d96292a8928e6Jason Samsprotected:
36709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    static void kernel(const RsForEachStubParamStruct *p,
37709a0978ae141198018ca9769f8d96292a8928e6Jason Sams                          uint32_t xstart, uint32_t xend,
38709a0978ae141198018ca9769f8d96292a8928e6Jason Sams                          uint32_t instep, uint32_t outstep);
39cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams};
40cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
41709a0978ae141198018ca9769f8d96292a8928e6Jason Sams}
42709a0978ae141198018ca9769f8d96292a8928e6Jason Sams}
43709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
44cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
45cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Samsenum {
46cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_CLEAR = 0,
47cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SRC = 1,
48cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_DST = 2,
49cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SRC_OVER = 3,
50cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_DST_OVER = 4,
51cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SRC_IN = 5,
52cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_DST_IN = 6,
53cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SRC_OUT = 7,
54cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_DST_OUT = 8,
55cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SRC_ATOP = 9,
56cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_DST_ATOP = 10,
57cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_XOR = 11,
58cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
59cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_NORMAL = 12,
60cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_AVERAGE = 13,
61cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_MULTIPLY = 14,
62cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SCREEN = 15,
63cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_DARKEN = 16,
64cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_LIGHTEN = 17,
65cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_OVERLAY = 18,
66cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_HARDLIGHT = 19,
67cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SOFTLIGHT = 20,
68cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_DIFFERENCE = 21,
69cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_NEGATION = 22,
70cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_EXCLUSION = 23,
71cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_COLOR_DODGE = 24,
72cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_INVERSE_COLOR_DODGE = 25,
73cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SOFT_DODGE = 26,
74cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_COLOR_BURN = 27,
75cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_INVERSE_COLOR_BURN = 28,
76cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SOFT_BURN = 29,
77cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_REFLECT = 30,
78cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_GLOW = 31,
79cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_FREEZE = 32,
80cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_HEAT = 33,
81cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_ADD = 34,
82cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SUBTRACT = 35,
83cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_STAMP = 36,
84cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_RED = 37,
85cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_GREEN = 38,
86cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_BLUE = 39,
87cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_HUE = 40,
88cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_SATURATION = 41,
89cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_COLOR = 42,
90cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    BLEND_LUMINOSITY = 43
91cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams};
92cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
93fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcOver_K(void *dst, const void *src, uint32_t count8);
94fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstOver_K(void *dst, const void *src, uint32_t count8);
95fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcIn_K(void *dst, const void *src, uint32_t count8);
96fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstIn_K(void *dst, const void *src, uint32_t count8);
97fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcOut_K(void *dst, const void *src, uint32_t count8);
98fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstOut_K(void *dst, const void *src, uint32_t count8);
99fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSrcAtop_K(void *dst, const void *src, uint32_t count8);
100fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendDstAtop_K(void *dst, const void *src, uint32_t count8);
101fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendXor_K(void *dst, const void *src, uint32_t count8);
102fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendMultiply_K(void *dst, const void *src, uint32_t count8);
103fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendAdd_K(void *dst, const void *src, uint32_t count8);
104fa17cda2d7e0948677035890e40498ad0b639c92Jason Samsextern "C" void rsdIntrinsicBlendSub_K(void *dst, const void *src, uint32_t count8);
105fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams
106fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams//#undef ARCH_ARM_HAVE_NEON
107fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams
108709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicBlend::kernel(const RsForEachStubParamStruct *p,
109709a0978ae141198018ca9769f8d96292a8928e6Jason Sams                                        uint32_t xstart, uint32_t xend,
110709a0978ae141198018ca9769f8d96292a8928e6Jason Sams                                        uint32_t instep, uint32_t outstep) {
111709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    RsdCpuScriptIntrinsicBlend *cp = (RsdCpuScriptIntrinsicBlend *)p->usr;
11236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray
11336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    // instep/outstep can be ignored--sizeof(uchar4) known at compile time
114cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    uchar4 *out = (uchar4 *)p->out;
115cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    uchar4 *in = (uchar4 *)p->in;
116cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    uint32_t x1 = xstart;
117cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    uint32_t x2 = xend;
118cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
119cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    switch (p->slot) {
120cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    case BLEND_CLEAR:
121cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        for (;x1 < x2; x1++, out++) {
122cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams            *out = 0;
123cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        }
124cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        break;
125cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    case BLEND_SRC:
126cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        for (;x1 < x2; x1++, out++, in++) {
12736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray          *out = *in;
128cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        }
129cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        break;
13036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    //BLEND_DST is a NOP
131cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    case BLEND_DST:
13236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
13336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SRC_OVER:
134fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
135fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
136fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
137fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendSrcOver_K(out, in, len);
138fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
139fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
140fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
141fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
142fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
143cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        for (;x1 < x2; x1++, out++, in++) {
14436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 in_s = convert_short4(*in);
14536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 out_s = convert_short4(*out);
14636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            in_s = in_s + ((out_s * (short4)(255 - in_s.a)) >> (short4)8);
14736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(in_s);
148cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        }
149cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams        break;
15036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_DST_OVER:
151fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
152fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
153fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
154fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendDstOver_K(out, in, len);
155fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
156fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
157fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
158fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
159fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
16036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
16136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 in_s = convert_short4(*in);
16236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 out_s = convert_short4(*out);
16336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            in_s = out_s + ((in_s * (short4)(255 - out_s.a)) >> (short4)8);
16436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(in_s);
16536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
16636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
16736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SRC_IN:
168fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
169fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
170fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
171fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendSrcIn_K(out, in, len);
172fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
173fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
174fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
175fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
176fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
17736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
17836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 in_s = convert_short4(*in);
17936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            in_s = (in_s * out->a) >> (short4)8;
18036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(in_s);
18136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
18236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
18336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_DST_IN:
184fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
185fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
186fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
187fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendDstIn_K(out, in, len);
188fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
189fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
190fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
191fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
192fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
19336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
19436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 out_s = convert_short4(*out);
19536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out_s = (out_s * in->a) >> (short4)8;
19636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(out_s);
19736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
19836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
19936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SRC_OUT:
200fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
201fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
202fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
203fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendSrcOut_K(out, in, len);
204fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
205fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
206fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
207fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
208fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
20936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
21036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 in_s = convert_short4(*in);
21136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            in_s = (in_s * (short4)(255 - out->a)) >> (short4)8;
21236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(in_s);
21336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
21436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
21536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_DST_OUT:
216fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
217fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
218fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
219fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendDstOut_K(out, in, len);
220fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
221fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
222fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
223fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
224fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
22536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
22636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 out_s = convert_short4(*out);
22736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out_s = (out_s * (short4)(255 - in->a)) >> (short4)8;
22836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(out_s);
22936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
23036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
23136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SRC_ATOP:
232fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
233fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
234fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
235fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendSrcAtop_K(out, in, len);
236fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
237fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
238fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
239fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
240fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
24136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
24236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 in_s = convert_short4(*in);
24336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 out_s = convert_short4(*out);
244fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out_s.rgb = ((in_s.rgb * out_s.a) +
245fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams              (out_s.rgb * ((short3)255 - (short3)in_s.a))) >> (short3)8;
24636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(out_s);
24736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
24836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
24936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_DST_ATOP:
250fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
251fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
252fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
253fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendDstAtop_K(out, in, len);
254fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
255fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
256fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
257fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
258fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
25936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
26036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 in_s = convert_short4(*in);
26136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            short4 out_s = convert_short4(*out);
262fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out_s.rgb = ((out_s.rgb * in_s.a) +
263fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams              (in_s.rgb * ((short3)255 - (short3)out_s.a))) >> (short3)8;
26436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = convert_uchar4(out_s);
26536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
26636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
26736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_XOR:
268fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
269fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
270fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
271fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendXor_K(out, in, len);
272fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
273fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
274fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
275fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
276fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
27736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
27836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            *out = *in ^ *out;
27936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
28036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
28136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_NORMAL:
28236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_NORMAL");
28336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
28436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
28536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_AVERAGE:
28636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_AVERAGE");
28736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
28836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
28936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_MULTIPLY:
290fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
291fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
292fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
293fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendMultiply_K(out, in, len);
294fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
295fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
296fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
297fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
298fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
29936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
30036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray          *out = convert_uchar4((convert_short4(*in) * convert_short4(*out))
30136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray                                >> (short4)8);
30236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
30336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
30436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SCREEN:
30536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_SCREEN");
30636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
30736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
30836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_DARKEN:
30936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_DARKEN");
31036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
31136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
31236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_LIGHTEN:
31336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_LIGHTEN");
31436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
31536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
31636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_OVERLAY:
31736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_OVERLAY");
31836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
31936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
32036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_HARDLIGHT:
32136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_HARDLIGHT");
32236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
32336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
32436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SOFTLIGHT:
32536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_SOFTLIGHT");
32636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
32736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
32836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_DIFFERENCE:
32936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_DIFFERENCE");
33036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
33136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
33236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_NEGATION:
33336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_NEGATION");
33436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
33536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
33636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_EXCLUSION:
33736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_EXCLUSION");
33836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
33936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
34036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_COLOR_DODGE:
34136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_DODGE");
34236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
34336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
34436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_INVERSE_COLOR_DODGE:
34536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_DODGE");
34636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
34736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
34836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SOFT_DODGE:
34936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_DODGE");
35036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
35136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
35236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_COLOR_BURN:
35336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_COLOR_BURN");
35436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
35536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
35636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_INVERSE_COLOR_BURN:
35736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_INVERSE_COLOR_BURN");
35836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
35936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
36036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SOFT_BURN:
36136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_SOFT_BURN");
36236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
36336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
36436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_REFLECT:
36536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_REFLECT");
36636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
36736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
36836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_GLOW:
36936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_GLOW");
37036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
37136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
37236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_FREEZE:
37336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_FREEZE");
37436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
37536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
37636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_HEAT:
37736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_HEAT");
37836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
37936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
38036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_ADD:
381fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
382fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
383fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
384fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendAdd_K(out, in, len);
385fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
386fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
387fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
388fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
389fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
39036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
39136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            uint32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a,
39236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray                oR = out->r, oG = out->g, oB = out->b, oA = out->a;
39336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->r = (oR + iR) > 255 ? 255 : oR + iR;
39436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->g = (oG + iG) > 255 ? 255 : oG + iG;
39536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->b = (oB + iB) > 255 ? 255 : oB + iB;
39636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->a = (oA + iA) > 255 ? 255 : oA + iA;
39736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
39836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
39936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SUBTRACT:
400fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#if defined(ARCH_ARM_HAVE_NEON)
401fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        if((x1 + 8) < x2) {
402fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            uint32_t len = (x2 - x1) >> 3;
403fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            rsdIntrinsicBlendSub_K(out, in, len);
404fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            x1 += len << 3;
405fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            out += len << 3;
406fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams            in += len << 3;
407fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams        }
408fa17cda2d7e0948677035890e40498ad0b639c92Jason Sams#endif
40936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        for (;x1 < x2; x1++, out++, in++) {
41036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            int32_t iR = in->r, iG = in->g, iB = in->b, iA = in->a,
41136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray                oR = out->r, oG = out->g, oB = out->b, oA = out->a;
41236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->r = (oR - iR) < 0 ? 0 : oR - iR;
41336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->g = (oG - iG) < 0 ? 0 : oG - iG;
41436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->b = (oB - iB) < 0 ? 0 : oB - iB;
41536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray            out->a = (oA - iA) < 0 ? 0 : oA - iA;
41636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        }
41736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
41836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_STAMP:
41936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_STAMP");
42036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
42136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
42236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_RED:
42336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_RED");
42436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
42536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
42636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_GREEN:
42736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_GREEN");
42836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
42936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
43036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_BLUE:
43136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_BLUE");
43236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
43336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
43436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_HUE:
43536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_HUE");
43636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
43736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
43836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_SATURATION:
43936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_SATURATION");
44036889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
44136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
44236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_COLOR:
44336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_COLOR");
44436889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
44536889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
44636889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    case BLEND_LUMINOSITY:
44736889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented blend intrinsic BLEND_LUMINOSITY");
44836889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
44936889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        break;
450cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
45136889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray    default:
45236889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        ALOGE("Called unimplemented value %d", p->slot);
45336889a0ecf564e3d47e7f69bb030c6b927061792Tim Murray        rsAssert(false);
454cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
455cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams    }
456cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams}
457cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
458cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
459c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptIntrinsicBlend::RsdCpuScriptIntrinsicBlend(RsdCpuReferenceImpl *ctx,
460c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams                                                       const Script *s, const Element *e)
461c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams            : RsdCpuScriptIntrinsic(ctx, s, e, RS_SCRIPT_INTRINSIC_ID_BLEND) {
462cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
463709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    mRootPtr = &kernel;
464cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams}
465cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
466709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicBlend::~RsdCpuScriptIntrinsicBlend() {
467709a0978ae141198018ca9769f8d96292a8928e6Jason Sams}
468709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
469709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicBlend::populateScript(Script *s) {
470709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    s->mHal.info.exportedVariableCount = 0;
471709a0978ae141198018ca9769f8d96292a8928e6Jason Sams}
472709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
473c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptImpl * rsdIntrinsic_Blend(RsdCpuReferenceImpl *ctx,
474c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams                                      const Script *s, const Element *e) {
475c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams    return new RsdCpuScriptIntrinsicBlend(ctx, s, e);
476709a0978ae141198018ca9769f8d96292a8928e6Jason Sams}
477709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
478709a0978ae141198018ca9769f8d96292a8928e6Jason Sams
479cf9ea9f4145cae663f439b1c2dab956fa37180bbJason Sams
480