Loading graphics/java/android/renderscript/Allocation.java +63 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.res.Resources; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.SurfaceTexture; import android.util.Log; import android.util.TypedValue; Loading Loading @@ -78,6 +79,8 @@ public class Allocation extends BaseObj { boolean mConstrainedFace; boolean mConstrainedY; boolean mConstrainedZ; boolean mReadAllowed = true; boolean mWriteAllowed = true; int mSelectedY; int mSelectedZ; int mSelectedLOD; Loading Loading @@ -127,6 +130,32 @@ public class Allocation extends BaseObj { */ public static final int USAGE_GRAPHICS_RENDER_TARGET = 0x0010; /** * USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT The allcation will be * used with a SurfaceTexture object. This usage will cause the * allocation to be created read only. * * @hide */ public static final int USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE = 0x0020; /** * USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT The allcation will be * used with a SurfaceTexture object. This usage will cause the * allocation to be created read only. * * @hide */ public static final int USAGE_IO_INPUT = 0x0040; /** * USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT The allcation will be * used with a SurfaceTexture object. This usage will cause the * allocation to be created read only. * * @hide */ public static final int USAGE_IO_OUTPUT = 0x0080; /** * Controls mipmap behavior when using the bitmap creation and Loading Loading @@ -187,10 +216,26 @@ public class Allocation extends BaseObj { USAGE_GRAPHICS_TEXTURE | USAGE_GRAPHICS_VERTEX | USAGE_GRAPHICS_CONSTANTS | USAGE_GRAPHICS_RENDER_TARGET)) != 0) { USAGE_GRAPHICS_RENDER_TARGET | USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT | USAGE_IO_OUTPUT)) != 0) { throw new RSIllegalArgumentException("Unknown usage specified."); } if ((usage & (USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT)) != 0) { mWriteAllowed = false; if ((usage & ~(USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT | USAGE_GRAPHICS_TEXTURE | USAGE_SCRIPT)) != 0) { throw new RSIllegalArgumentException("Invalid usage combination."); } } mType = t; mUsage = usage; if (t != null) { updateCacheInfo(t); Loading Loading @@ -1005,6 +1050,23 @@ public class Allocation extends BaseObj { return new Allocation(id, rs, t, usage); } /** * * * @hide * */ public SurfaceTexture getSurfaceTexture() { if ((mUsage & USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE) == 0) { throw new RSInvalidStateException("Allocation is not a surface texture."); } int id = mRS.nAllocationGetSurfaceTextureID(getID()); return new SurfaceTexture(id); } /** * Creates a non-mipmapped renderscript allocation to use as a * graphics texture Loading graphics/java/android/renderscript/RenderScript.java +6 −0 Original line number Diff line number Diff line Loading @@ -269,6 +269,12 @@ public class RenderScript { validate(); rsnAllocationSyncAll(mContext, alloc, src); } native int rsnAllocationGetSurfaceTextureID(int con, int alloc); synchronized int nAllocationGetSurfaceTextureID(int alloc) { validate(); return rsnAllocationGetSurfaceTextureID(mContext, alloc); } native void rsnAllocationGenerateMipmaps(int con, int alloc); synchronized void nAllocationGenerateMipmaps(int alloc) { validate(); Loading graphics/jni/android_renderscript_RenderScript.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -443,6 +443,13 @@ nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits); } static jint nAllocationGetSurfaceTextureID(JNIEnv *_env, jobject _this, RsContext con, jint a) { LOG_API("nAllocationGetSurfaceTextureID, con(%p), a(%p)", con, (RsAllocation)a); return rsAllocationGetSurfaceTextureID(con, (RsAllocation)a); } static void nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc) { Loading Loading @@ -1258,6 +1265,7 @@ static JNINativeMethod methods[] = { {"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, {"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll }, {"rsnAllocationGetSurfaceTextureID", "(II)I", (void*)nAllocationGetSurfaceTextureID }, {"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i }, {"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s }, {"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b }, Loading libs/rs/RenderScriptDefines.h +4 −1 Original line number Diff line number Diff line Loading @@ -99,8 +99,11 @@ enum RsAllocationUsageType { RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004, RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008, RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010, RS_ALLOCATION_USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE = 0x0020, RS_ALLOCATION_USAGE_IO_INPUT = 0x0040, RS_ALLOCATION_USAGE_IO_OUTPUT = 0x0080, RS_ALLOCATION_USAGE_ALL = 0x000F RS_ALLOCATION_USAGE_ALL = 0x00FF }; enum RsAllocationMipmapControl { Loading libs/rs/driver/rsdAllocation.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,13 @@ static void Upload2DTexture(const Context *rsc, const Allocation *alloc, bool is static void UploadToTexture(const Context *rsc, const Allocation *alloc) { DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv; if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE) { if (!drv->textureID) { RSD_CALL_GL(glGenTextures, 1, &drv->textureID); } return; } if (!drv->glType || !drv->glFormat) { return; } Loading Loading @@ -370,6 +377,12 @@ void rsdAllocationMarkDirty(const Context *rsc, const Allocation *alloc) { drv->uploadDeferred = true; } int32_t rsdAllocationInitSurfaceTexture(const Context *rsc, const Allocation *alloc) { DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv; UploadToTexture(rsc, alloc); return drv->textureID; } void rsdAllocationData1D(const Context *rsc, const Allocation *alloc, uint32_t xoff, uint32_t lod, uint32_t count, const void *data, uint32_t sizeBytes) { Loading Loading
graphics/java/android/renderscript/Allocation.java +63 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.res.Resources; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.SurfaceTexture; import android.util.Log; import android.util.TypedValue; Loading Loading @@ -78,6 +79,8 @@ public class Allocation extends BaseObj { boolean mConstrainedFace; boolean mConstrainedY; boolean mConstrainedZ; boolean mReadAllowed = true; boolean mWriteAllowed = true; int mSelectedY; int mSelectedZ; int mSelectedLOD; Loading Loading @@ -127,6 +130,32 @@ public class Allocation extends BaseObj { */ public static final int USAGE_GRAPHICS_RENDER_TARGET = 0x0010; /** * USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT The allcation will be * used with a SurfaceTexture object. This usage will cause the * allocation to be created read only. * * @hide */ public static final int USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE = 0x0020; /** * USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT The allcation will be * used with a SurfaceTexture object. This usage will cause the * allocation to be created read only. * * @hide */ public static final int USAGE_IO_INPUT = 0x0040; /** * USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT The allcation will be * used with a SurfaceTexture object. This usage will cause the * allocation to be created read only. * * @hide */ public static final int USAGE_IO_OUTPUT = 0x0080; /** * Controls mipmap behavior when using the bitmap creation and Loading Loading @@ -187,10 +216,26 @@ public class Allocation extends BaseObj { USAGE_GRAPHICS_TEXTURE | USAGE_GRAPHICS_VERTEX | USAGE_GRAPHICS_CONSTANTS | USAGE_GRAPHICS_RENDER_TARGET)) != 0) { USAGE_GRAPHICS_RENDER_TARGET | USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT | USAGE_IO_OUTPUT)) != 0) { throw new RSIllegalArgumentException("Unknown usage specified."); } if ((usage & (USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT)) != 0) { mWriteAllowed = false; if ((usage & ~(USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE | USAGE_IO_INPUT | USAGE_GRAPHICS_TEXTURE | USAGE_SCRIPT)) != 0) { throw new RSIllegalArgumentException("Invalid usage combination."); } } mType = t; mUsage = usage; if (t != null) { updateCacheInfo(t); Loading Loading @@ -1005,6 +1050,23 @@ public class Allocation extends BaseObj { return new Allocation(id, rs, t, usage); } /** * * * @hide * */ public SurfaceTexture getSurfaceTexture() { if ((mUsage & USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE) == 0) { throw new RSInvalidStateException("Allocation is not a surface texture."); } int id = mRS.nAllocationGetSurfaceTextureID(getID()); return new SurfaceTexture(id); } /** * Creates a non-mipmapped renderscript allocation to use as a * graphics texture Loading
graphics/java/android/renderscript/RenderScript.java +6 −0 Original line number Diff line number Diff line Loading @@ -269,6 +269,12 @@ public class RenderScript { validate(); rsnAllocationSyncAll(mContext, alloc, src); } native int rsnAllocationGetSurfaceTextureID(int con, int alloc); synchronized int nAllocationGetSurfaceTextureID(int alloc) { validate(); return rsnAllocationGetSurfaceTextureID(mContext, alloc); } native void rsnAllocationGenerateMipmaps(int con, int alloc); synchronized void nAllocationGenerateMipmaps(int alloc) { validate(); Loading
graphics/jni/android_renderscript_RenderScript.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -443,6 +443,13 @@ nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits); } static jint nAllocationGetSurfaceTextureID(JNIEnv *_env, jobject _this, RsContext con, jint a) { LOG_API("nAllocationGetSurfaceTextureID, con(%p), a(%p)", con, (RsAllocation)a); return rsAllocationGetSurfaceTextureID(con, (RsAllocation)a); } static void nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc) { Loading Loading @@ -1258,6 +1265,7 @@ static JNINativeMethod methods[] = { {"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap }, {"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll }, {"rsnAllocationGetSurfaceTextureID", "(II)I", (void*)nAllocationGetSurfaceTextureID }, {"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i }, {"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s }, {"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b }, Loading
libs/rs/RenderScriptDefines.h +4 −1 Original line number Diff line number Diff line Loading @@ -99,8 +99,11 @@ enum RsAllocationUsageType { RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004, RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008, RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010, RS_ALLOCATION_USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE = 0x0020, RS_ALLOCATION_USAGE_IO_INPUT = 0x0040, RS_ALLOCATION_USAGE_IO_OUTPUT = 0x0080, RS_ALLOCATION_USAGE_ALL = 0x000F RS_ALLOCATION_USAGE_ALL = 0x00FF }; enum RsAllocationMipmapControl { Loading
libs/rs/driver/rsdAllocation.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -134,6 +134,13 @@ static void Upload2DTexture(const Context *rsc, const Allocation *alloc, bool is static void UploadToTexture(const Context *rsc, const Allocation *alloc) { DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv; if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_GRAPHICS_SURFACE_TEXTURE_INPUT_OPAQUE) { if (!drv->textureID) { RSD_CALL_GL(glGenTextures, 1, &drv->textureID); } return; } if (!drv->glType || !drv->glFormat) { return; } Loading Loading @@ -370,6 +377,12 @@ void rsdAllocationMarkDirty(const Context *rsc, const Allocation *alloc) { drv->uploadDeferred = true; } int32_t rsdAllocationInitSurfaceTexture(const Context *rsc, const Allocation *alloc) { DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv; UploadToTexture(rsc, alloc); return drv->textureID; } void rsdAllocationData1D(const Context *rsc, const Allocation *alloc, uint32_t xoff, uint32_t lod, uint32_t count, const void *data, uint32_t sizeBytes) { Loading