diff options
Diffstat (limited to 'libs/rs/rsAllocation.cpp')
-rw-r--r-- | libs/rs/rsAllocation.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp index 408d83f..bc62f92 100644 --- a/libs/rs/rsAllocation.cpp +++ b/libs/rs/rsAllocation.cpp @@ -139,6 +139,7 @@ void Allocation::data(const void *data, uint32_t sizeBytes) return; } memcpy(mPtr, data, size); + sendDirty(); } void Allocation::read(void *data) @@ -159,6 +160,7 @@ void Allocation::subData(uint32_t xoff, uint32_t count, const void *data, uint32 return; } memcpy(ptr, data, size); + sendDirty(); } void Allocation::subData(uint32_t xoff, uint32_t yoff, @@ -183,6 +185,7 @@ void Allocation::subData(uint32_t xoff, uint32_t yoff, src += lineSize; dst += destW * eSize; } + sendDirty(); } void Allocation::subData(uint32_t xoff, uint32_t yoff, uint32_t zoff, @@ -190,6 +193,22 @@ void Allocation::subData(uint32_t xoff, uint32_t yoff, uint32_t zoff, { } +void Allocation::addProgramToDirty(const Program *p) +{ + mToDirtyList.add(p); +} + +void Allocation::removeProgramToDirty(const Program *p) +{ + for (size_t ct=0; ct < mToDirtyList.size(); ct++) { + if (mToDirtyList[ct] == p) { + mToDirtyList.removeAt(ct); + return; + } + } + rsAssert(0); +} + void Allocation::dumpLOGV(const char *prefix) const { ObjectBase::dumpLOGV(prefix); @@ -206,9 +225,14 @@ void Allocation::dumpLOGV(const char *prefix) const LOGV("%s allocation mIsTexture=%i mIsTextureID=%i, mIsVertexBuffer=%i, mBufferID=%i", prefix, mIsTexture, mTextureID, mIsVertexBuffer, mBufferID); - } +void Allocation::sendDirty() const +{ + for (size_t ct=0; ct < mToDirtyList.size(); ct++) { + mToDirtyList[ct]->forceDirty(); + } +} ///////////////// // @@ -444,31 +468,24 @@ RsAllocation rsi_AllocationCreateFromBitmapBoxed(Context *rsc, uint32_t w, uint3 RsAllocation ret = rsi_AllocationCreateFromBitmap(rsc, w2, h2, _dst, _src, genMips, tmp); free(tmp); return ret; - - - - } void rsi_AllocationData(Context *rsc, RsAllocation va, const void *data, uint32_t sizeBytes) { Allocation *a = static_cast<Allocation *>(va); a->data(data, sizeBytes); - rsc->allocationCheck(a); } void rsi_Allocation1DSubData(Context *rsc, RsAllocation va, uint32_t xoff, uint32_t count, const void *data, uint32_t sizeBytes) { Allocation *a = static_cast<Allocation *>(va); a->subData(xoff, count, data, sizeBytes); - rsc->allocationCheck(a); } void rsi_Allocation2DSubData(Context *rsc, RsAllocation va, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data, uint32_t sizeBytes) { Allocation *a = static_cast<Allocation *>(va); a->subData(xoff, yoff, w, h, data, sizeBytes); - rsc->allocationCheck(a); } void rsi_AllocationRead(Context *rsc, RsAllocation va, void *data) |