summaryrefslogtreecommitdiff
path: root/libs/rs/Allocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/rs/Allocation.cpp')
-rw-r--r--libs/rs/Allocation.cpp468
1 files changed, 0 insertions, 468 deletions
diff --git a/libs/rs/Allocation.cpp b/libs/rs/Allocation.cpp
deleted file mode 100644
index e37d5dee9725..000000000000
--- a/libs/rs/Allocation.cpp
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * 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.
- */
-
-#define LOG_TAG "libRS_cpp"
-
-#include <utils/Log.h>
-#include <malloc.h>
-
-#include "RenderScript.h"
-#include "Element.h"
-#include "Type.h"
-#include "Allocation.h"
-
-
-void * Allocation::getIDSafe() const {
- //if (mAdaptedAllocation != NULL) {
- //return mAdaptedAllocation.getID();
- //}
- return getID();
-}
-
-void Allocation::updateCacheInfo(const Type *t) {
- mCurrentDimX = t->getX();
- mCurrentDimY = t->getY();
- mCurrentDimZ = t->getZ();
- mCurrentCount = mCurrentDimX;
- if (mCurrentDimY > 1) {
- mCurrentCount *= mCurrentDimY;
- }
- if (mCurrentDimZ > 1) {
- mCurrentCount *= mCurrentDimZ;
- }
-}
-
-Allocation::Allocation(void *id, RenderScript *rs, const Type *t, uint32_t usage) : BaseObj(id, rs) {
- if ((usage & ~(RS_ALLOCATION_USAGE_SCRIPT |
- RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE |
- RS_ALLOCATION_USAGE_GRAPHICS_VERTEX |
- RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS |
- RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET |
- RS_ALLOCATION_USAGE_IO_INPUT |
- RS_ALLOCATION_USAGE_IO_OUTPUT)) != 0) {
- ALOGE("Unknown usage specified.");
- }
-
- if ((usage & RS_ALLOCATION_USAGE_IO_INPUT) != 0) {
- mWriteAllowed = false;
- if ((usage & ~(RS_ALLOCATION_USAGE_IO_INPUT |
- RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE |
- RS_ALLOCATION_USAGE_SCRIPT)) != 0) {
- ALOGE("Invalid usage combination.");
- }
- }
-
- mType = t;
- mUsage = usage;
-
- if (t != NULL) {
- updateCacheInfo(t);
- }
-}
-
-void Allocation::validateIsInt32() {
- RsDataType dt = mType->getElement()->getDataType();
- if ((dt == RS_TYPE_SIGNED_32) || (dt == RS_TYPE_UNSIGNED_32)) {
- return;
- }
- ALOGE("32 bit integer source does not match allocation type %i", dt);
-}
-
-void Allocation::validateIsInt16() {
- RsDataType dt = mType->getElement()->getDataType();
- if ((dt == RS_TYPE_SIGNED_16) || (dt == RS_TYPE_UNSIGNED_16)) {
- return;
- }
- ALOGE("16 bit integer source does not match allocation type %i", dt);
-}
-
-void Allocation::validateIsInt8() {
- RsDataType dt = mType->getElement()->getDataType();
- if ((dt == RS_TYPE_SIGNED_8) || (dt == RS_TYPE_UNSIGNED_8)) {
- return;
- }
- ALOGE("8 bit integer source does not match allocation type %i", dt);
-}
-
-void Allocation::validateIsFloat32() {
- RsDataType dt = mType->getElement()->getDataType();
- if (dt == RS_TYPE_FLOAT_32) {
- return;
- }
- ALOGE("32 bit float source does not match allocation type %i", dt);
-}
-
-void Allocation::validateIsObject() {
- RsDataType dt = mType->getElement()->getDataType();
- if ((dt == RS_TYPE_ELEMENT) ||
- (dt == RS_TYPE_TYPE) ||
- (dt == RS_TYPE_ALLOCATION) ||
- (dt == RS_TYPE_SAMPLER) ||
- (dt == RS_TYPE_SCRIPT) ||
- (dt == RS_TYPE_MESH) ||
- (dt == RS_TYPE_PROGRAM_FRAGMENT) ||
- (dt == RS_TYPE_PROGRAM_VERTEX) ||
- (dt == RS_TYPE_PROGRAM_RASTER) ||
- (dt == RS_TYPE_PROGRAM_STORE)) {
- return;
- }
- ALOGE("Object source does not match allocation type %i", dt);
-}
-
-void Allocation::updateFromNative() {
- BaseObj::updateFromNative();
-
- const void *typeID = rsaAllocationGetType(mRS->mContext, getID());
- if(typeID != NULL) {
- const Type *old = mType;
- Type *t = new Type((void *)typeID, mRS);
- t->updateFromNative();
- updateCacheInfo(t);
- mType = t;
- delete old;
- }
-}
-
-void Allocation::syncAll(RsAllocationUsageType srcLocation) {
- switch (srcLocation) {
- case RS_ALLOCATION_USAGE_SCRIPT:
- case RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS:
- case RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE:
- case RS_ALLOCATION_USAGE_GRAPHICS_VERTEX:
- break;
- default:
- ALOGE("Source must be exactly one usage type.");
- }
- rsAllocationSyncAll(mRS->mContext, getIDSafe(), srcLocation);
-}
-
-void Allocation::ioSendOutput() {
- if ((mUsage & RS_ALLOCATION_USAGE_IO_OUTPUT) == 0) {
- ALOGE("Can only send buffer if IO_OUTPUT usage specified.");
- }
- rsAllocationIoSend(mRS->mContext, getID());
-}
-
-void Allocation::ioGetInput() {
- if ((mUsage & RS_ALLOCATION_USAGE_IO_INPUT) == 0) {
- ALOGE("Can only send buffer if IO_OUTPUT usage specified.");
- }
- rsAllocationIoReceive(mRS->mContext, getID());
-}
-
-/*
-void copyFrom(BaseObj[] d) {
- mRS.validate();
- validateIsObject();
- if (d.length != mCurrentCount) {
- ALOGE("Array size mismatch, allocation sizeX = " +
- mCurrentCount + ", array length = " + d.length);
- }
- int i[] = new int[d.length];
- for (int ct=0; ct < d.length; ct++) {
- i[ct] = d[ct].getID();
- }
- copy1DRangeFromUnchecked(0, mCurrentCount, i);
-}
-*/
-
-
-/*
-void Allocation::setFromFieldPacker(int xoff, FieldPacker fp) {
- mRS.validate();
- int eSize = mType.mElement.getSizeBytes();
- final byte[] data = fp.getData();
-
- int count = data.length / eSize;
- if ((eSize * count) != data.length) {
- ALOGE("Field packer length " + data.length +
- " not divisible by element size " + eSize + ".");
- }
- copy1DRangeFromUnchecked(xoff, count, data);
-}
-
-void setFromFieldPacker(int xoff, int component_number, FieldPacker fp) {
- mRS.validate();
- if (component_number >= mType.mElement.mElements.length) {
- ALOGE("Component_number " + component_number + " out of range.");
- }
- if(xoff < 0) {
- ALOGE("Offset must be >= 0.");
- }
-
- final byte[] data = fp.getData();
- int eSize = mType.mElement.mElements[component_number].getSizeBytes();
- eSize *= mType.mElement.mArraySizes[component_number];
-
- if (data.length != eSize) {
- ALOGE("Field packer sizelength " + data.length +
- " does not match component size " + eSize + ".");
- }
-
- mRS.nAllocationElementData1D(getIDSafe(), xoff, mSelectedLOD,
- component_number, data, data.length);
-}
-*/
-
-void Allocation::generateMipmaps() {
- rsAllocationGenerateMipmaps(mRS->mContext, getID());
-}
-
-void Allocation::copy1DRangeFromUnchecked(uint32_t off, size_t count, const void *data, size_t dataLen) {
- if(count < 1) {
- ALOGE("Count must be >= 1.");
- return;
- }
- if((off + count) > mCurrentCount) {
- ALOGE("Overflow, Available count %zu, got %zu at offset %zu.", mCurrentCount, count, off);
- return;
- }
- if((count * mType->getElement()->getSizeBytes()) > dataLen) {
- ALOGE("Array too small for allocation type.");
- return;
- }
-
- rsAllocation1DData(mRS->mContext, getIDSafe(), off, mSelectedLOD, count, data, dataLen);
-}
-
-void Allocation::copy1DRangeFrom(uint32_t off, size_t count, const int32_t *d, size_t dataLen) {
- validateIsInt32();
- copy1DRangeFromUnchecked(off, count, d, dataLen);
-}
-
-void Allocation::copy1DRangeFrom(uint32_t off, size_t count, const int16_t *d, size_t dataLen) {
- validateIsInt16();
- copy1DRangeFromUnchecked(off, count, d, dataLen);
-}
-
-void Allocation::copy1DRangeFrom(uint32_t off, size_t count, const int8_t *d, size_t dataLen) {
- validateIsInt8();
- copy1DRangeFromUnchecked(off, count, d, dataLen);
-}
-
-void Allocation::copy1DRangeFrom(uint32_t off, size_t count, const float *d, size_t dataLen) {
- validateIsFloat32();
- copy1DRangeFromUnchecked(off, count, d, dataLen);
-}
-
-void Allocation::copy1DRangeFrom(uint32_t off, size_t count, const Allocation *data, uint32_t dataOff) {
- rsAllocationCopy2DRange(mRS->mContext, getIDSafe(), off, 0,
- mSelectedLOD, mSelectedFace,
- count, 1, data->getIDSafe(), dataOff, 0,
- data->mSelectedLOD, data->mSelectedFace);
-}
-
-void Allocation::validate2DRange(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h) {
- if (mAdaptedAllocation != NULL) {
-
- } else {
- if (((xoff + w) > mCurrentDimX) || ((yoff + h) > mCurrentDimY)) {
- ALOGE("Updated region larger than allocation.");
- }
- }
-}
-
-void Allocation::copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
- const int8_t *data, size_t dataLen) {
- validate2DRange(xoff, yoff, w, h);
- rsAllocation2DData(mRS->mContext, getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace,
- w, h, data, dataLen);
-}
-
-void Allocation::copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
- const int16_t *data, size_t dataLen) {
- validate2DRange(xoff, yoff, w, h);
- rsAllocation2DData(mRS->mContext, getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace,
- w, h, data, dataLen);
-}
-
-void Allocation::copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
- const int32_t *data, size_t dataLen) {
- validate2DRange(xoff, yoff, w, h);
- rsAllocation2DData(mRS->mContext, getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace,
- w, h, data, dataLen);
-}
-
-void Allocation::copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
- const float *data, size_t dataLen) {
- validate2DRange(xoff, yoff, w, h);
- rsAllocation2DData(mRS->mContext, getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace,
- w, h, data, dataLen);
-}
-
-void Allocation::copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
- const Allocation *data, size_t dataLen,
- uint32_t dataXoff, uint32_t dataYoff) {
- validate2DRange(xoff, yoff, w, h);
- rsAllocationCopy2DRange(mRS->mContext, getIDSafe(), xoff, yoff,
- mSelectedLOD, mSelectedFace,
- w, h, data->getIDSafe(), dataXoff, dataYoff,
- data->mSelectedLOD, data->mSelectedFace);
-}
-
-/*
-void copyTo(byte[] d) {
- validateIsInt8();
- mRS.validate();
- mRS.nAllocationRead(getID(), d);
-}
-
-void copyTo(short[] d) {
- validateIsInt16();
- mRS.validate();
- mRS.nAllocationRead(getID(), d);
-}
-
-void copyTo(int[] d) {
- validateIsInt32();
- mRS.validate();
- mRS.nAllocationRead(getID(), d);
-}
-
-void copyTo(float[] d) {
- validateIsFloat32();
- mRS.validate();
- mRS.nAllocationRead(getID(), d);
-}
-
-void resize(int dimX) {
- 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.finish(); // Necessary because resize is fifoed and update is async.
-
- int typeID = mRS.nAllocationGetType(getID());
- mType = new Type(typeID, mRS);
- mType.updateFromNative();
- updateCacheInfo(mType);
-}
-
-void resize(int dimX, int dimY) {
- if ((mType.getZ() > 0) || mType.hasFaces() || mType.hasMipmaps()) {
- throw new RSInvalidStateException(
- "Resize only support for 2D allocations at this time.");
- }
- if (mType.getY() == 0) {
- throw new RSInvalidStateException(
- "Resize only support for 2D allocations at this time.");
- }
- mRS.nAllocationResize2D(getID(), dimX, dimY);
- mRS.finish(); // Necessary because resize is fifoed and update is async.
-
- int typeID = mRS.nAllocationGetType(getID());
- mType = new Type(typeID, mRS);
- mType.updateFromNative();
- updateCacheInfo(mType);
-}
-*/
-
-
-Allocation *Allocation::createTyped(RenderScript *rs, const Type *type,
- RsAllocationMipmapControl mips, uint32_t usage) {
- void *id = rsAllocationCreateTyped(rs->mContext, type->getID(), mips, usage, 0);
- if (id == 0) {
- ALOGE("Allocation creation failed.");
- return NULL;
- }
- return new Allocation(id, rs, type, usage);
-}
-
-Allocation *Allocation::createTyped(RenderScript *rs, const Type *type,
- RsAllocationMipmapControl mips, uint32_t usage, void *pointer) {
- void *id = rsAllocationCreateTyped(rs->mContext, type->getID(), mips, usage, (uint32_t)pointer);
- if (id == 0) {
- ALOGE("Allocation creation failed.");
- }
- return new Allocation(id, rs, type, usage);
-}
-
-Allocation *Allocation::createTyped(RenderScript *rs, const Type *type, uint32_t usage) {
- return createTyped(rs, type, RS_ALLOCATION_MIPMAP_NONE, usage);
-}
-
-Allocation *Allocation::createSized(RenderScript *rs, const Element *e, size_t count, uint32_t usage) {
- Type::Builder b(rs, e);
- b.setX(count);
- const Type *t = b.create();
-
- void *id = rsAllocationCreateTyped(rs->mContext, t->getID(), RS_ALLOCATION_MIPMAP_NONE, usage, 0);
- if (id == 0) {
- ALOGE("Allocation creation failed.");
- }
- return new Allocation(id, rs, t, usage);
-}
-
-
-/*
-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);
-
-}
-
-void setSurfaceTexture(SurfaceTexture sur) {
- if ((mUsage & USAGE_IO_OUTPUT) == 0) {
- throw new RSInvalidStateException("Allocation is not USAGE_IO_OUTPUT.");
- }
-
- mRS.validate();
- mRS.nAllocationSetSurfaceTexture(getID(), sur);
-}
-
-
-static Allocation createFromBitmapResource(RenderScript rs,
- Resources res,
- int id,
- MipmapControl mips,
- int usage) {
-
- rs.validate();
- Bitmap b = BitmapFactory.decodeResource(res, id);
- Allocation alloc = createFromBitmap(rs, b, mips, usage);
- b.recycle();
- return alloc;
-}
-
-static Allocation createFromBitmapResource(RenderScript rs,
- Resources res,
- int id) {
- return createFromBitmapResource(rs, res, id,
- MipmapControl.MIPMAP_NONE,
- USAGE_GRAPHICS_TEXTURE);
-}
-
-static Allocation createFromString(RenderScript rs,
- String str,
- int usage) {
- rs.validate();
- byte[] allocArray = NULL;
- try {
- allocArray = str.getBytes("UTF-8");
- Allocation alloc = Allocation.createSized(rs, Element.U8(rs), allocArray.length, usage);
- alloc.copyFrom(allocArray);
- return alloc;
- }
- catch (Exception e) {
- throw new RSRuntimeException("Could not convert string to utf-8.");
- }
-}
-*/
-