diff options
Diffstat (limited to 'libs/rs/rsAllocation.cpp')
| -rw-r--r-- | libs/rs/rsAllocation.cpp | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp index 0356e4d..2e9e0b3 100644 --- a/libs/rs/rsAllocation.cpp +++ b/libs/rs/rsAllocation.cpp @@ -488,12 +488,13 @@ void Allocation::sendDirty() const } } -void Allocation::incRefs(const void *ptr, size_t ct) const +void Allocation::incRefs(const void *ptr, size_t ct, size_t startOff) const { const uint8_t *p = static_cast<const uint8_t *>(ptr); const Element *e = mType->getElement(); uint32_t stride = e->getSizeBytes(); + p += stride * startOff; while (ct > 0) { e->incRefs(p); ct --; @@ -501,12 +502,13 @@ void Allocation::incRefs(const void *ptr, size_t ct) const } } -void Allocation::decRefs(const void *ptr, size_t ct) const +void Allocation::decRefs(const void *ptr, size_t ct, size_t startOff) const { const uint8_t *p = static_cast<const uint8_t *>(ptr); const Element *e = mType->getElement(); uint32_t stride = e->getSizeBytes(); + p += stride * startOff; while (ct > 0) { e->decRefs(p); ct --; @@ -514,6 +516,37 @@ void Allocation::decRefs(const void *ptr, size_t ct) const } } +void Allocation::copyRange1D(Context *rsc, const Allocation *src, int32_t srcOff, int32_t destOff, int32_t len) +{ +} + +void Allocation::resize1D(Context *rsc, uint32_t dimX) +{ + Type *t = mType->cloneAndResize1D(rsc, dimX); + + uint32_t oldDimX = mType->getDimX(); + if (dimX == oldDimX) { + return; + } + + if (dimX < oldDimX) { + decRefs(mPtr, oldDimX - dimX, dimX); + } + mPtr = realloc(mPtr, t->getSizeBytes()); + + if (dimX > oldDimX) { + const Element *e = mType->getElement(); + uint32_t stride = e->getSizeBytes(); + memset(((uint8_t *)mPtr) + stride * oldDimX, 0, stride * (dimX - oldDimX)); + } + mType.set(t); +} + +void Allocation::resize2D(Context *rsc, uint32_t dimX, uint32_t dimY) +{ + LOGE("not implemented"); +} + ///////////////// // @@ -822,6 +855,18 @@ void rsi_AllocationRead(Context *rsc, RsAllocation va, void *data) a->read(data); } +void rsi_AllocationResize1D(Context *rsc, RsAllocation va, uint32_t dimX) +{ + Allocation *a = static_cast<Allocation *>(va); + a->resize1D(rsc, dimX); +} + +void rsi_AllocationResize2D(Context *rsc, RsAllocation va, uint32_t dimX, uint32_t dimY) +{ + Allocation *a = static_cast<Allocation *>(va); + a->resize2D(rsc, dimX, dimY); +} + const void* rsi_AllocationGetType(Context *rsc, RsAllocation va) { Allocation *a = static_cast<Allocation *>(va); |
