rsScriptC.cpp revision e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fd
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h" 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsScriptC.h" 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsMatrix.h" 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 211ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich#include "acc/acc.h" 22a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams#include "utils/String8.h" 231ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich 241aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/gl.h> 251aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/glext.h> 261aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android; 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript; 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 30e57691037aea219562ac686429b4b98202aab7bcJason Sams#define GET_TLS() Context::ScriptTLSStruct * tls = \ 31e57691037aea219562ac686429b4b98202aab7bcJason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \ 32e57691037aea219562ac686429b4b98202aab7bcJason Sams Context * rsc = tls->mContext; \ 33e57691037aea219562ac686429b4b98202aab7bcJason Sams ScriptC * sc = (ScriptC *) tls->mScript 34e57691037aea219562ac686429b4b98202aab7bcJason Sams 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 36326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::ScriptC() 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 381ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich mAccScript = NULL; 39efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mProgram, 0, sizeof(mProgram)); 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 42326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::~ScriptC() 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 441ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich if (mAccScript) { 451ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich accDeleteScript(mAccScript); 461ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich } 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 50e57691037aea219562ac686429b4b98202aab7bcJason Samsbool ScriptC::run(Context *rsc, uint32_t launchIndex) 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 52e57691037aea219562ac686429b4b98202aab7bcJason Sams Context::ScriptTLSStruct * tls = 53e57691037aea219562ac686429b4b98202aab7bcJason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); 54a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 55a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mEnviroment.mFragmentStore.get()) { 56a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams rsc->setFragmentStore(mEnviroment.mFragmentStore.get()); 57a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 58a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mEnviroment.mFragment.get()) { 59a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams rsc->setFragment(mEnviroment.mFragment.get()); 60a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 618ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (mEnviroment.mVertex.get()) { 628ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams rsc->setVertex(mEnviroment.mVertex.get()); 638ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 64a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 65e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams bool ret = false; 66e57691037aea219562ac686429b4b98202aab7bcJason Sams tls->mScript = this; 67e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ret = mProgram.mScript(launchIndex) != 0; 68e57691037aea219562ac686429b4b98202aab7bcJason Sams tls->mScript = NULL; 69e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams return ret; 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 72326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::ScriptCState() 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams clear(); 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 77326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::~ScriptCState() 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 791ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich if (mAccScript) { 801ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich accDeleteScript(mAccScript); 811ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich } 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptCState::clear() 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 86efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mProgram, 0, sizeof(mProgram)); 87efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mConstantBufferTypes.clear(); 89efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 90efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mEnviroment, 0, sizeof(mEnviroment)); 91efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[0] = 0; 92efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[1] = 0; 93efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[2] = 0; 94efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[3] = 1; 95efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearDepth = 1; 96efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearStencil = 0; 97efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mIsRoot = false; 98efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 991ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich mAccScript = NULL; 100efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 1011f52633fefd1862451e6a30209d590680d02beecJason Sams} 1021f52633fefd1862451e6a30209d590680d02beecJason Sams 10329df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Samsstatic ACCvoid* symbolLookup(ACCvoid* pContext, const ACCchar* name) 10429df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams{ 10529df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams const ScriptCState::SymbolTable_t *sym = ScriptCState::lookupSymbol(name); 10629df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams 10729df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams if (sym) { 10829df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams return sym->mPtr; 10929df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams } 11029df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams 11129df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams LOGE("ScriptC sym lookup failed for %s", name); 11229df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams 11329df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams // Default to calling dlsym to allow any global symbol: 11429df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams return NULL; 11529df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams} 116a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 117a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsvoid ScriptCState::runCompiler(Context *rsc) 1181f52633fefd1862451e6a30209d590680d02beecJason Sams{ 1191f52633fefd1862451e6a30209d590680d02beecJason Sams mAccScript = accCreateScript(); 120a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams String8 tmp; 121a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 122a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams rsc->appendNameDefines(&tmp); 123f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams appendDecls(&tmp); 124f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams //tmp.append("#line 1\n"); 1251f52633fefd1862451e6a30209d590680d02beecJason Sams 126a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams const char* scriptSource[] = {tmp.string(), mProgram.mScriptText}; 127a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ; 128a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength); 12929df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams accRegisterSymbolCallback(mAccScript, symbolLookup, NULL); 1301f52633fefd1862451e6a30209d590680d02beecJason Sams accCompileScript(mAccScript); 131efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript); 1321030893d9b99b72468034da13df025bda479bb97Jason Sams rsAssert(mProgram.mScript); 1331030893d9b99b72468034da13df025bda479bb97Jason Sams 134f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams if (!mProgram.mScript) { 135f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams ACCchar buf[4096]; 136f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams ACCsizei len; 137f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams accGetScriptInfoLog(mAccScript, sizeof(buf), &len, buf); 138f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams LOGE(buf); 139f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams 140f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams } 141f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams 1428ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragment.set(rsc->getDefaultProgramFragment()); 1438ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.set(rsc->getDefaultProgramVertex()); 1448ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragmentStore.set(rsc->getDefaultProgramFragmentStore()); 145a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 1461030893d9b99b72468034da13df025bda479bb97Jason Sams if (mProgram.mScript) { 1471030893d9b99b72468034da13df025bda479bb97Jason Sams const static int pragmaMax = 16; 1481030893d9b99b72468034da13df025bda479bb97Jason Sams ACCsizei pragmaCount; 1491030893d9b99b72468034da13df025bda479bb97Jason Sams ACCchar * str[pragmaMax]; 1501030893d9b99b72468034da13df025bda479bb97Jason Sams accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]); 1511030893d9b99b72468034da13df025bda479bb97Jason Sams 1521030893d9b99b72468034da13df025bda479bb97Jason Sams for (int ct=0; ct < pragmaCount; ct+=2) { 1531030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "version")) { 1541030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 1551030893d9b99b72468034da13df025bda479bb97Jason Sams } 1561030893d9b99b72468034da13df025bda479bb97Jason Sams 1571030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateVertex")) { 1588ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 1598ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1608ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1618ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 1628ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.clear(); 1638ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1648ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1658ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams ProgramVertex * pv = (ProgramVertex *)rsc->lookupName(str[ct+1]); 1668ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (pv != NULL) { 1678ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.set(pv); 1688ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1698ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1701030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateVertex", str[ct+1]); 1711030893d9b99b72468034da13df025bda479bb97Jason Sams } 1721030893d9b99b72468034da13df025bda479bb97Jason Sams 1731030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateRaster")) { 1741030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateRaster", str[ct+1]); 1751030893d9b99b72468034da13df025bda479bb97Jason Sams } 1761030893d9b99b72468034da13df025bda479bb97Jason Sams 1771030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragment")) { 1788ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 1798ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1808ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1818ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 1828ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragment.clear(); 1838ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1848ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1858ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams ProgramFragment * pf = (ProgramFragment *)rsc->lookupName(str[ct+1]); 186a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pf != NULL) { 187a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragment.set(pf); 1881030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 1891030893d9b99b72468034da13df025bda479bb97Jason Sams } 1901030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragment", str[ct+1]); 1911030893d9b99b72468034da13df025bda479bb97Jason Sams } 1921030893d9b99b72468034da13df025bda479bb97Jason Sams 1931030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragmentStore")) { 1948ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 1958ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1968ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1978ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 1988ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragmentStore.clear(); 1998ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 2008ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 201a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ProgramFragmentStore * pfs = 202a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams (ProgramFragmentStore *)rsc->lookupName(str[ct+1]); 203a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pfs != NULL) { 204a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragmentStore.set(pfs); 2051030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 2061030893d9b99b72468034da13df025bda479bb97Jason Sams } 2071030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]); 2081030893d9b99b72468034da13df025bda479bb97Jason Sams } 2091030893d9b99b72468034da13df025bda479bb97Jason Sams 2101030893d9b99b72468034da13df025bda479bb97Jason Sams } 2111030893d9b99b72468034da13df025bda479bb97Jason Sams 2121030893d9b99b72468034da13df025bda479bb97Jason Sams 2131030893d9b99b72468034da13df025bda479bb97Jason Sams } else { 2141030893d9b99b72468034da13df025bda479bb97Jason Sams // Deal with an error. 2151030893d9b99b72468034da13df025bda479bb97Jason Sams } 2161030893d9b99b72468034da13df025bda479bb97Jason Sams 217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc) 223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->clear(); 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a) 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 231efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[0] = r; 232efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[1] = g; 233efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[2] = b; 234efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[3] = a; 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearDepth(Context * rsc, float v) 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 240efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearDepth = v; 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 243326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v) 244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 246efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearStencil = v; 247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 249326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCAddType(Context * rsc, RsType vt) 250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->mConstantBufferTypes.add(static_cast<const Type *>(vt)); 253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 255efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Samsvoid rsi_ScriptCSetScript(Context * rsc, void *vp) 256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 258e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ss->mProgram.mScript = reinterpret_cast<ScriptC::RunScript_t>(vp); 259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetRoot(Context * rsc, bool isRoot) 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 264efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mIsRoot = isRoot; 265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2671f52633fefd1862451e6a30209d590680d02beecJason Samsvoid rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) 2681f52633fefd1862451e6a30209d590680d02beecJason Sams{ 2691f52633fefd1862451e6a30209d590680d02beecJason Sams ScriptCState *ss = &rsc->mScriptC; 270efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptText = text; 271efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptTextLength = len; 2721f52633fefd1862451e6a30209d590680d02beecJason Sams} 2731f52633fefd1862451e6a30209d590680d02beecJason Sams 2741f52633fefd1862451e6a30209d590680d02beecJason Sams 275326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc) 276326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 277326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 278326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 279a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ss->runCompiler(rsc); 2801f52633fefd1862451e6a30209d590680d02beecJason Sams 281326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC *s = new ScriptC(); 282efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->incRef(); 2831ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich s->mAccScript = ss->mAccScript; 2841ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich ss->mAccScript = NULL; 285efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mEnviroment = ss->mEnviroment; 286efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mProgram = ss->mProgram; 287efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->clear(); 2881030893d9b99b72468034da13df025bda479bb97Jason Sams 289326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return s; 290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 293326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 294326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 295326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 296