summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2013-08-27 22:15:29 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2013-08-27 22:15:29 +0000
commitdda5e89800e781ff373bad575e3f2a4af68ec03b (patch)
treee0b51a318296b71ebfab001ff35b89088d572145
parent647a0e7af5d29bb46b70a35b933d7067f710652a (diff)
parent8725468a009ca71e65d518cfa948ea75437db0de (diff)
downloadrs-tools_r22.2.tar.gz
Merge "DO NOT MERGE - Add Sampler custom alloc/delete"tools_r22.2
-rw-r--r--rsSampler.cpp16
-rw-r--r--rsSampler.h2
2 files changed, 17 insertions, 1 deletions
diff --git a/rsSampler.cpp b/rsSampler.cpp
index fededb18..2a8476a0 100644
--- a/rsSampler.cpp
+++ b/rsSampler.cpp
@@ -98,7 +98,13 @@ ObjectBaseRef<Sampler> Sampler::getSampler(Context *rsc,
}
ObjectBase::asyncUnlock();
- Sampler *s = new Sampler(rsc, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
+ void* allocMem = rsc->mHal.funcs.allocRuntimeMem(sizeof(Sampler), 0);
+ if (!allocMem) {
+ rsc->setError(RS_ERROR_FATAL_DRIVER, "Couldn't allocate memory for Allocation");
+ return NULL;
+ }
+
+ Sampler *s = new (allocMem) Sampler(rsc, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
returnRef.set(s);
ObjectBase::asyncLock();
@@ -108,6 +114,14 @@ ObjectBaseRef<Sampler> Sampler::getSampler(Context *rsc,
return returnRef;
}
+void Sampler::operator delete(void* ptr) {
+ if (ptr) {
+ Sampler *s = (Sampler*) ptr;
+ s->getContext()->mHal.funcs.freeRuntimeMem(ptr);
+ }
+}
+
+
////////////////////////////////
namespace android {
diff --git a/rsSampler.h b/rsSampler.h
index 81220a88..2fdf7073 100644
--- a/rsSampler.h
+++ b/rsSampler.h
@@ -51,6 +51,8 @@ public:
};
Hal mHal;
+ void operator delete(void* ptr);
+
static ObjectBaseRef<Sampler> getSampler(Context *,
RsSamplerValue magFilter,
RsSamplerValue minFilter,