161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni/*
261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * Copyright (C) 2015 The Android Open Source Project
361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni *
461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * Licensed under the Apache License, Version 2.0 (the "License");
561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * you may not use this file except in compliance with the License.
661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * You may obtain a copy of the License at
761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni *
861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni *      http://www.apache.org/licenses/LICENSE-2.0
961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni *
1061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * Unless required by applicable law or agreed to in writing, software
1161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * distributed under the License is distributed on an "AS IS" BASIS,
1261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * See the License for the specific language governing permissions and
1461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni * limitations under the License.
1561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni */
1661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
1761ff1b75dbd28494004d1b6d989be34ae28a18acYang Nipackage com.android.rs.test_compat;
1861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
1961ff1b75dbd28494004d1b6d989be34ae28a18acYang Niimport android.content.Context;
2061ff1b75dbd28494004d1b6d989be34ae28a18acYang Niimport android.content.res.Resources;
2161ff1b75dbd28494004d1b6d989be34ae28a18acYang Niimport android.support.v8.renderscript.*;
2261ff1b75dbd28494004d1b6d989be34ae28a18acYang Niimport android.util.Log;
2361ff1b75dbd28494004d1b6d989be34ae28a18acYang Niimport java.lang.Thread;
2461ff1b75dbd28494004d1b6d989be34ae28a18acYang Niimport java.util.HashMap;
2561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
2661ff1b75dbd28494004d1b6d989be34ae28a18acYang Nipublic class UT_script_group2_nochain extends UnitTest {
2761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni    private Resources mRes;
2861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
2961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni    private static final int ARRAY_SIZE = 256;
3061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
3161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni    private static final String TAG = "ScritGroup2 (nochain)";
3261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
3361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni    protected UT_script_group2_nochain(RSTestCore rstc, Resources res, Context ctx) {
3461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        super(rstc, TAG, ctx);
3561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        mRes = res;
3661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni    }
3761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
3861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni    public void run() {
3961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        RenderScript pRS = RenderScript.create(mCtx);
4061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptC_increment s_inc = new ScriptC_increment(pRS);
4161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptC_increment2 s_inc2 = new ScriptC_increment2(pRS);
4261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptC_double s_double = new ScriptC_double(pRS);
4361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        pRS.setMessageHandler(mRsMessage);
4461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
4561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        int[] array = new int[ARRAY_SIZE * 4];
4661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
4761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        for (int i = 0; i < ARRAY_SIZE * 4; i++) {
4861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni            array[i] = i;
4961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        }
5061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
5161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        Allocation input = Allocation.createSized(pRS, Element.I32_4(pRS), ARRAY_SIZE);
5261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        input.copyFrom(array);
5361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
5461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptGroup.Builder2 builder = new ScriptGroup.Builder2(pRS);
5561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
5661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptGroup.Input unbound = builder.addInput();
5761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
5861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptGroup.Closure c0 =
5961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                builder.addKernel(s_inc.getKernelID_increment(),
6061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  Type.createX(pRS, Element.I32_4(pRS), ARRAY_SIZE),
6161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  unbound);
6261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
6361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
6461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptGroup.Closure c1 =
6561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                builder.addKernel(s_inc2.getKernelID_increment2(),
6661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  Type.createX(pRS, Element.I32_4(pRS), ARRAY_SIZE),
6761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  unbound,
6861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  //input,
6961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  new ScriptGroup.Binding(s_inc2.getFieldID_a(), unbound));
7061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  //new ScriptGroup.Binding(s_inc2.getFieldID_a(), input));
7161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
7261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptGroup.Closure c2 =
7361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                builder.addKernel(s_double.getKernelID_doubleKernel(),
7461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  Type.createX(pRS, Element.I32_4(pRS), ARRAY_SIZE),
7561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                                  unbound);
7661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
7761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ScriptGroup group = builder.create("AddDouble2", c2.getReturn());
7861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
7961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        int[] a = new int[ARRAY_SIZE * 4];
8061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        ((Allocation)group.execute(input)[0]).copyTo(a);
8161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
8261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        pRS.finish();
8361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        pRS.destroy();
8461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni
8561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        boolean failed = false;
8661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        for (int i = 0; i < ARRAY_SIZE * 4; i++) {
8761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni            if (a[i] != (i + 1) * 2) {
8861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                Log.e(TAG, "a["+i+"]="+a[i]+", should be "+ ((i + 1) * 2));
8961ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni                failed = true;
9061ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni            }
9161ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        }
9261ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        if (failed) {
9361ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni            failTest();
9461ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni            return;
9561ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        }
9661ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni        passTest();
9761ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni    }
9861ff1b75dbd28494004d1b6d989be34ae28a18acYang Ni}
99