Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1c306a9 authored by Jason Sams's avatar Jason Sams
Browse files

Add API support for 3D allocations.

Change-Id: I19c525f90135d83caec545e77e8f61a957d220ee
parent 412fbe7f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -20247,6 +20247,7 @@ package android.renderscript {
    method public android.renderscript.Type.Builder setMipmaps(boolean);
    method public android.renderscript.Type.Builder setX(int);
    method public android.renderscript.Type.Builder setY(int);
    method public android.renderscript.Type.Builder setZ(int);
  }
  public static final class Type.CubemapFace extends java.lang.Enum {
+8 −0
Original line number Diff line number Diff line
@@ -244,6 +244,14 @@ public class Type extends BaseObj {
            return this;
        }

        public Builder setZ(int value) {
            if(value < 1) {
                throw new RSIllegalArgumentException("Values of less than 1 for Dimension Z are not valid.");
            }
            mDimZ = value;
            return this;
        }

        public Builder setMipmaps(boolean value) {
            mDimMipmaps = value;
            return this;
+83 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.rs.image;

import java.lang.Math;

import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.Matrix4f;
import android.renderscript.RenderScript;
import android.renderscript.Script;
import android.renderscript.ScriptC;
import android.renderscript.ScriptGroup;
import android.renderscript.ScriptIntrinsicColorMatrix;
import android.renderscript.Type;
import android.util.Log;

public class ColorCube extends TestBase {
    private Allocation mCube;
    private ScriptC_colorcube mScript;

    public ColorCube() {
    }

    private void initCube() {
        final int sx = 32;
        final int sy = 32;
        final int sz = 16;

        Type.Builder tb = new Type.Builder(mRS, Element.U8_4(mRS));
        tb.setX(sx);
        tb.setY(sy);
        tb.setZ(sz);
        Type t = tb.create();
        mCube = Allocation.createTyped(mRS, t);

        int dat[] = new int[sx * sy * sz];
        for (int z = 0; z < sz; z++) {
            for (int y = 0; y < sy; y++) {
                for (int x = 0; x < sx; x++ ) {

                    dat[z*sy*sx + y*sx + x] = 0xff000000 |
                        ((x | (x<<2)) << 16) |
                        ((y | (y<<2)) << 8) |
                        ((z | (z<<2)) << 0);


                }
            }
        }

        mCube.copyFromUnchecked(dat);
    }

    public void createTest(android.content.res.Resources res) {
        mScript = new ScriptC_colorcube(mRS, res, R.raw.colorcube);

        initCube();
        mScript.invoke_setCube(mCube);


        //mScript.invoke_setMatrix(m);
    }

    public void runTest() {
        mScript.forEach_root(mInPixelsAllocation, mOutPixelsAllocation);
    }

}
+5 −1
Original line number Diff line number Diff line
@@ -291,6 +291,9 @@ public class ImageProcessingActivity extends Activity
        case 35:
            mTest = new WhiteBalance();
            break;
        case 36:
            mTest = new ColorCube();
            break;
        }

        mTest.createBaseTest(this, mBitmapIn, mBitmapIn2, mBitmapOut);
@@ -302,7 +305,7 @@ public class ImageProcessingActivity extends Activity
    }

    void setupTests() {
        mTestNames = new String[36];
        mTestNames = new String[37];
        mTestNames[0] = "Levels Vec3 Relaxed";
        mTestNames[1] = "Levels Vec4 Relaxed";
        mTestNames[2] = "Levels Vec3 Full";
@@ -339,6 +342,7 @@ public class ImageProcessingActivity extends Activity
        mTestNames[33] = "Contrast";
        mTestNames[34] = "Exposure";
        mTestNames[35] = "White Balance";
        mTestNames[36] = "Color Cube";

        mTestSpinner.setAdapter(new ArrayAdapter<String>(
            this, R.layout.spinner_layout, mTestNames));
+55 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma version(1)
#pragma rs java_package_name(com.android.rs.image)
#pragma rs_fp_relaxed


static rs_allocation gCube;
static int4 gDims;
static int4 gFracMask;
static int4 gFracBits;

void setCube(rs_allocation c) {
    gCube = c;
    gDims.x = rsAllocationGetDimX(gCube);
    gDims.y = rsAllocationGetDimY(gCube);
    gDims.z = rsAllocationGetDimZ(gCube);
    gDims.w = 0;

    gFracMask = gDims - 1;
    gFracBits = (int4)32 - clz(gFracMask);

    rsDebug("dims", gDims);
    rsDebug("gFracMask", gFracMask);
    rsDebug("gFracBits", gFracBits);
}

void root(const uchar4 *in, uchar4 *out) {
    //rsDebug("root", in);

    int4 coord1 = convert_int4(*in);
    int4 coord2 = min(coord1 + 1, gDims);

    uchar4 v1 = rsGetElementAt_uchar4(gCube, coord1.x >> 3, coord1.y >> 3, coord1.z >> 4);

    //rsDebug("coord1", coord1);
    //rsDebug("coord2", coord2);

    *out = v1;
}