summaryrefslogtreecommitdiffstats
path: root/libs/rs/rsScriptC.cpp
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-06-09 12:15:30 -0700
committerJason Sams <rjsams@android.com>2009-06-09 12:15:30 -0700
commitda423d8479a2cefb456a03d7dc550e74e473acf4 (patch)
treeb53cd2f3def2d99ebb9e02bafd06479b3855c3bf /libs/rs/rsScriptC.cpp
parent928f5cf2870177abd715e1dfb81da6ac1fe3e845 (diff)
downloadframeworks_base-da423d8479a2cefb456a03d7dc550e74e473acf4.zip
frameworks_base-da423d8479a2cefb456a03d7dc550e74e473acf4.tar.gz
frameworks_base-da423d8479a2cefb456a03d7dc550e74e473acf4.tar.bz2
checkpoint pragma support. Includes more cleanup of script enviroment storage to keep the env settings in the base and only the per language state in ScriptC.
Diffstat (limited to 'libs/rs/rsScriptC.cpp')
-rw-r--r--libs/rs/rsScriptC.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index 91b743c..49d7872 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -434,6 +434,136 @@ void ScriptCState::runCompiler()
accScriptSource(mAccScript, 1, scriptSource, scriptLength);
accCompileScript(mAccScript);
accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript);
+ rsAssert(mProgram.mScript);
+
+ if (mProgram.mScript) {
+ const static int pragmaMax = 16;
+ ACCsizei pragmaCount;
+ ACCchar * str[pragmaMax];
+ accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]);
+
+ // Start with defaults
+ mEnviroment.mStateVertex =
+ Script::Enviroment_t::VTX_ORTHO_WINDOW;
+ mEnviroment.mStateRaster =
+ Script::Enviroment_t::RASTER_FLAT;
+ mEnviroment.mStateFragment =
+ Script::Enviroment_t::FRAGMENT_COLOR;
+ mEnviroment.mStateFragmentStore =
+ Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_REPLACE;
+
+ for (int ct=0; ct < pragmaCount; ct+=2) {
+ LOGE("pragma %i %s %s", ct, str[ct], str[ct+1]);
+
+ if (!strcmp(str[ct], "version")) {
+ continue;
+
+ }
+
+
+ if (!strcmp(str[ct], "stateVertex")) {
+ if (!strcmp(str[ct+1], "orthoWindow")) {
+ mEnviroment.mStateVertex =
+ Script::Enviroment_t::VTX_ORTHO_WINDOW;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "orthoNormalized")) {
+ mEnviroment.mStateVertex =
+ Script::Enviroment_t::VTX_ORTHO_NORMALIZED;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "projection")) {
+ mEnviroment.mStateVertex =
+ Script::Enviroment_t::VTX_PROJECTION;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "parent")) {
+ mEnviroment.mStateVertex =
+ Script::Enviroment_t::VTX_PARENT;
+ continue;
+ }
+ LOGE("Unreconized value %s passed to stateVertex", str[ct+1]);
+ }
+
+ if (!strcmp(str[ct], "stateRaster")) {
+ if (!strcmp(str[ct+1], "flat")) {
+ mEnviroment.mStateRaster =
+ Script::Enviroment_t::RASTER_FLAT;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "smooth")) {
+ mEnviroment.mStateRaster =
+ Script::Enviroment_t::RASTER_SMOOTH;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "parent")) {
+ mEnviroment.mStateRaster =
+ Script::Enviroment_t::RASTER_PARENT;
+ continue;
+ }
+ LOGE("Unreconized value %s passed to stateRaster", str[ct+1]);
+ }
+
+ if (!strcmp(str[ct], "stateFragment")) {
+ if (!strcmp(str[ct+1], "color")) {
+ mEnviroment.mStateFragment =
+ Script::Enviroment_t::FRAGMENT_COLOR;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "texReplace")) {
+ mEnviroment.mStateFragment =
+ Script::Enviroment_t::FRAGMENT_TEX_REPLACE;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "texModulate")) {
+ mEnviroment.mStateFragment =
+ Script::Enviroment_t::FRAGMENT_TEX_MODULATE;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "parent")) {
+ mEnviroment.mStateFragment =
+ Script::Enviroment_t::FRAGMENT_PARENT;
+ continue;
+ }
+ LOGE("Unreconized value %s passed to stateFragment", str[ct+1]);
+ }
+
+ if (!strcmp(str[ct], "stateFragmentStore")) {
+ if (!strcmp(str[ct+1], "alwaysReplace")) {
+ mEnviroment.mStateFragmentStore =
+ Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_REPLACE;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "alwaysBlend")) {
+ mEnviroment.mStateFragmentStore =
+ Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_BLEND;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "depthLessReplace")) {
+ mEnviroment.mStateFragmentStore =
+ Script::Enviroment_t::FRAGMENT_STORE_DEPTH_LESS_REPLACE;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "depthLessBlend")) {
+ mEnviroment.mStateFragmentStore =
+ Script::Enviroment_t::FRAGMENT_STORE_DEPTH_LESS_BLEND;
+ continue;
+ }
+ if (!strcmp(str[ct+1], "parent")) {
+ mEnviroment.mStateFragmentStore =
+ Script::Enviroment_t::FRAGMENT_STORE_PARENT;
+ continue;
+ }
+ LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]);
+ }
+
+ }
+
+
+ } else {
+ // Deal with an error.
+ }
+
}
namespace android {
@@ -511,6 +641,7 @@ RsScript rsi_ScriptCCreate(Context * rsc)
s->mEnviroment = ss->mEnviroment;
s->mProgram = ss->mProgram;
ss->clear();
+
return s;
}