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

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

Validate context when using RS objects.

BUG=6035422

Change-Id: I8586be0085b36767289e1f634111c0ff076cec3c
parent 991c8733
Loading
Loading
Loading
Loading
+30 −30
Original line number Diff line number Diff line
@@ -184,9 +184,9 @@ public class Allocation extends BaseObj {

    private int getIDSafe() {
        if (mAdaptedAllocation != null) {
            return mAdaptedAllocation.getID();
            return mAdaptedAllocation.getID(mRS);
        }
        return getID();
        return getID(mRS);
    }


@@ -321,7 +321,7 @@ public class Allocation extends BaseObj {
    @Override
    void updateFromNative() {
        super.updateFromNative();
        int typeID = mRS.nAllocationGetType(getID());
        int typeID = mRS.nAllocationGetType(getID(mRS));
        if(typeID != 0) {
            mType = new Type(typeID, mRS);
            mType.updateFromNative();
@@ -371,7 +371,7 @@ public class Allocation extends BaseObj {
                "Can only send buffer if IO_OUTPUT usage specified.");
        }
        mRS.validate();
        mRS.nAllocationIoSend(getID());
        mRS.nAllocationIoSend(getID(mRS));
    }

    /**
@@ -394,7 +394,7 @@ public class Allocation extends BaseObj {
                "Can only receive if IO_INPUT usage specified.");
        }
        mRS.validate();
        mRS.nAllocationIoReceive(getID());
        mRS.nAllocationIoReceive(getID(mRS));
    }

    /**
@@ -411,7 +411,7 @@ public class Allocation extends BaseObj {
        }
        int i[] = new int[d.length];
        for (int ct=0; ct < d.length; ct++) {
            i[ct] = d[ct].getID();
            i[ct] = d[ct].getID(mRS);
        }
        copy1DRangeFromUnchecked(0, mCurrentCount, i);
    }
@@ -571,7 +571,7 @@ public class Allocation extends BaseObj {
        mRS.validate();
        validateBitmapSize(b);
        validateBitmapFormat(b);
        mRS.nAllocationCopyFromBitmap(getID(), b);
        mRS.nAllocationCopyFromBitmap(getID(mRS), b);
    }

    /**
@@ -652,7 +652,7 @@ public class Allocation extends BaseObj {
     * followup sync will be required.
     */
    public void generateMipmaps() {
        mRS.nAllocationGenerateMipmaps(getID());
        mRS.nAllocationGenerateMipmaps(getID(mRS));
    }

    /**
@@ -780,7 +780,7 @@ public class Allocation extends BaseObj {
    public void copy1DRangeFrom(int off, int count, Allocation data, int dataOff) {
        mRS.nAllocationData2D(getIDSafe(), off, 0,
                              mSelectedLOD, mSelectedFace.mID,
                              count, 1, data.getID(), dataOff, 0,
                              count, 1, data.getID(mRS), dataOff, 0,
                              data.mSelectedLOD, data.mSelectedFace.mID);
    }

@@ -857,7 +857,7 @@ public class Allocation extends BaseObj {
        validate2DRange(xoff, yoff, w, h);
        mRS.nAllocationData2D(getIDSafe(), xoff, yoff,
                              mSelectedLOD, mSelectedFace.mID,
                              w, h, data.getID(), dataXoff, dataYoff,
                              w, h, data.getID(mRS), dataXoff, dataYoff,
                              data.mSelectedLOD, data.mSelectedFace.mID);
    }

@@ -888,7 +888,7 @@ public class Allocation extends BaseObj {
        mRS.validate();
        validateBitmapFormat(b);
        validateBitmapSize(b);
        mRS.nAllocationCopyToBitmap(getID(), b);
        mRS.nAllocationCopyToBitmap(getID(mRS), b);
    }

    /**
@@ -901,7 +901,7 @@ public class Allocation extends BaseObj {
    public void copyTo(byte[] d) {
        validateIsInt8();
        mRS.validate();
        mRS.nAllocationRead(getID(), d);
        mRS.nAllocationRead(getID(mRS), d);
    }

    /**
@@ -914,7 +914,7 @@ public class Allocation extends BaseObj {
    public void copyTo(short[] d) {
        validateIsInt16();
        mRS.validate();
        mRS.nAllocationRead(getID(), d);
        mRS.nAllocationRead(getID(mRS), d);
    }

    /**
@@ -927,7 +927,7 @@ public class Allocation extends BaseObj {
    public void copyTo(int[] d) {
        validateIsInt32();
        mRS.validate();
        mRS.nAllocationRead(getID(), d);
        mRS.nAllocationRead(getID(mRS), d);
    }

    /**
@@ -940,7 +940,7 @@ public class Allocation extends BaseObj {
    public void copyTo(float[] d) {
        validateIsFloat32();
        mRS.validate();
        mRS.nAllocationRead(getID(), d);
        mRS.nAllocationRead(getID(mRS), d);
    }

    /**
@@ -959,10 +959,10 @@ public class Allocation extends BaseObj {
        if ((mType.getY() > 0)|| (mType.getZ() > 0) || mType.hasFaces() || mType.hasMipmaps()) {
            throw new RSInvalidStateException("Resize only support for 1D allocations at this time.");
        }
        mRS.nAllocationResize1D(getID(), dimX);
        mRS.nAllocationResize1D(getID(mRS), dimX);
        mRS.finish();  // Necessary because resize is fifoed and update is async.

        int typeID = mRS.nAllocationGetType(getID());
        int typeID = mRS.nAllocationGetType(getID(mRS));
        mType = new Type(typeID, mRS);
        mType.updateFromNative();
        updateCacheInfo(mType);
@@ -991,10 +991,10 @@ public class Allocation extends BaseObj {
            throw new RSInvalidStateException(
                "Resize only support for 2D allocations at this time.");
        }
        mRS.nAllocationResize2D(getID(), dimX, dimY);
        mRS.nAllocationResize2D(getID(mRS), dimX, dimY);
        mRS.finish();  // Necessary because resize is fifoed and update is async.

        int typeID = mRS.nAllocationGetType(getID());
        int typeID = mRS.nAllocationGetType(getID(mRS));
        mType = new Type(typeID, mRS);
        mType.updateFromNative();
        updateCacheInfo(mType);
@@ -1019,10 +1019,10 @@ public class Allocation extends BaseObj {
     */
    static public Allocation createTyped(RenderScript rs, Type type, MipmapControl mips, int usage) {
        rs.validate();
        if (type.getID() == 0) {
        if (type.getID(rs) == 0) {
            throw new RSInvalidStateException("Bad Type");
        }
        int id = rs.nAllocationCreateTyped(type.getID(), mips.mID, usage, 0);
        int id = rs.nAllocationCreateTyped(type.getID(rs), mips.mID, usage, 0);
        if (id == 0) {
            throw new RSRuntimeException("Allocation creation failed.");
        }
@@ -1043,10 +1043,10 @@ public class Allocation extends BaseObj {
    static public Allocation createTyped(RenderScript rs, Type type, MipmapControl mips,
                                         int usage, int pointer) {
        rs.validate();
        if (type.getID() == 0) {
        if (type.getID(rs) == 0) {
            throw new RSInvalidStateException("Bad Type");
        }
        int id = rs.nAllocationCreateTyped(type.getID(), mips.mID, usage, pointer);
        int id = rs.nAllocationCreateTyped(type.getID(rs), mips.mID, usage, pointer);
        if (id == 0) {
            throw new RSRuntimeException("Allocation creation failed.");
        }
@@ -1101,7 +1101,7 @@ public class Allocation extends BaseObj {
        b.setX(count);
        Type t = b.create();

        int id = rs.nAllocationCreateTyped(t.getID(), MipmapControl.MIPMAP_NONE.mID, usage, 0);
        int id = rs.nAllocationCreateTyped(t.getID(rs), MipmapControl.MIPMAP_NONE.mID, usage, 0);
        if (id == 0) {
            throw new RSRuntimeException("Allocation creation failed.");
        }
@@ -1168,7 +1168,7 @@ public class Allocation extends BaseObj {
        rs.validate();
        Type t = typeFromBitmap(rs, b, mips);

        int id = rs.nAllocationCreateFromBitmap(t.getID(), mips.mID, b, usage);
        int id = rs.nAllocationCreateFromBitmap(t.getID(rs), mips.mID, b, usage);
        if (id == 0) {
            throw new RSRuntimeException("Load failed.");
        }
@@ -1186,9 +1186,9 @@ public class Allocation extends BaseObj {
            throw new RSInvalidStateException("Allocation is not a surface texture.");
        }

        int id = mRS.nAllocationGetSurfaceTextureID(getID());
        int id = mRS.nAllocationGetSurfaceTextureID(getID(mRS));
        SurfaceTexture st = new SurfaceTexture(id);
        mRS.nAllocationGetSurfaceTextureID2(getID(), st);
        mRS.nAllocationGetSurfaceTextureID2(getID(mRS), st);

        return st;
    }
@@ -1211,7 +1211,7 @@ public class Allocation extends BaseObj {
            throw new RSInvalidStateException("Allocation is not USAGE_IO_OUTPUT.");
        }

        mRS.nAllocationSetSurface(getID(), sur);
        mRS.nAllocationSetSurface(getID(mRS), sur);
    }

    /**
@@ -1224,7 +1224,7 @@ public class Allocation extends BaseObj {
        }

        Surface s = new Surface(st);
        mRS.nAllocationSetSurface(getID(), s);
        mRS.nAllocationSetSurface(getID(mRS), s);
    }

    /**
@@ -1283,7 +1283,7 @@ public class Allocation extends BaseObj {
        tb.setMipmaps(mips == MipmapControl.MIPMAP_FULL);
        Type t = tb.create();

        int id = rs.nAllocationCubeCreateFromBitmap(t.getID(), mips.mID, b, usage);
        int id = rs.nAllocationCubeCreateFromBitmap(t.getID(rs), mips.mID, b, usage);
        if(id == 0) {
            throw new RSRuntimeException("Load failed for bitmap " + b + " element " + e);
        }
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ public class AllocationAdapter extends Allocation {
        mAdaptedAllocation = alloc;
    }

    int getID() {
    int getID(RenderScript rs) {
        throw new RSInvalidStateException(
            "This operation is not supported with adapters at this time.");
    }
+8 −2
Original line number Diff line number Diff line
@@ -43,16 +43,22 @@ public class BaseObj {
     * Lookup the native object ID for this object.  Primarily used by the
     * generated reflected code.
     *
     * @param rs Context to verify against internal context for
     *           match.
     *
     * @return int
     */
    int getID() {
    int getID(RenderScript rs) {
        mRS.validate();
        if (mDestroyed) {
            throw new RSInvalidStateException("using a destroyed object.");
        }
        if (mID == 0) {
            throw new RSRuntimeException("Internal error: Object id 0.");
        }
        if ((rs != null) && (rs != mRS)) {
            throw new RSInvalidStateException("using object with mismatched context.");
        }
        return mID;
    }

@@ -138,7 +144,7 @@ public class BaseObj {
     */
    void updateFromNative() {
        mRS.validate();
        mName = mRS.nGetName(getID());
        mName = mRS.nGetName(getID(mRS));
    }

    /**
+3 −3
Original line number Diff line number Diff line
@@ -778,7 +778,7 @@ public class Element extends BaseObj {

        // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
        int[] dataBuffer = new int[5];
        mRS.nElementGetNativeData(getID(), dataBuffer);
        mRS.nElementGetNativeData(getID(mRS), dataBuffer);

        mNormalized = dataBuffer[2] == 1 ? true : false;
        mVectorSize = dataBuffer[3];
@@ -803,7 +803,7 @@ public class Element extends BaseObj {
            mOffsetInBytes = new int[numSubElements];

            int[] subElementIds = new int[numSubElements];
            mRS.nElementGetSubElements(getID(), subElementIds, mElementNames, mArraySizes);
            mRS.nElementGetSubElements(getID(mRS), subElementIds, mElementNames, mArraySizes);
            for(int i = 0; i < numSubElements; i ++) {
                mElements[i] = new Element(subElementIds[i], mRS);
                mElements[i].updateFromNative();
@@ -1062,7 +1062,7 @@ public class Element extends BaseObj {

            int[] ids = new int[ein.length];
            for (int ct = 0; ct < ein.length; ct++ ) {
                ids[ct] = ein[ct].getID();
                ids[ct] = ein[ct].getID(mRS);
            }
            int id = mRS.nElementCreate2(ids, sin, asin);
            return new Element(id, mRS, ein, sin, asin);
+1 −1
Original line number Diff line number Diff line
@@ -143,7 +143,7 @@ public class FieldPacker {

    public void addObj(BaseObj obj) {
        if (obj != null) {
            addI32(obj.getID());
            addI32(obj.getID(null));
        } else {
            addI32(0);
        }
Loading