Separate CPU driver impl from reference driver.
Change-Id: Ifb484edda665959b81d7b1f890d108bfa20a535d
diff --git a/driver/rsdAllocation.cpp b/driver/rsdAllocation.cpp
index 8956b2e..928f777 100644
--- a/driver/rsdAllocation.cpp
+++ b/driver/rsdAllocation.cpp
@@ -16,7 +16,6 @@
#include "rsdCore.h"
-#include "rsdRuntime.h"
#include "rsdAllocation.h"
#include "rsdFrameBufferObj.h"
@@ -80,10 +79,9 @@
uint8_t *GetOffsetPtr(const android::renderscript::Allocation *alloc,
uint32_t xoff, uint32_t yoff, uint32_t lod,
RsAllocationCubemapFace face) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- uint8_t *ptr = (uint8_t *)drv->lod[lod].mallocPtr;
- ptr += face * drv->faceOffset;
- ptr += yoff * drv->lod[lod].stride;
+ uint8_t *ptr = (uint8_t *)alloc->mHal.drvState.lod[lod].mallocPtr;
+ ptr += face * alloc->mHal.drvState.faceOffset;
+ ptr += yoff * alloc->mHal.drvState.lod[lod].stride;
ptr += xoff * alloc->mHal.state.elementSizeBytes;
return ptr;
}
@@ -160,7 +158,7 @@
return;
}
- if (!drv->lod[0].mallocPtr) {
+ if (!alloc->mHal.drvState.lod[0].mallocPtr) {
return;
}
@@ -174,10 +172,9 @@
Upload2DTexture(rsc, alloc, isFirstUpload);
if (!(alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_SCRIPT)) {
- if (alloc->mHal.drvState.mallocPtrLOD0) {
- free(alloc->mHal.drvState.mallocPtrLOD0);
- alloc->mHal.drvState.mallocPtrLOD0 = NULL;
- drv->lod[0].mallocPtr = NULL;
+ if (alloc->mHal.drvState.lod[0].mallocPtr) {
+ free(alloc->mHal.drvState.lod[0].mallocPtr);
+ alloc->mHal.drvState.lod[0].mallocPtr = NULL;
}
}
rsdGLCheckError(rsc, "UploadToTexture");
@@ -224,54 +221,50 @@
}
RSD_CALL_GL(glBindBuffer, drv->glTarget, drv->bufferID);
RSD_CALL_GL(glBufferData, drv->glTarget, alloc->mHal.state.type->getSizeBytes(),
- alloc->mHal.drvState.mallocPtrLOD0, GL_DYNAMIC_DRAW);
+ alloc->mHal.drvState.lod[0].mallocPtr, GL_DYNAMIC_DRAW);
RSD_CALL_GL(glBindBuffer, drv->glTarget, 0);
rsdGLCheckError(rsc, "UploadToBufferObject");
}
static size_t AllocationBuildPointerTable(const Context *rsc, const Allocation *alloc,
const Type *type, uint8_t *ptr) {
-
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
-
- drv->lod[0].dimX = type->getDimX();
- drv->lod[0].dimY = type->getDimY();
- drv->lod[0].mallocPtr = 0;
- drv->lod[0].stride = drv->lod[0].dimX * type->getElementSizeBytes();
- drv->lodCount = type->getLODCount();
- drv->faceCount = type->getDimFaces();
+ alloc->mHal.drvState.lod[0].dimX = type->getDimX();
+ alloc->mHal.drvState.lod[0].dimY = type->getDimY();
+ alloc->mHal.drvState.lod[0].mallocPtr = 0;
+ alloc->mHal.drvState.lod[0].stride = alloc->mHal.drvState.lod[0].dimX * type->getElementSizeBytes();
+ alloc->mHal.drvState.lodCount = type->getLODCount();
+ alloc->mHal.drvState.faceCount = type->getDimFaces();
size_t offsets[Allocation::MAX_LOD];
memset(offsets, 0, sizeof(offsets));
- size_t o = drv->lod[0].stride * rsMax(drv->lod[0].dimY, 1u) * rsMax(drv->lod[0].dimZ, 1u);
- if(drv->lodCount > 1) {
- uint32_t tx = drv->lod[0].dimX;
- uint32_t ty = drv->lod[0].dimY;
- uint32_t tz = drv->lod[0].dimZ;
- for (uint32_t lod=1; lod < drv->lodCount; lod++) {
- drv->lod[lod].dimX = tx;
- drv->lod[lod].dimY = ty;
- drv->lod[lod].dimZ = tz;
- drv->lod[lod].stride = tx * type->getElementSizeBytes();
+ size_t o = alloc->mHal.drvState.lod[0].stride * rsMax(alloc->mHal.drvState.lod[0].dimY, 1u) *
+ rsMax(alloc->mHal.drvState.lod[0].dimZ, 1u);
+ if(alloc->mHal.drvState.lodCount > 1) {
+ uint32_t tx = alloc->mHal.drvState.lod[0].dimX;
+ uint32_t ty = alloc->mHal.drvState.lod[0].dimY;
+ uint32_t tz = alloc->mHal.drvState.lod[0].dimZ;
+ for (uint32_t lod=1; lod < alloc->mHal.drvState.lodCount; lod++) {
+ alloc->mHal.drvState.lod[lod].dimX = tx;
+ alloc->mHal.drvState.lod[lod].dimY = ty;
+ alloc->mHal.drvState.lod[lod].dimZ = tz;
+ alloc->mHal.drvState.lod[lod].stride = tx * type->getElementSizeBytes();
offsets[lod] = o;
- o += drv->lod[lod].stride * rsMax(ty, 1u) * rsMax(tz, 1u);
+ o += alloc->mHal.drvState.lod[lod].stride * rsMax(ty, 1u) * rsMax(tz, 1u);
if (tx > 1) tx >>= 1;
if (ty > 1) ty >>= 1;
if (tz > 1) tz >>= 1;
}
}
- drv->faceOffset = o;
+ alloc->mHal.drvState.faceOffset = o;
- drv->lod[0].mallocPtr = ptr;
- for (uint32_t lod=1; lod < drv->lodCount; lod++) {
- drv->lod[lod].mallocPtr = ptr + offsets[lod];
+ alloc->mHal.drvState.lod[0].mallocPtr = ptr;
+ for (uint32_t lod=1; lod < alloc->mHal.drvState.lodCount; lod++) {
+ alloc->mHal.drvState.lod[lod].mallocPtr = ptr + offsets[lod];
}
- alloc->mHal.drvState.strideLOD0 = drv->lod[0].stride;
- alloc->mHal.drvState.mallocPtrLOD0 = ptr;
- size_t allocSize = drv->faceOffset;
- if(drv->faceCount) {
+ size_t allocSize = alloc->mHal.drvState.faceOffset;
+ if(alloc->mHal.drvState.faceCount) {
allocSize *= 6;
}
@@ -352,9 +345,9 @@
drv->renderTargetID = 0;
}
- if (alloc->mHal.drvState.mallocPtrLOD0) {
- free(alloc->mHal.drvState.mallocPtrLOD0);
- alloc->mHal.drvState.mallocPtrLOD0 = NULL;
+ if (alloc->mHal.drvState.lod[0].mallocPtr) {
+ free(alloc->mHal.drvState.lod[0].mallocPtr);
+ alloc->mHal.drvState.lod[0].mallocPtr = NULL;
}
if (drv->readBackFBO != NULL) {
delete drv->readBackFBO;
@@ -366,9 +359,7 @@
void rsdAllocationResize(const Context *rsc, const Allocation *alloc,
const Type *newType, bool zeroNew) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
-
- void * oldPtr = drv->lod[0].mallocPtr;
+ void * oldPtr = alloc->mHal.drvState.lod[0].mallocPtr;
// Calculate the object size
size_t s = AllocationBuildPointerTable(rsc, alloc, newType, NULL);
uint8_t *ptr = (uint8_t *)realloc(oldPtr, s);
@@ -383,7 +374,7 @@
if (dimX > oldDimX) {
uint32_t stride = alloc->mHal.state.elementSizeBytes;
- memset(((uint8_t *)alloc->mHal.drvState.mallocPtrLOD0) + stride * oldDimX,
+ memset(((uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr) + stride * oldDimX,
0, stride * (dimX - oldDimX));
}
}
@@ -411,8 +402,9 @@
drv->readBackFBO->setActive(rsc);
// Do the readback
- RSD_CALL_GL(glReadPixels, 0, 0, drv->lod[0].dimX, drv->lod[0].dimY,
- drv->glFormat, drv->glType, drv->lod[0].mallocPtr);
+ RSD_CALL_GL(glReadPixels, 0, 0, alloc->mHal.drvState.lod[0].dimX,
+ alloc->mHal.drvState.lod[0].dimY,
+ drv->glFormat, drv->glType, alloc->mHal.drvState.lod[0].mallocPtr);
// Revert framebuffer to its original
lastFbo->setActive(rsc);
@@ -482,9 +474,8 @@
mapper.lock(drv->wndBuffer->handle,
GRALLOC_USAGE_SW_READ_NEVER | GRALLOC_USAGE_SW_WRITE_OFTEN,
bounds, &dst);
- drv->lod[0].mallocPtr = dst;
- alloc->mHal.drvState.mallocPtrLOD0 = dst;
- drv->lod[0].stride = drv->wndBuffer->stride * alloc->mHal.state.elementSizeBytes;
+ alloc->mHal.drvState.lod[0].mallocPtr = dst;
+ alloc->mHal.drvState.lod[0].stride = drv->wndBuffer->stride * alloc->mHal.state.elementSizeBytes;
return true;
}
@@ -597,7 +588,7 @@
uint32_t eSize = alloc->mHal.state.elementSizeBytes;
uint32_t lineSize = eSize * w;
- if (drv->lod[0].mallocPtr) {
+ if (alloc->mHal.drvState.lod[0].mallocPtr) {
const uint8_t *src = static_cast<const uint8_t *>(data);
uint8_t *dst = GetOffsetPtr(alloc, xoff, yoff, lod, face);
@@ -608,7 +599,7 @@
}
memcpy(dst, src, lineSize);
src += lineSize;
- dst += drv->lod[lod].stride;
+ dst += alloc->mHal.drvState.lod[lod].stride;
}
drv->uploadDeferred = true;
} else {
@@ -626,8 +617,6 @@
void rsdAllocationRead1D(const Context *rsc, const Allocation *alloc,
uint32_t xoff, uint32_t lod, uint32_t count,
void *data, size_t sizeBytes) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
-
const uint32_t eSize = alloc->mHal.state.type->getElementSizeBytes();
const uint8_t * ptr = GetOffsetPtr(alloc, xoff, 0, 0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X);
memcpy(data, ptr, count * eSize);
@@ -636,19 +625,17 @@
void rsdAllocationRead2D(const Context *rsc, const Allocation *alloc,
uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
uint32_t w, uint32_t h, void *data, size_t sizeBytes) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
-
uint32_t eSize = alloc->mHal.state.elementSizeBytes;
uint32_t lineSize = eSize * w;
- if (drv->lod[0].mallocPtr) {
+ if (alloc->mHal.drvState.lod[0].mallocPtr) {
uint8_t *dst = static_cast<uint8_t *>(data);
const uint8_t *src = GetOffsetPtr(alloc, xoff, yoff, lod, face);
for (uint32_t line=yoff; line < (yoff+h); line++) {
memcpy(dst, src, lineSize);
dst += lineSize;
- src += drv->lod[lod].stride;
+ src += alloc->mHal.drvState.lod[lod].stride;
}
} else {
ALOGE("Add code to readback from non-script memory");
@@ -664,8 +651,7 @@
void * rsdAllocationLock1D(const android::renderscript::Context *rsc,
const android::renderscript::Allocation *alloc) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- return drv->lod[0].mallocPtr;
+ return alloc->mHal.drvState.lod[0].mallocPtr;
}
void rsdAllocationUnlock1D(const android::renderscript::Context *rsc,
@@ -767,9 +753,8 @@
}
static void mip565(const Allocation *alloc, int lod, RsAllocationCubemapFace face) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- uint32_t w = drv->lod[lod + 1].dimX;
- uint32_t h = drv->lod[lod + 1].dimY;
+ uint32_t w = alloc->mHal.drvState.lod[lod + 1].dimX;
+ uint32_t h = alloc->mHal.drvState.lod[lod + 1].dimY;
for (uint32_t y=0; y < h; y++) {
uint16_t *oPtr = (uint16_t *)GetOffsetPtr(alloc, 0, y, lod + 1, face);
@@ -786,9 +771,8 @@
}
static void mip8888(const Allocation *alloc, int lod, RsAllocationCubemapFace face) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- uint32_t w = drv->lod[lod + 1].dimX;
- uint32_t h = drv->lod[lod + 1].dimY;
+ uint32_t w = alloc->mHal.drvState.lod[lod + 1].dimX;
+ uint32_t h = alloc->mHal.drvState.lod[lod + 1].dimY;
for (uint32_t y=0; y < h; y++) {
uint32_t *oPtr = (uint32_t *)GetOffsetPtr(alloc, 0, y, lod + 1, face);
@@ -805,9 +789,8 @@
}
static void mip8(const Allocation *alloc, int lod, RsAllocationCubemapFace face) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- uint32_t w = drv->lod[lod + 1].dimX;
- uint32_t h = drv->lod[lod + 1].dimY;
+ uint32_t w = alloc->mHal.drvState.lod[lod + 1].dimX;
+ uint32_t h = alloc->mHal.drvState.lod[lod + 1].dimY;
for (uint32_t y=0; y < h; y++) {
uint8_t *oPtr = GetOffsetPtr(alloc, 0, y, lod + 1, face);
@@ -824,8 +807,7 @@
}
void rsdAllocationGenerateMipmaps(const Context *rsc, const Allocation *alloc) {
- DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
- if(!drv->lod[0].mallocPtr) {
+ if(!alloc->mHal.drvState.lod[0].mallocPtr) {
return;
}
uint32_t numFaces = alloc->getType()->getDimFaces() ? 6 : 1;