Add API entry points for clipped kernels and fix Z-dimension clipping.
Change-Id: I43074cb8556d9b28d3e549930f5ac68387f8d823
diff --git a/cpp/Script.cpp b/cpp/Script.cpp
index 09d541d..0f87adb 100644
--- a/cpp/Script.cpp
+++ b/cpp/Script.cpp
@@ -33,7 +33,7 @@
}
void *in_id = BaseObj::getObjID(ain);
void *out_id = BaseObj::getObjID(aout);
- rsScriptForEach(mRS->getContext(), getID(), slot, in_id, out_id, usr, usrLen);
+ rsScriptForEach(mRS->getContext(), getID(), slot, in_id, out_id, usr, usrLen, NULL, 0);
}
diff --git a/cpu_ref/rsCpuScript.cpp b/cpu_ref/rsCpuScript.cpp
index 06ce4bb..e79a675 100644
--- a/cpu_ref/rsCpuScript.cpp
+++ b/cpu_ref/rsCpuScript.cpp
@@ -211,6 +211,17 @@
if (mtls->yStart >= mtls->yEnd) return;
}
+ if (!sc || (sc->zEnd == 0)) {
+ mtls->zEnd = mtls->fep.dimZ;
+ } else {
+ rsAssert(sc->zStart < mtls->fep.dimZ);
+ rsAssert(sc->zEnd <= mtls->fep.dimZ);
+ rsAssert(sc->zStart < sc->zEnd);
+ mtls->zStart = rsMin(mtls->fep.dimZ, sc->zStart);
+ mtls->zEnd = rsMin(mtls->fep.dimZ, sc->zEnd);
+ if (mtls->zStart >= mtls->zEnd) return;
+ }
+
mtls->xEnd = rsMax((uint32_t)1, mtls->xEnd);
mtls->yEnd = rsMax((uint32_t)1, mtls->yEnd);
mtls->zEnd = rsMax((uint32_t)1, mtls->zEnd);
diff --git a/rs.spec b/rs.spec
index 024497e..ddd85f4 100644
--- a/rs.spec
+++ b/rs.spec
@@ -319,6 +319,7 @@
param RsAllocation ain
param RsAllocation aout
param const void * usr
+ param const RsScriptCall * sc
}
ScriptSetVarI {
diff --git a/rsScript.cpp b/rsScript.cpp
index 9bbc2ba..f23d107 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -163,11 +163,12 @@
void rsi_ScriptForEach(Context *rsc, RsScript vs, uint32_t slot,
RsAllocation vain, RsAllocation vaout,
- const void *params, size_t paramLen) {
+ const void *params, size_t paramLen,
+ const RsScriptCall *sc, size_t scLen) {
Script *s = static_cast<Script *>(vs);
s->runForEach(rsc, slot,
static_cast<const Allocation *>(vain), static_cast<Allocation *>(vaout),
- params, paramLen);
+ params, paramLen, sc);
}