1277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross/*
2277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * Copyright (C) 2011-2014 The Android Open Source Project
3277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *
4277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * Licensed under the Apache License, Version 2.0 (the "License");
5277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * you may not use this file except in compliance with the License.
6277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * You may obtain a copy of the License at
7277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *
8277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *      http://www.apache.org/licenses/LICENSE-2.0
9277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *
10277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * Unless required by applicable law or agreed to in writing, software
11277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * distributed under the License is distributed on an "AS IS" BASIS,
12277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * See the License for the specific language governing permissions and
14277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * limitations under the License.
15277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
16277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
17277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross/*
18277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * This file is auto-generated. DO NOT MODIFY!
19277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * The source Renderscript file: reduce_general_examples_explicit.rs
20277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
21277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
22277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grosspackage examples;
23277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
24277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grossimport android.renderscript.*;
25277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grossimport examples.reduce_general_examples_explicitBitCode;
26277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
27277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross/**
28277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * @hide
29277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
30277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grosspublic class ScriptC_reduce_general_examples_explicit extends ScriptC {
31277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private static final String __rs_resource_name = "reduce_general_examples_explicit";
32277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // Constructor
33277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public  ScriptC_reduce_general_examples_explicit(RenderScript rs) {
34277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        super(rs,
35277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross              __rs_resource_name,
36277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross              reduce_general_examples_explicitBitCode.getBitCode32(),
37277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross              reduce_general_examples_explicitBitCode.getBitCode64());
38277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mRSLocal = rs;
39277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __I32 = Element.I32(rs);
40277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __F32 = Element.F32(rs);
41277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __U32 = Element.U32(rs);
42277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __U8 = Element.U8(rs);
43277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
44277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
45277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __F32;
46277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __I32;
47277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __U32;
48277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __U8;
49277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private RenderScript mRSLocal;
50277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // To obtain the result, invoke get(), which blocks
51277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // until the asynchronously-launched operation has completed.
52277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static class resultArray256_uint {
53277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        public long[] get() {
54d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            if (!mGotResult) {
55d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                int[] outArray = new int[256];
56d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.copyTo(outArray);
57d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                long[] result = new long[256];
58d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                for (int Idx = 0; Idx < 256; ++Idx) {
59d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    result[Idx] = ((long) ((outArray[Idx]) & 0xffffffffL));
60d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
61d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
62d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mResult = result;
63d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.destroy();
64d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut = null;  // make Java object eligible for garbage collection
65d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                if (mTempIns != null) {
66d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    for (Allocation tempIn : mTempIns) {
67d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                        tempIn.destroy();
68d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    }
69d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
70d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    mTempIns = null;  // make Java objects eligible for garbage collection
71d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
72d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
73d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mGotResult = true;
74277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            }
75277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
76d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            return mResult;
77277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
78277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
79277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private  resultArray256_uint(Allocation out) {
80d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mTempIns = null;
81277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mOut = out;
82d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mGotResult = false;
83277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
84277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
85d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Allocation[] mTempIns;
86277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private Allocation mOut;
87d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private boolean mGotResult;
88d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private long[] mResult;
89277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
90277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
91277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // To obtain the result, invoke get(), which blocks
92277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // until the asynchronously-launched operation has completed.
93277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static class result_float {
94277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        public float get() {
95d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            if (!mGotResult) {
96d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                float[] outArray = new float[1];
97d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.copyTo(outArray);
98d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mResult = outArray[0];
99d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.destroy();
100d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut = null;  // make Java object eligible for garbage collection
101d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                if (mTempIns != null) {
102d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    for (Allocation tempIn : mTempIns) {
103d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                        tempIn.destroy();
104d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    }
105d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
106d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    mTempIns = null;  // make Java objects eligible for garbage collection
107d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
108d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
109d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mGotResult = true;
110d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            }
111d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
112d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            return mResult;
113277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
114277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
115277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private  result_float(Allocation out) {
116d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mTempIns = null;
117277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mOut = out;
118d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mGotResult = false;
119277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
120277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
121d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Allocation[] mTempIns;
122277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private Allocation mOut;
123d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private boolean mGotResult;
124d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private float mResult;
125277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
126277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
127277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // To obtain the result, invoke get(), which blocks
128277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // until the asynchronously-launched operation has completed.
129277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static class result_int {
130277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        public int get() {
131d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            if (!mGotResult) {
132d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                int[] outArray = new int[1];
133d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.copyTo(outArray);
134d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mResult = outArray[0];
135d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.destroy();
136d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut = null;  // make Java object eligible for garbage collection
137d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                if (mTempIns != null) {
138d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    for (Allocation tempIn : mTempIns) {
139d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                        tempIn.destroy();
140d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    }
141d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
142d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    mTempIns = null;  // make Java objects eligible for garbage collection
143d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
144d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
145d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mGotResult = true;
146d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            }
147d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
148d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            return mResult;
149277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
150277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
151277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private  result_int(Allocation out) {
152d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mTempIns = null;
153277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mOut = out;
154d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mGotResult = false;
155277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
156277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
157d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Allocation[] mTempIns;
158277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private Allocation mOut;
159d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private boolean mGotResult;
160d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private int mResult;
161277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
162277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
1638ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_addint_init = 0;
164277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "val"
165277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_init(int[] in1) {
166277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
167277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
168277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
169277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
1701381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
171277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
1721381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
173277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
174d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int result = reduce_addint_init(ain1, null);
175d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
176d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
177277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
178277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
179277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
180277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_init(Allocation ain1) {
181277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_addint_init(ain1, null);
182277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
183277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
184277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
185277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_init(Allocation ain1, Script.LaunchOptions sc) {
186277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
187277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__I32)) {
188277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with I32!");
189277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
190277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
191277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
1928ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_addint_init, new Allocation[]{ain1}, aout, sc);
193277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int(aout);
194277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
195277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
1968ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_addint_comb = 1;
197277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "val"
198277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_comb(int[] in1) {
199277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
200277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
201277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
202277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2031381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
204277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
2051381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
206277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
207d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int result = reduce_addint_comb(ain1, null);
208d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
209d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
210277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
211277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
212277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
213277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_comb(Allocation ain1) {
214277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_addint_comb(ain1, null);
215277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
216277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
217277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
218277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_comb(Allocation ain1, Script.LaunchOptions sc) {
219277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
220277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__I32)) {
221277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with I32!");
222277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
223277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
224277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
2258ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_addint_comb, new Allocation[]{ain1}, aout, sc);
226277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int(aout);
227277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
228277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
2298ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_addint_init_comb = 2;
230277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "val"
231277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_init_comb(int[] in1) {
232277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
233277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
234277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
235277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2361381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
237277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
2381381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
239277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
240d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int result = reduce_addint_init_comb(ain1, null);
241d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
242d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
243277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
244277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
245277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
246277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_init_comb(Allocation ain1) {
247277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_addint_init_comb(ain1, null);
248277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
249277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
250277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
251277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint_init_comb(Allocation ain1, Script.LaunchOptions sc) {
252277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
253277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__I32)) {
254277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with I32!");
255277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
256277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
257277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
2588ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_addint_init_comb, new Allocation[]{ain1}, aout, sc);
259277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int(aout);
260277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
261277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
2628ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_dp_init = 3;
263277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "in1"
264277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in2 = "in2"
265277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_float reduce_dp_init(float[] in1, float[] in2) {
266277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
267277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
268277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
269277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2701381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
2711381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.setAutoPadding(true);
2721381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
273277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in2" is non-null.
274277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in2 == null) {
275277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in2\" is null!");
276277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
277277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that input array lengths are the same.
278277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1.length != in2.length) {
279277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
280277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2811381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
282277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain2.setAutoPadding(true);
2831381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain2.copyFrom(in2);
284277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
285d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_float result = reduce_dp_init(ain1, ain2, null);
286d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1, ain2};
287d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
288277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
289277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
290277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "float in1"
291277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain2 = "float in2"
292277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_float reduce_dp_init(Allocation ain1, Allocation ain2) {
293277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_dp_init(ain1, ain2, null);
294277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
295277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
296277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "float in1"
297277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain2 = "float in2"
298277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_float reduce_dp_init(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
299277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Type t0, t1;
300277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
301277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__F32)) {
302277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with F32!");
303277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
304277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain2
305277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain2.getType().getElement().isCompatible(__F32)) {
306277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with F32!");
307277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
308277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify dimensions
309277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        t0 = ain1.getType();
310277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        t1 = ain2.getType();
311277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if ((t0.getCount() != t1.getCount()) ||
312277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.getX() != t1.getX()) ||
313277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.getY() != t1.getY()) ||
314277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.getZ() != t1.getZ()) ||
315277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.hasFaces()   != t1.hasFaces()) ||
316277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.hasMipmaps() != t1.hasMipmaps())) {
317277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
318277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
319277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
320277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __F32, 1);
321277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
3228ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_dp_init, new Allocation[]{ain1, ain2}, aout, sc);
323277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_float(aout);
324277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
325277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
3268ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_histogram_init = 4;
327277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "in"
328277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public resultArray256_uint reduce_histogram_init(byte[] in1) {
329277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
330277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
331277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
332277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
3331381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
334277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
3351381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
336277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
337d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        resultArray256_uint result = reduce_histogram_init(ain1, null);
338d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
339d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
340277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
341277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
342277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "uchar in"
343277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public resultArray256_uint reduce_histogram_init(Allocation ain1) {
344277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_histogram_init(ain1, null);
345277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
346277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
347277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "uchar in"
348277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public resultArray256_uint reduce_histogram_init(Allocation ain1, Script.LaunchOptions sc) {
349277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
350277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__U8)) {
351277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with U8!");
352277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
353277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __U32, 256);
354277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
3558ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_histogram_init, new Allocation[]{ain1}, aout, sc);
356277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new resultArray256_uint(aout);
357277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
358277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
359277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross}
360277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
361