198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/*
298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Copyright (C) 2012 The Android Open Source Project
398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License.
698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at
798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software
1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and
1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License.
1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */
1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript;
1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
1998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.content.res.Resources;
2098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.graphics.Bitmap;
2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.graphics.BitmapFactory;
2298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.util.TypedValue;
2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/**
2598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
2698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/
2798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class AllocationAdapter extends Allocation {
2898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    AllocationAdapter(int id, RenderScript rs, Allocation alloc) {
2998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super(id, rs, alloc.mType, alloc.mUsage);
3098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mAdaptedAllocation = alloc;
3198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
3298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
3398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    int getID(RenderScript rs) {
3498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        throw new RSInvalidStateException(
3598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            "This operation is not supported with adapters at this time.");
3698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
3798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
3898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
3998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
4098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
4198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subData(int xoff, FieldPacker fp) {
4298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.setFromFieldPacker(xoff, fp);
4398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
4498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
4598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
4698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
4798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subElementData(int xoff, int component_number, FieldPacker fp) {
4898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.setFromFieldPacker(xoff, component_number, fp);
4998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
5098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
5198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
5298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
5398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subData1D(int off, int count, int[] d) {
5498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copy1DRangeFrom(off, count, d);
5598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
5698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
5798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
5898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
5998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subData1D(int off, int count, short[] d) {
6098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copy1DRangeFrom(off, count, d);
6198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
6298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
6398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
6498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
6598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subData1D(int off, int count, byte[] d) {
6698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copy1DRangeFrom(off, count, d);
6798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
6898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
6998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
7098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
7198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subData1D(int off, int count, float[] d) {
7298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copy1DRangeFrom(off, count, d);
7398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
7498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
7598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
7698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
7798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subData2D(int xoff, int yoff, int w, int h, int[] d) {
7898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copy2DRangeFrom(xoff, yoff, w, h, d);
7998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
8098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
8198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
8298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
8398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void subData2D(int xoff, int yoff, int w, int h, float[] d) {
8498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copy2DRangeFrom(xoff, yoff, w, h, d);
8598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
8698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
8798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
8898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
8998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void readData(int[] d) {
9098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copyTo(d);
9198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
9298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
9398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @hide
9498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
9598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void readData(float[] d) {
9698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super.copyTo(d);
9798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
9898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
9998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    void initLOD(int lod) {
10098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (lod < 0) {
10198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSIllegalArgumentException("Attempting to set negative lod (" + lod + ").");
10298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
10398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
10498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        int tx = mAdaptedAllocation.mType.getX();
10598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        int ty = mAdaptedAllocation.mType.getY();
10698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        int tz = mAdaptedAllocation.mType.getZ();
10798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
10898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        for (int ct=0; ct < lod; ct++) {
10998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            if ((tx==1) && (ty == 1) && (tz == 1)) {
11098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                throw new RSIllegalArgumentException("Attempting to set lod (" + lod + ") out of range.");
11198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            }
11298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
11398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            if (tx > 1) tx >>= 1;
11498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            if (ty > 1) ty >>= 1;
11598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            if (tz > 1) tz >>= 1;
11698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
11798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
11898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mCurrentDimX = tx;
11998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mCurrentDimY = ty;
12098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mCurrentDimZ = tz;
12198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mCurrentCount = mCurrentDimX;
12298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (mCurrentDimY > 1) {
12398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mCurrentCount *= mCurrentDimY;
12498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
12598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (mCurrentDimZ > 1) {
12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mCurrentCount *= mCurrentDimZ;
12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mSelectedY = 0;
12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mSelectedZ = 0;
13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Set the active LOD.  The LOD must be within the range for the
13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * type being adapted.  The base allocation must have mipmaps.
13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Because this changes the dimensions of the adapter the
13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * current Y and Z will be reset.
13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param lod The LOD to make active.
14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setLOD(int lod) {
14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (!mAdaptedAllocation.getType().hasMipmaps()) {
14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set LOD when the allocation type does not include mipmaps.");
14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (!mConstrainedLOD) {
14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set LOD when the adapter includes mipmaps.");
14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        initLOD(lod);
15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Set the active Face.  The base allocation must be of a type
15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * that includes faces.
15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param cf The face to make active.
15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setFace(Type.CubemapFace cf) {
15998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (!mAdaptedAllocation.getType().hasFaces()) {
16098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set Face when the allocation type does not include faces.");
16198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
16298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (!mConstrainedFace) {
16398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set LOD when the adapter includes mipmaps.");
16498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
16598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (cf == null) {
16698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSIllegalArgumentException("Cannot set null face.");
16798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
16898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
16998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mSelectedFace = cf;
17098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
17198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
17298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
17398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Set the active Y.  The y value must be within the range for
17498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * the allocation being adapted.  The base allocation must
17598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * contain the Y dimension.
17698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
17798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param y The y to make active.
17898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
17998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setY(int y) {
18098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (mAdaptedAllocation.getType().getY() == 0) {
18198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set Y when the allocation type does not include Y dim.");
18298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
18398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (mAdaptedAllocation.getType().getY() <= y) {
18498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set Y greater than dimension of allocation.");
18598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
18698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (!mConstrainedY) {
18798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set Y when the adapter includes Y.");
18898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mSelectedY = y;
19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Set the active Z.  The z value must be within the range for
19598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * the allocation being adapted.  The base allocation must
19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * contain the Z dimension.
19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param z The z to make active.
19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setZ(int z) {
20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (mAdaptedAllocation.getType().getZ() == 0) {
20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set Z when the allocation type does not include Z dim.");
20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (mAdaptedAllocation.getType().getZ() <= z) {
20598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set Z greater than dimension of allocation.");
20698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (!mConstrainedZ) {
20898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSInvalidStateException("Cannot set Z when the adapter includes Z.");
20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mSelectedZ = z;
21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    static public AllocationAdapter create1D(RenderScript rs, Allocation a) {
21598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        rs.validate();
21698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        AllocationAdapter aa = new AllocationAdapter(0, rs, a);
21798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedLOD = true;
21898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedFace = true;
21998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedY = true;
22098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedZ = true;
22198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.initLOD(0);
22298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        return aa;
22398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
22498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
22598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    static public AllocationAdapter create2D(RenderScript rs, Allocation a) {
22698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        android.util.Log.e("rs", "create2d " + a);
22798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        rs.validate();
22898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        AllocationAdapter aa = new AllocationAdapter(0, rs, a);
22998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedLOD = true;
23098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedFace = true;
23198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedY = false;
23298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.mConstrainedZ = true;
23398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        aa.initLOD(0);
23498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        return aa;
23598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
23698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
23798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
23898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
23998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Override the Allocation resize.  Resizing adapters is not
24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * allowed and will throw a RSInvalidStateException.
24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param dimX ignored.
24398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
24498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public synchronized void resize(int dimX) {
24598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        throw new RSInvalidStateException("Resize not allowed for Adapters.");
24698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
24798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
24898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams}
24998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
25098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
251