ScriptIntrinsicBlend.java revision 74478f73b7ecf5c6bceb214b2704184ad9e2e0ec
1f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams/*
2f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * Copyright (C) 2012 The Android Open Source Project
3f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams *
4f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * you may not use this file except in compliance with the License.
6f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * You may obtain a copy of the License at
7f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams *
8f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams *
10f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * Unless required by applicable law or agreed to in writing, software
11f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * See the License for the specific language governing permissions and
14f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * limitations under the License.
15f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams */
16f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
17f70bb04346707c49f31d5ac4853a6fce555b715eJason Samspackage android.renderscript;
18f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
19f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
20f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams/**
21f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * Intrinsic kernels for blending two buffers. Each blend function is a separate
22f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams * kernel to make it easy to change between blend modes.
23f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams **/
24f70bb04346707c49f31d5ac4853a6fce555b715eJason Samspublic class ScriptIntrinsicBlend extends ScriptIntrinsic {
25f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    ScriptIntrinsicBlend(int id, RenderScript rs) {
26f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        super(id, rs);
27f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
28f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
29f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
30f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Supported elements types are uchar4
31f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
32f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
33f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param rs
34f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param e
35f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
36f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return ScriptIntrinsicBlend
37f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
38f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public static ScriptIntrinsicBlend create(RenderScript rs, Element e) {
3974478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray        // 7 comes from RS_SCRIPT_INTRINSIC_ID_BLEND in rsDefines.h
4074478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray        int id = rs.nScriptIntrinsicCreate(7, e.getID(rs));
41f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return new ScriptIntrinsicBlend(id, rs);
42f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
43f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
44f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
45f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    private void blend(int id, Allocation ain, Allocation aout) {
4674478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray        if (!ain.getElement().isCompatible(Element.U8_4(mRS))) {
4774478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray            throw new RSIllegalArgumentException("Input is not of expected format.");
48f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        }
4974478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray        if (!aout.getElement().isCompatible(Element.U8_4(mRS))) {
5074478f73b7ecf5c6bceb214b2704184ad9e2e0ecTim Murray            throw new RSIllegalArgumentException("Output is not of expected format.");
51f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        }
52f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        forEach(id, ain, aout, null);
53f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
54f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
55f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
56f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = {0, 0, 0, 0}
57f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
58f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
59f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
60f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
61f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachClear(Allocation ain, Allocation aout) {
62f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(0, ain, aout);
63f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
64f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
65f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
66f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the Clear kernel.
67f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
68f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
69f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
70f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDClear() {
71f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(0, 3, null, null);
72f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
73f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
74f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
75f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
76f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = src
77f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
78f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
79f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
80f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
81f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSrc(Allocation ain, Allocation aout) {
82f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(1, ain, aout);
83f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
84f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
85f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
86f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the Src kernel.
87f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
88f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
89f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
90f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDSrc() {
91f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(1, 3, null, null);
92f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
93f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
94f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
95f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = dst
96f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * This is a NOP
97f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
98f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
99f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
100f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
101f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachDst(Allocation ain, Allocation aout) {
102f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        // NOP
103f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
104f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
105f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
106f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the Dst kernel.
107f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
108f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
109f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
110f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDDst() {
111f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(2, 3, null, null);
112f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
113f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
114f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
115f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = src + dst * (1.0 - src.a)
116f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
117f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
118f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
119f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
120f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSrcOver(Allocation ain, Allocation aout) {
121f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(3, ain, aout);
122f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
123f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
124f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
125f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the SrcOver kernel.
126f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
127f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
128f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
129f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDSrcOver() {
130f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(3, 3, null, null);
131f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
132f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
133f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
134f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = dst + src * (1.0 - dst.a)
135f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
136f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
137f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
138f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
139f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachDstOver(Allocation ain, Allocation aout) {
140f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(4, ain, aout);
141f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
142f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
143f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
144f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the DstOver kernel.
145f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
146f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
147f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
148f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDDstOver() {
149f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(4, 3, null, null);
150f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
151f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
152f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
153f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = src * dst.a
154f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
155f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
156f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
157f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
158f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSrcIn(Allocation ain, Allocation aout) {
159f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(5, ain, aout);
160f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
161f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
162f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
163f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the SrcIn kernel.
164f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
165f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
166f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
167f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDSrcIn() {
168f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(5, 3, null, null);
169f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
170f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
171f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
172f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = dst * src.a
173f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
174f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
175f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
176f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
177f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachDstIn(Allocation ain, Allocation aout) {
178f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(6, ain, aout);
179f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
180f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
181f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
182f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the DstIn kernel.
183f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
184f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
185f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
186f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDDstIn() {
187f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(6, 3, null, null);
188f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
189f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
190f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
191f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = src * (1.0 - dst.a)
192f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
193f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
194f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
195f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
196f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSrcOut(Allocation ain, Allocation aout) {
197f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(7, ain, aout);
198f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
199f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
200f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
201f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the SrcOut kernel.
202f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
203f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
204f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
205f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDSrcOut() {
206f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(7, 3, null, null);
207f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
208f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
209f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
210f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = dst * (1.0 - src.a)
211f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
212f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
213f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
214f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
215f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachDstOut(Allocation ain, Allocation aout) {
216f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(8, ain, aout);
217f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
218f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
219f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
220f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the DstOut kernel.
221f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
222f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
223f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
224f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDDstOut() {
225f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(8, 3, null, null);
226f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
227f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
228f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
229f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb
230f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst.a = dst.a
231f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
232f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
233f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
234f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
235f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSrcAtop(Allocation ain, Allocation aout) {
236f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(9, ain, aout);
237f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
238f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
239f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
240f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the SrcAtop kernel.
241f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
242f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
243f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
244f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDSrcAtop() {
245f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(9, 3, null, null);
246f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
247f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
248f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
249f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
250f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst.a = src.a
251f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
252f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
253f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
254f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
255f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachDstAtop(Allocation ain, Allocation aout) {
256f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(10, ain, aout);
257f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
258f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
259f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
260f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the DstAtop kernel.
261f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
262f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
263f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
264f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDDstAtop() {
265f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(10, 3, null, null);
266f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
267f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
268f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
269f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
270f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
271f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
272f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
273f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
274f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachXor(Allocation ain, Allocation aout) {
275f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(11, ain, aout);
276f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
277f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
278f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
279f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the Xor kernel.
280f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
281f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
282f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
283f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDXor() {
284f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(11, 3, null, null);
285f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
286f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
287f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    ////////
288f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams/*
289f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachNormal(Allocation ain, Allocation aout) {
290f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(12, ain, aout);
291f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
292f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
293f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachAverage(Allocation ain, Allocation aout) {
294f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(13, ain, aout);
295f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
296f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams*/
297f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
298f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = src * dst
299f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
300f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
301f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
302f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
303f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachMultiply(Allocation ain, Allocation aout) {
304f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(14, ain, aout);
305f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
306f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
307f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
308f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the Multiply kernel.
309f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
310f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
311f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
312f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDMultiply() {
313f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(14, 3, null, null);
314f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
315f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
316f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams/*
317f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachScreen(Allocation ain, Allocation aout) {
318f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(15, ain, aout);
319f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
320f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
321f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachDarken(Allocation ain, Allocation aout) {
322f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(16, ain, aout);
323f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
324f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
325f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachLighten(Allocation ain, Allocation aout) {
326f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(17, ain, aout);
327f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
328f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
329f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachOverlay(Allocation ain, Allocation aout) {
330f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(18, ain, aout);
331f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
332f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
333f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachHardlight(Allocation ain, Allocation aout) {
334f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(19, ain, aout);
335f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
336f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
337f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSoftlight(Allocation ain, Allocation aout) {
338f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(20, ain, aout);
339f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
340f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
341f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachDifference(Allocation ain, Allocation aout) {
342f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(21, ain, aout);
343f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
344f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
345f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachNegation(Allocation ain, Allocation aout) {
346f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(22, ain, aout);
347f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
348f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
349f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachExclusion(Allocation ain, Allocation aout) {
350f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(23, ain, aout);
351f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
352f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
353f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachColorDodge(Allocation ain, Allocation aout) {
354f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(24, ain, aout);
355f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
356f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
357f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachInverseColorDodge(Allocation ain, Allocation aout) {
358f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(25, ain, aout);
359f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
360f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
361f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSoftDodge(Allocation ain, Allocation aout) {
362f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(26, ain, aout);
363f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
364f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
365f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachColorBurn(Allocation ain, Allocation aout) {
366f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(27, ain, aout);
367f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
368f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
369f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachInverseColorBurn(Allocation ain, Allocation aout) {
370f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(28, ain, aout);
371f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
372f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
373f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSoftBurn(Allocation ain, Allocation aout) {
374f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(29, ain, aout);
375f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
376f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
377f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachReflect(Allocation ain, Allocation aout) {
378f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(30, ain, aout);
379f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
380f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
381f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachGlow(Allocation ain, Allocation aout) {
382f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(31, ain, aout);
383f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
384f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
385f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachFreeze(Allocation ain, Allocation aout) {
386f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(32, ain, aout);
387f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
388f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
389f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachHeat(Allocation ain, Allocation aout) {
390f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(33, ain, aout);
391f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
392f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams*/
393f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
394f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = min(src + dst, 1.0)
395f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
396f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
397f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
398f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
399f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachAdd(Allocation ain, Allocation aout) {
400f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(34, ain, aout);
401f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
402f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
403f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
404f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the Add kernel.
405f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
406f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
407f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
408f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDAdd() {
409f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(34, 3, null, null);
410f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
411f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
412f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
413f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * dst = max(dst - src, 0.0)
414f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
415f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param ain The source buffer
416f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @param aout The destination buffer
417f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
418f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSubtract(Allocation ain, Allocation aout) {
419f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(35, ain, aout);
420f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
421f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
422f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    /**
423f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * Get a KernelID for the Subtract kernel.
424f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     *
425f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     * @return Script.KernelID The KernelID object.
426f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams     */
427f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public Script.KernelID getKernelIDSubtract() {
428f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        return createKernelID(35, 3, null, null);
429f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
430f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
431f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams/*
432f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachStamp(Allocation ain, Allocation aout) {
433f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(36, ain, aout);
434f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
435f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
436f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachRed(Allocation ain, Allocation aout) {
437f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(37, ain, aout);
438f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
439f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
440f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachGreen(Allocation ain, Allocation aout) {
441f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(38, ain, aout);
442f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
443f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
444f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachBlue(Allocation ain, Allocation aout) {
445f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(39, ain, aout);
446f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
447f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
448f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachHue(Allocation ain, Allocation aout) {
449f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(40, ain, aout);
450f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
451f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
452f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachSaturation(Allocation ain, Allocation aout) {
453f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(41, ain, aout);
454f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
455f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
456f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachColor(Allocation ain, Allocation aout) {
457f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(42, ain, aout);
458f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
459f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
460f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    public void forEachLuminosity(Allocation ain, Allocation aout) {
461f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams        blend(43, ain, aout);
462f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams    }
463f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams*/
464f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams}
465f70bb04346707c49f31d5ac4853a6fce555b715eJason Sams
466