1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Copyright (C) 2012 The Android Open Source Project
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * you may not use this file except in compliance with the License.
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * You may obtain a copy of the License at
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Unless required by applicable law or agreed to in writing, software
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * See the License for the specific language governing permissions and
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * limitations under the License.
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpackage com.android.rs.image2;
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownimport java.lang.Math;
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownimport android.support.v8.renderscript.*;
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownimport android.util.Log;
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpublic class ColorCube extends TestBase {
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    private Allocation mCube;
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    private ScriptC_colorcube mScript;
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    private ScriptIntrinsic3DLUT mIntrinsic;
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    private boolean mUseIntrinsic;
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    public ColorCube(boolean useIntrinsic) {
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        mUseIntrinsic = useIntrinsic;
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    }
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    private void initCube() {
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        final int sx = 32;
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        final int sy = 32;
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        final int sz = 16;
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        Type.Builder tb = new Type.Builder(mRS, Element.U8_4(mRS));
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tb.setX(sx);
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        tb.setY(sy);
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        tb.setZ(sz);
43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        Type t = tb.create();
44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        mCube = Allocation.createTyped(mRS, t);
45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        int dat[] = new int[sx * sy * sz];
47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        for (int z = 0; z < sz; z++) {
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            for (int y = 0; y < sy; y++) {
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                for (int x = 0; x < sx; x++ ) {
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    int v = 0xff000000;
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    v |= (0xff * x / (sx - 1));
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    v |= (0xff * y / (sy - 1)) << 8;
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    v |= (0xff * z / (sz - 1)) << 16;
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    dat[z*sy*sx + y*sx + x] = v;
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                }
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        }
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        mCube.copyFromUnchecked(dat);
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    }
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    public void createTest(android.content.res.Resources res) {
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        mScript = new ScriptC_colorcube(mRS);
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        mIntrinsic = ScriptIntrinsic3DLUT.create(mRS, Element.U8_4(mRS));
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        initCube();
67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        mScript.invoke_setCube(mCube);
68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        mIntrinsic.setLUT(mCube);
69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    }
70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    public void runTest() {
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        if (mUseIntrinsic) {
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            mIntrinsic.forEach(mInPixelsAllocation, mOutPixelsAllocation);
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        } else {
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            mScript.forEach_root(mInPixelsAllocation, mOutPixelsAllocation);
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        }
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    }
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov