summaryrefslogtreecommitdiff
path: root/rsScript.cpp
diff options
context:
space:
mode:
authorChris Wailes <chriswailes@google.com>2014-06-11 12:00:29 -0700
committerChris Wailes <chriswailes@google.com>2014-07-08 11:46:34 -0700
commit4b3c34e6833e39bc89c2128002806b654b8e623d (patch)
treed5e1eeed6ac0e0f9b57488570680b6796ecd7735 /rsScript.cpp
parentcb51798a0379409c0f9927c44bbcdd772ed7ec18 (diff)
Adds support for multi-input kernels to Frameworks/RS.
This patch modifies Frameworks/RS in the following ways: * Adjusted the data-layout of the C/C++ version of RsForEachStubParamStruct to accommodate a pointer to an array of input allocations and a pointer to an array of stride sizes for each of these allocatoins. * Adds a new code path for Java code to pass multiple allocations to a RS kernel. * Packs base pointers and step values for multi-input kernels into the new RsForEachStubParamStruct members. Change-Id: I46d2834c37075b2a2407fd8b010546818a4540d1
Diffstat (limited to 'rsScript.cpp')
-rw-r--r--rsScript.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/rsScript.cpp b/rsScript.cpp
index 27fe0203..5918c592 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -198,6 +198,28 @@ void rsi_ScriptForEach(Context *rsc, RsScript vs, uint32_t slot,
}
+void rsi_ScriptForEachMulti(Context *rsc, RsScript vs, uint32_t slot,
+ RsAllocation *vains, size_t inLen,
+ RsAllocation vaout, const void *params,
+ size_t paramLen, const RsScriptCall *sc,
+ size_t scLen) {
+ Script *s = static_cast<Script *>(vs);
+ // The rs.spec generated code does not handle the absence of an actual
+ // input for sc. Instead, it retains an existing pointer value (the prior
+ // field in the packed data object). This can cause confusion because
+ // drivers might now inspect bogus sc data.
+ if (scLen == 0) {
+ sc = NULL;
+ }
+
+ Allocation **ains = (Allocation**)(vains);
+
+ s->runForEach(rsc, slot,
+ const_cast<const Allocation **>(ains), inLen,
+ static_cast<Allocation *>(vaout), params, paramLen, sc);
+
+}
+
void rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot) {
Script *s = static_cast<Script *>(vs);
s->Invoke(rsc, slot, NULL, 0);
@@ -260,4 +282,3 @@ void rsi_ScriptSetVarVE(Context *rsc, RsScript vs, uint32_t slot,
}
}
-