diff --git a/libs/rs/java/Fountain/res/raw/fountain.c b/libs/rs/java/Fountain/res/raw/fountain.c index afb2fb33a9c73..e7920fd22dd07 100644 --- a/libs/rs/java/Fountain/res/raw/fountain.c +++ b/libs/rs/java/Fountain/res/raw/fountain.c @@ -37,7 +37,7 @@ int main(void* con, int ft, int launchID) { //contextBindProgramFragment(con, loadI32(con, 0, 7)); drawRect(con, 0, 256, 0, 512); - contextBindProgramFragment(con, loadI32(con, 0, 6)); + contextBindProgramFragment(con, NAMED_PgmFragParts); if (touch) { newPart = loadI32(con, 2, 0); @@ -106,6 +106,6 @@ int main(void* con, int ft, int launchID) { } } - drawTriangleArray(con, loadI32(con, 0, 5), drawCount); + drawTriangleArray(con, NAMED_PartBuffer, drawCount); return 1; } diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java index f8b488ab7a98f..46f6fca67ef8e 100644 --- a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java +++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java @@ -68,6 +68,7 @@ public class FountainView extends RSSurfaceView { mIntAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, 10); mPartAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 3 * 3); + mPartAlloc.setName("PartBuffer"); mVertAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 5 + 1); { @@ -97,7 +98,6 @@ public class FountainView extends RSSurfaceView { mRS.programFragmentBegin(null, null); mPF = mRS.programFragmentCreate(); mPF.setName("PgmFragParts"); - //mRS.contextBindProgramFragment(mPF); mRS.programFragmentBegin(null, null); mRS.programFragmentSetTexEnable(0, true); @@ -113,8 +113,6 @@ public class FountainView extends RSSurfaceView { mParams[3] = 0; mParams[4] = 0; mParams[5] = mPartAlloc.getID(); - mParams[6] = mPF.getID(); - mParams[7] = mPF2.getID(); mIntAlloc.data(mParams); int t2[] = new int[partCount * 4*3]; diff --git a/libs/rs/jni/RenderScript_jni.cpp b/libs/rs/jni/RenderScript_jni.cpp index dcd6e2fff18b0..fd19d8870c984 100644 --- a/libs/rs/jni/RenderScript_jni.cpp +++ b/libs/rs/jni/RenderScript_jni.cpp @@ -70,7 +70,7 @@ nAssignName(JNIEnv *_env, jobject _this, jint obj, jbyteArray str) jint len = _env->GetArrayLength(str); jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); - rsAssignName((void *)obj, (const char *)cptr); + rsAssignName((void *)obj, (const char *)cptr, len); _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT); } diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec index b7eaed1af9c5e..74445d3bc477a 100644 --- a/libs/rs/rs.spec +++ b/libs/rs/rs.spec @@ -19,6 +19,7 @@ ContextBindProgramVertex { AssignName { param void *obj param const char *name + param size_t len } ElementBegin { diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index ffd03d595d717..266c455289800 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -17,7 +17,7 @@ #include "rsDevice.h" #include "rsContext.h" #include "rsThreadIO.h" - +#include "utils/String8.h" using namespace android; using namespace android::renderscript; @@ -246,10 +246,10 @@ void Context::setVertex(ProgramVertex *pv) pv->setupGL(); } -void Context::assignName(ObjectBase *obj, const char *name) +void Context::assignName(ObjectBase *obj, const char *name, uint32_t len) { rsAssert(!obj->getName()); - obj->setName(name); + obj->setName(name, len); mNames.add(obj); } @@ -273,6 +273,19 @@ ObjectBase * Context::lookupName(const char *name) const return NULL; } +void Context::appendNameDefines(String8 *str) const +{ + char buf[256]; + for (size_t ct=0; ct < mNames.size(); ct++) { + str->append("#define NAMED_"); + str->append(mNames[ct]->getName()); + str->append(" "); + sprintf(buf, "%i\n", (int)mNames[ct]); + str->append(buf); + } +} + + /////////////////////////////////////////////////////////////////////////////////////////// // @@ -316,10 +329,10 @@ void rsi_ContextBindProgramVertex(Context *rsc, RsProgramVertex vpv) rsc->setVertex(pv); } -void rsi_AssignName(Context *rsc, void * obj, const char *name) +void rsi_AssignName(Context *rsc, void * obj, const char *name, uint32_t len) { ObjectBase *ob = static_cast(obj); - rsc->assignName(ob, name); + rsc->assignName(ob, name, len); } diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h index 184740f296384..21ae8c594f3e0 100644 --- a/libs/rs/rsContext.h +++ b/libs/rs/rsContext.h @@ -76,9 +76,10 @@ public: void setupCheck(); - void assignName(ObjectBase *obj, const char *name); + void assignName(ObjectBase *obj, const char *name, uint32_t len); void removeName(ObjectBase *obj); ObjectBase * lookupName(const char *name) const; + void appendNameDefines(String8 *str) const; protected: Device *mDev; diff --git a/libs/rs/rsObjectBase.cpp b/libs/rs/rsObjectBase.cpp index 8660818b3f57d..8f5232a6e420e 100644 --- a/libs/rs/rsObjectBase.cpp +++ b/libs/rs/rsObjectBase.cpp @@ -56,3 +56,15 @@ void ObjectBase::setName(const char *name) strcpy(mName, name); } } + +void ObjectBase::setName(const char *name, uint32_t len) +{ + delete mName; + mName = NULL; + if (name) { + mName = new char[len + 1]; + memcpy(mName, name, len); + mName[len] = 0; + } +} + diff --git a/libs/rs/rsObjectBase.h b/libs/rs/rsObjectBase.h index 4c52e9ccc4fe7..b2c33386e18ef 100644 --- a/libs/rs/rsObjectBase.h +++ b/libs/rs/rsObjectBase.h @@ -37,6 +37,7 @@ public: return mName; } void setName(const char *); + void setName(const char *, uint32_t len); private: char * mName; diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp index ae58e5f14b28c..d29eb9ff9be6c 100644 --- a/libs/rs/rsScriptC.cpp +++ b/libs/rs/rsScriptC.cpp @@ -19,6 +19,7 @@ #include "rsMatrix.h" #include "acc/acc.h" +#include "utils/String8.h" using namespace android; using namespace android::renderscript; @@ -433,17 +434,22 @@ void ScriptCState::clear() } + void ScriptCState::runCompiler(Context *rsc) { mAccScript = accCreateScript(); + String8 tmp; - const char* scriptSource[] = {mProgram.mScriptText}; - int scriptLength[] = {mProgram.mScriptTextLength} ; - accScriptSource(mAccScript, 1, scriptSource, scriptLength); + rsc->appendNameDefines(&tmp); + + const char* scriptSource[] = {tmp.string(), mProgram.mScriptText}; + int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ; + accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength); accCompileScript(mAccScript); accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript); rsAssert(mProgram.mScript); + if (mProgram.mScript) { const static int pragmaMax = 16; ACCsizei pragmaCount;