1263459d028a714d731b4b729547f5989498b137dStephen Hines/*
2263459d028a714d731b4b729547f5989498b137dStephen Hines * Copyright (C) 2012 The Android Open Source Project
3263459d028a714d731b4b729547f5989498b137dStephen Hines *
4263459d028a714d731b4b729547f5989498b137dStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
5263459d028a714d731b4b729547f5989498b137dStephen Hines * you may not use this file except in compliance with the License.
6263459d028a714d731b4b729547f5989498b137dStephen Hines * You may obtain a copy of the License at
7263459d028a714d731b4b729547f5989498b137dStephen Hines *
8263459d028a714d731b4b729547f5989498b137dStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
9263459d028a714d731b4b729547f5989498b137dStephen Hines *
10263459d028a714d731b4b729547f5989498b137dStephen Hines * Unless required by applicable law or agreed to in writing, software
11263459d028a714d731b4b729547f5989498b137dStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
12263459d028a714d731b4b729547f5989498b137dStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13263459d028a714d731b4b729547f5989498b137dStephen Hines * See the License for the specific language governing permissions and
14263459d028a714d731b4b729547f5989498b137dStephen Hines * limitations under the License.
15263459d028a714d731b4b729547f5989498b137dStephen Hines */
16263459d028a714d731b4b729547f5989498b137dStephen Hines
17263459d028a714d731b4b729547f5989498b137dStephen Hinespackage com.android.rs.test;
18263459d028a714d731b4b729547f5989498b137dStephen Hines
19263459d028a714d731b4b729547f5989498b137dStephen Hinesimport android.content.Context;
20263459d028a714d731b4b729547f5989498b137dStephen Hinesimport android.content.res.Resources;
21263459d028a714d731b4b729547f5989498b137dStephen Hinesimport android.renderscript.*;
22263459d028a714d731b4b729547f5989498b137dStephen Hinesimport android.util.Log;
23263459d028a714d731b4b729547f5989498b137dStephen Hines
24263459d028a714d731b4b729547f5989498b137dStephen Hinespublic class UT_kernel extends UnitTest {
25263459d028a714d731b4b729547f5989498b137dStephen Hines    private Resources mRes;
26263459d028a714d731b4b729547f5989498b137dStephen Hines    private Allocation A;
27263459d028a714d731b4b729547f5989498b137dStephen Hines    private Allocation B;
28263459d028a714d731b4b729547f5989498b137dStephen Hines
29263459d028a714d731b4b729547f5989498b137dStephen Hines    protected UT_kernel(RSTestCore rstc, Resources res, Context ctx) {
30263459d028a714d731b4b729547f5989498b137dStephen Hines        super(rstc, "Kernels (pass-by-value)", ctx);
31263459d028a714d731b4b729547f5989498b137dStephen Hines        mRes = res;
32263459d028a714d731b4b729547f5989498b137dStephen Hines    }
33263459d028a714d731b4b729547f5989498b137dStephen Hines
34263459d028a714d731b4b729547f5989498b137dStephen Hines    private void initializeGlobals(RenderScript RS, ScriptC_kernel s) {
35263459d028a714d731b4b729547f5989498b137dStephen Hines        Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
36263459d028a714d731b4b729547f5989498b137dStephen Hines        int X = 5;
37263459d028a714d731b4b729547f5989498b137dStephen Hines        s.set_dimX(X);
38263459d028a714d731b4b729547f5989498b137dStephen Hines        typeBuilder.setX(X);
39263459d028a714d731b4b729547f5989498b137dStephen Hines        A = Allocation.createTyped(RS, typeBuilder.create());
40263459d028a714d731b4b729547f5989498b137dStephen Hines        s.bind_ain(A);
41263459d028a714d731b4b729547f5989498b137dStephen Hines        B = Allocation.createTyped(RS, typeBuilder.create());
42263459d028a714d731b4b729547f5989498b137dStephen Hines        s.bind_aout(B);
43263459d028a714d731b4b729547f5989498b137dStephen Hines
44263459d028a714d731b4b729547f5989498b137dStephen Hines        return;
45263459d028a714d731b4b729547f5989498b137dStephen Hines    }
46263459d028a714d731b4b729547f5989498b137dStephen Hines
47263459d028a714d731b4b729547f5989498b137dStephen Hines    public void run() {
48263459d028a714d731b4b729547f5989498b137dStephen Hines        RenderScript pRS = RenderScript.create(mCtx);
49263459d028a714d731b4b729547f5989498b137dStephen Hines        ScriptC_kernel s = new ScriptC_kernel(pRS);
50263459d028a714d731b4b729547f5989498b137dStephen Hines        pRS.setMessageHandler(mRsMessage);
51263459d028a714d731b4b729547f5989498b137dStephen Hines        initializeGlobals(pRS, s);
52263459d028a714d731b4b729547f5989498b137dStephen Hines        s.forEach_init_vars(A);
53263459d028a714d731b4b729547f5989498b137dStephen Hines        s.forEach_root(A, B);
54263459d028a714d731b4b729547f5989498b137dStephen Hines        s.invoke_verify_root();
55263459d028a714d731b4b729547f5989498b137dStephen Hines        s.invoke_kernel_test();
56263459d028a714d731b4b729547f5989498b137dStephen Hines        pRS.finish();
57263459d028a714d731b4b729547f5989498b137dStephen Hines        waitForMessage();
58263459d028a714d731b4b729547f5989498b137dStephen Hines        pRS.destroy();
59263459d028a714d731b4b729547f5989498b137dStephen Hines    }
60263459d028a714d731b4b729547f5989498b137dStephen Hines}
61