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.rs
20277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
21277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
22277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grosspackage examples;
23277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
24277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grossimport android.renderscript.*;
25277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grossimport examples.reduce_general_examplesBitCode;
26277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
27277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross/**
28277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * @hide
29277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
30277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grosspublic class ScriptC_reduce_general_examples extends ScriptC {
31277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private static final String __rs_resource_name = "reduce_general_examples";
32277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // Constructor
33277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public  ScriptC_reduce_general_examples(RenderScript rs) {
34277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        super(rs,
35277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross              __rs_resource_name,
36277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross              reduce_general_examplesBitCode.getBitCode32(),
37277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross              reduce_general_examplesBitCode.getBitCode64());
38277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mRSLocal = rs;
39277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __I32 = Element.I32(rs);
40277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __F32 = Element.F32(rs);
41277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __I32_2 = Element.I32_2(rs);
42277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __U32 = Element.U32(rs);
43277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        __U8 = Element.U8(rs);
44277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
45277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
46277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __F32;
47277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __I32;
48277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __I32_2;
49277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __U32;
50277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Element __U8;
51277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private RenderScript mRSLocal;
52277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // To obtain the result, invoke get(), which blocks
53277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // until the asynchronously-launched operation has completed.
54277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static class resultArray256_uint {
55277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        public long[] get() {
56d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            if (!mGotResult) {
57d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                int[] outArray = new int[256];
58d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.copyTo(outArray);
59d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                long[] result = new long[256];
60d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                for (int Idx = 0; Idx < 256; ++Idx) {
61d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    result[Idx] = ((long) ((outArray[Idx]) & 0xffffffffL));
62d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
63d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
64d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mResult = result;
65d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.destroy();
66d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut = null;  // make Java object eligible for garbage collection
67d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                if (mTempIns != null) {
68d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    for (Allocation tempIn : mTempIns) {
69d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                        tempIn.destroy();
70d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    }
71d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
72d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    mTempIns = null;  // make Java objects eligible for garbage collection
73d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
74d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
75d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mGotResult = true;
76277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            }
77277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
78d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            return mResult;
79277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
80277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
81277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private  resultArray256_uint(Allocation out) {
82d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mTempIns = null;
83277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mOut = out;
84d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mGotResult = false;
85277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
86277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
87d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Allocation[] mTempIns;
88277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private Allocation mOut;
89d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private boolean mGotResult;
90d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private long[] mResult;
91277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
92277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
93277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // To obtain the result, invoke get(), which blocks
94277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // until the asynchronously-launched operation has completed.
95277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static class result_float {
96277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        public float get() {
97d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            if (!mGotResult) {
98d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                float[] outArray = new float[1];
99d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.copyTo(outArray);
100d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mResult = outArray[0];
101d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.destroy();
102d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut = null;  // make Java object eligible for garbage collection
103d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                if (mTempIns != null) {
104d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    for (Allocation tempIn : mTempIns) {
105d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                        tempIn.destroy();
106d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    }
107d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
108d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    mTempIns = null;  // make Java objects eligible for garbage collection
109d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
110d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
111d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mGotResult = true;
112d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            }
113d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
114d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            return mResult;
115277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
116277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
117277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private  result_float(Allocation out) {
118d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mTempIns = null;
119277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mOut = out;
120d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mGotResult = false;
121277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
122277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
123d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Allocation[] mTempIns;
124277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private Allocation mOut;
125d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private boolean mGotResult;
126d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private float mResult;
127277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
128277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
129277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // To obtain the result, invoke get(), which blocks
130277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // until the asynchronously-launched operation has completed.
131277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static class result_int {
132277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        public int get() {
133d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            if (!mGotResult) {
134d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                int[] outArray = new int[1];
135d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.copyTo(outArray);
136d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mResult = outArray[0];
137d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.destroy();
138d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut = null;  // make Java object eligible for garbage collection
139d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                if (mTempIns != null) {
140d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    for (Allocation tempIn : mTempIns) {
141d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                        tempIn.destroy();
142d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    }
143d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
144d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    mTempIns = null;  // make Java objects eligible for garbage collection
145d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
146d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
147d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mGotResult = true;
148d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            }
149d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
150d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            return mResult;
151277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
152277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
153277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private  result_int(Allocation out) {
154d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mTempIns = null;
155277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mOut = out;
156d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mGotResult = false;
157277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
158277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
159d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Allocation[] mTempIns;
160277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private Allocation mOut;
161d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private boolean mGotResult;
162d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private int mResult;
163277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
164277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
165277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // To obtain the result, invoke get(), which blocks
166277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // until the asynchronously-launched operation has completed.
167277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static class result_int2 {
168277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        public Int2 get() {
169d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            if (!mGotResult) {
170d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                int[] outArray = new int[2];
171d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.copyTo(outArray);
172d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mResult = new Int2(outArray[0], outArray[1]);
173d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut.destroy();
174d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mOut = null;  // make Java object eligible for garbage collection
175d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                if (mTempIns != null) {
176d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    for (Allocation tempIn : mTempIns) {
177d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                        tempIn.destroy();
178d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    }
179d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
180d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                    mTempIns = null;  // make Java objects eligible for garbage collection
181d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                }
182d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
183d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross                mGotResult = true;
184d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            }
185d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross
186d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            return mResult;
187277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
188277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
189277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private  result_int2(Allocation out) {
190d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mTempIns = null;
191277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mOut = out;
192d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross            mGotResult = false;
193277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
194277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
195d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Allocation[] mTempIns;
196277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        private Allocation mOut;
197d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private boolean mGotResult;
198d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        private Int2 mResult;
199277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
200277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
2018ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_addint = 0;
202277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "val"
203277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint(int[] in1) {
204277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
205277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
206277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
207277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2081381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
209277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
2101381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
211277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
212d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int result = reduce_addint(ain1, null);
213d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
214d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
215277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
216277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
217277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
218277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint(Allocation ain1) {
219277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_addint(ain1, null);
220277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
221277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
222277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
223277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_addint(Allocation ain1, Script.LaunchOptions sc) {
224277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
225277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__I32)) {
226277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with I32!");
227277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
228277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
229277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
2308ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_addint, new Allocation[]{ain1}, aout, sc);
231277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int(aout);
232277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
233277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
2348ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_mpyint = 1;
235277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "val"
236277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_mpyint(int[] in1) {
237277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
238277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
239277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
240277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2411381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
242277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
2431381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
244277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
245d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int result = reduce_mpyint(ain1, null);
246d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
247d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
248277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
249277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
250277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
251277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_mpyint(Allocation ain1) {
252277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_mpyint(ain1, null);
253277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
254277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
255277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int val"
256277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_mpyint(Allocation ain1, Script.LaunchOptions sc) {
257277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
258277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__I32)) {
259277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with I32!");
260277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
261277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
262277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
2638ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_mpyint, new Allocation[]{ain1}, aout, sc);
264277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int(aout);
265277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
266277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
2678ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_dp = 2;
268277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "in1"
269277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in2 = "in2"
270277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_float reduce_dp(float[] in1, float[] in2) {
271277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
272277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
273277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
274277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2751381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
2761381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.setAutoPadding(true);
2771381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
278277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in2" is non-null.
279277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in2 == null) {
280277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in2\" is null!");
281277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
282277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that input array lengths are the same.
283277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1.length != in2.length) {
284277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
285277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
2861381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
287277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain2.setAutoPadding(true);
2881381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain2.copyFrom(in2);
289277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
290d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_float result = reduce_dp(ain1, ain2, null);
291d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1, ain2};
292d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
293277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
294277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
295277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "float in1"
296277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain2 = "float in2"
297277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_float reduce_dp(Allocation ain1, Allocation ain2) {
298277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_dp(ain1, ain2, null);
299277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
300277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
301277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "float in1"
302277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain2 = "float in2"
303277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_float reduce_dp(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
304277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Type t0, t1;
305277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
306277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__F32)) {
307277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with F32!");
308277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
309277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain2
310277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain2.getType().getElement().isCompatible(__F32)) {
311277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with F32!");
312277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
313277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify dimensions
314277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        t0 = ain1.getType();
315277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        t1 = ain2.getType();
316277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if ((t0.getCount() != t1.getCount()) ||
317277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.getX() != t1.getX()) ||
318277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.getY() != t1.getY()) ||
319277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.getZ() != t1.getZ()) ||
320277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.hasFaces()   != t1.hasFaces()) ||
321277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            (t0.hasMipmaps() != t1.hasMipmaps())) {
322277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
323277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
324277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
325277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __F32, 1);
326277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
3278ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_dp, new Allocation[]{ain1, ain2}, aout, sc);
328277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_float(aout);
329277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
330277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
3318ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_findMinAndMax = 3;
332277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "in"
333277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_findMinAndMax(float[] in1) {
334277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
335277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
336277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
337277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
3381381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
339277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
3401381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
341277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
342d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int2 result = reduce_findMinAndMax(ain1, null);
343d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
344d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
345277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
346277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
347277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "float in"
348277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_findMinAndMax(Allocation ain1) {
349277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_findMinAndMax(ain1, null);
350277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
351277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
352277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "float in"
353277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_findMinAndMax(Allocation ain1, Script.LaunchOptions sc) {
354277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
355277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__F32)) {
356277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with F32!");
357277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
358277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
359277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
3608ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_findMinAndMax, new Allocation[]{ain1}, aout, sc);
361277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int2(aout);
362277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
363277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
3648ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_fz = 4;
365277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "inVal"
366277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_fz(int[] in1) {
367277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
368277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
369277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
370277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
3711381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
372277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
3731381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
374277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
375d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int result = reduce_fz(ain1, null);
376d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
377d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
378277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
379277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
380277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int inVal"
381277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_fz(Allocation ain1) {
382277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_fz(ain1, null);
383277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
384277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
385277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int inVal"
386277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int reduce_fz(Allocation ain1, Script.LaunchOptions sc) {
387277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
388277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__I32)) {
389277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with I32!");
390277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
391277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
392277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
3938ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_fz, new Allocation[]{ain1}, aout, sc);
394277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int(aout);
395277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
396277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
3978ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_fz2 = 5;
398277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "inVal"
399277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_fz2(int[] in1) {
400277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
401277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
402277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
403277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
4041381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
405277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
4061381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
407277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
408d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int2 result = reduce_fz2(ain1, null);
409d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
410d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
411277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
412277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
413277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int inVal"
414277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_fz2(Allocation ain1) {
415277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_fz2(ain1, null);
416277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
417277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
418277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "int inVal"
419277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_fz2(Allocation ain1, Script.LaunchOptions sc) {
420277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
421277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__I32)) {
422277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with I32!");
423277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
424277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
425277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
4268ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_fz2, new Allocation[]{ain1}, aout, sc);
427277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int2(aout);
428277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
429277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
4308ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_histogram = 6;
431277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "in"
432277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public resultArray256_uint reduce_histogram(byte[] in1) {
433277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
434277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
435277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
436277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
4371381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
438277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
4391381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
440277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
441d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        resultArray256_uint result = reduce_histogram(ain1, null);
442d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
443d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
444277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
445277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
446277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "uchar in"
447277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public resultArray256_uint reduce_histogram(Allocation ain1) {
448277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_histogram(ain1, null);
449277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
450277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
451277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "uchar in"
452277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public resultArray256_uint reduce_histogram(Allocation ain1, Script.LaunchOptions sc) {
453277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
454277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__U8)) {
455277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with U8!");
456277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
457277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __U32, 256);
458277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
4598ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_histogram, new Allocation[]{ain1}, aout, sc);
460277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new resultArray256_uint(aout);
461277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
462277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
4638ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross    private final static int mExportReduceIdx_mode = 7;
464277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // in1 = "in"
465277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_mode(byte[] in1) {
466277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // Verify that "in1" is non-null.
467277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (in1 == null) {
468277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Array \"in1\" is null!");
469277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
4701381ae7c081ab151e78184501f757f517fe6c2a9David Gross        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
471277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ain1.setAutoPadding(true);
4721381ae7c081ab151e78184501f757f517fe6c2a9David Gross        ain1.copyFrom(in1);
473277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
474d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result_int2 result = reduce_mode(ain1, null);
475d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        result.mTempIns = new Allocation[]{ain1};
476d204e65f7b46a3592a254d581e4b9f2af92b6eacDavid Gross        return result;
477277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
478277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
479277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "uchar in"
480277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_mode(Allocation ain1) {
481277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return reduce_mode(ain1, null);
482277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
483277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
484277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    // ain1 = "uchar in"
485277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public result_int2 reduce_mode(Allocation ain1, Script.LaunchOptions sc) {
486277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        // check ain1
487277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (!ain1.getType().getElement().isCompatible(__U8)) {
488277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSRuntimeException("Type mismatch with U8!");
489277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
490277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
491277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        aout.setAutoPadding(true);
4928ee018bdb53fc5abdc430878e2bec0c0c0aa560fDavid Gross        reduce(mExportReduceIdx_mode, new Allocation[]{ain1}, aout, sc);
493277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new result_int2(aout);
494277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
495277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
496277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross}
497277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
498