rsScriptC.cpp revision 9c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2
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" 239c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato#include "utils/Timers.h" 241ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich 251aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/gl.h> 261aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/glext.h> 271aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android; 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript; 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 31e57691037aea219562ac686429b4b98202aab7bcJason Sams#define GET_TLS() Context::ScriptTLSStruct * tls = \ 32e57691037aea219562ac686429b4b98202aab7bcJason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \ 33e57691037aea219562ac686429b4b98202aab7bcJason Sams Context * rsc = tls->mContext; \ 34e57691037aea219562ac686429b4b98202aab7bcJason Sams ScriptC * sc = (ScriptC *) tls->mScript 35e57691037aea219562ac686429b4b98202aab7bcJason Sams 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 37326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::ScriptC() 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 391ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich mAccScript = NULL; 40efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mProgram, 0, sizeof(mProgram)); 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 43326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::~ScriptC() 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 451ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich if (mAccScript) { 461ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich accDeleteScript(mAccScript); 471ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich } 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 51e57691037aea219562ac686429b4b98202aab7bcJason Samsbool ScriptC::run(Context *rsc, uint32_t launchIndex) 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 53d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams Context::ScriptTLSStruct * tls = 54e57691037aea219562ac686429b4b98202aab7bcJason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); 55a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 56a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mEnviroment.mFragmentStore.get()) { 57a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams rsc->setFragmentStore(mEnviroment.mFragmentStore.get()); 58a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 59a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mEnviroment.mFragment.get()) { 60a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams rsc->setFragment(mEnviroment.mFragment.get()); 61a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 628ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (mEnviroment.mVertex.get()) { 638ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams rsc->setVertex(mEnviroment.mVertex.get()); 648ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 65a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 669c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato if (launchIndex == 0) { 679c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato mEnviroment.mStartTimeMillis 689c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato = nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC)); 699c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato } 709c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato 71e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams bool ret = false; 72e57691037aea219562ac686429b4b98202aab7bcJason Sams tls->mScript = this; 73e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ret = mProgram.mScript(launchIndex) != 0; 74e57691037aea219562ac686429b4b98202aab7bcJason Sams tls->mScript = NULL; 75e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams return ret; 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 78326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::ScriptCState() 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams clear(); 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 83326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::~ScriptCState() 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 851ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich if (mAccScript) { 861ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich accDeleteScript(mAccScript); 871ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich } 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptCState::clear() 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 92efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mProgram, 0, sizeof(mProgram)); 93efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mConstantBufferTypes.clear(); 95efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 96efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mEnviroment, 0, sizeof(mEnviroment)); 97efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[0] = 0; 98efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[1] = 0; 99efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[2] = 0; 100efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[3] = 1; 101efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearDepth = 1; 102efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearStencil = 0; 103efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mIsRoot = false; 104efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 1051ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich mAccScript = NULL; 106efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 1071f52633fefd1862451e6a30209d590680d02beecJason Sams} 1081f52633fefd1862451e6a30209d590680d02beecJason Sams 109d34b725ac1752f5a234c7643a0b65245591ea1ccJason Samsstatic ACCvoid* symbolLookup(ACCvoid* pContext, const ACCchar* name) 11029df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams{ 11129df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams const ScriptCState::SymbolTable_t *sym = ScriptCState::lookupSymbol(name); 11229df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams if (sym) { 11329df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams return sym->mPtr; 11429df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams } 11529df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams LOGE("ScriptC sym lookup failed for %s", name); 11629df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams return NULL; 11729df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams} 118a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 119a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsvoid ScriptCState::runCompiler(Context *rsc) 1201f52633fefd1862451e6a30209d590680d02beecJason Sams{ 1211f52633fefd1862451e6a30209d590680d02beecJason Sams mAccScript = accCreateScript(); 122a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams String8 tmp; 123a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 124a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams rsc->appendNameDefines(&tmp); 125f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams appendDecls(&tmp); 126b5909ce06dd10dcb5ac715572a05b2d225b77c98Jason Sams tmp.append("#line 1\n"); 1271f52633fefd1862451e6a30209d590680d02beecJason Sams 128a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams const char* scriptSource[] = {tmp.string(), mProgram.mScriptText}; 129a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ; 130a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength); 13129df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams accRegisterSymbolCallback(mAccScript, symbolLookup, NULL); 1321f52633fefd1862451e6a30209d590680d02beecJason Sams accCompileScript(mAccScript); 133efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript); 1341030893d9b99b72468034da13df025bda479bb97Jason Sams rsAssert(mProgram.mScript); 1351030893d9b99b72468034da13df025bda479bb97Jason Sams 136f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams if (!mProgram.mScript) { 137f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams ACCchar buf[4096]; 138f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams ACCsizei len; 139f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams accGetScriptInfoLog(mAccScript, sizeof(buf), &len, buf); 140f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams LOGE(buf); 141f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams 142f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams } 143f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams 1448ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragment.set(rsc->getDefaultProgramFragment()); 1458ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.set(rsc->getDefaultProgramVertex()); 1468ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragmentStore.set(rsc->getDefaultProgramFragmentStore()); 147a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 1481030893d9b99b72468034da13df025bda479bb97Jason Sams if (mProgram.mScript) { 1491030893d9b99b72468034da13df025bda479bb97Jason Sams const static int pragmaMax = 16; 1501030893d9b99b72468034da13df025bda479bb97Jason Sams ACCsizei pragmaCount; 1511030893d9b99b72468034da13df025bda479bb97Jason Sams ACCchar * str[pragmaMax]; 1521030893d9b99b72468034da13df025bda479bb97Jason Sams accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]); 1531030893d9b99b72468034da13df025bda479bb97Jason Sams 1541030893d9b99b72468034da13df025bda479bb97Jason Sams for (int ct=0; ct < pragmaCount; ct+=2) { 1551030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "version")) { 1561030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 1571030893d9b99b72468034da13df025bda479bb97Jason Sams } 1581030893d9b99b72468034da13df025bda479bb97Jason Sams 1591030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateVertex")) { 1608ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 1618ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1628ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1638ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 1648ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.clear(); 1658ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1668ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1678ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams ProgramVertex * pv = (ProgramVertex *)rsc->lookupName(str[ct+1]); 1688ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (pv != NULL) { 1698ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.set(pv); 1708ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1718ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1721030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateVertex", str[ct+1]); 1731030893d9b99b72468034da13df025bda479bb97Jason Sams } 1741030893d9b99b72468034da13df025bda479bb97Jason Sams 1751030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateRaster")) { 1761030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateRaster", str[ct+1]); 1771030893d9b99b72468034da13df025bda479bb97Jason Sams } 1781030893d9b99b72468034da13df025bda479bb97Jason Sams 1791030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragment")) { 1808ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 1818ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1828ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1838ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 1848ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragment.clear(); 1858ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1868ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1878ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams ProgramFragment * pf = (ProgramFragment *)rsc->lookupName(str[ct+1]); 188a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pf != NULL) { 189a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragment.set(pf); 1901030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 1911030893d9b99b72468034da13df025bda479bb97Jason Sams } 1921030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragment", str[ct+1]); 1931030893d9b99b72468034da13df025bda479bb97Jason Sams } 1941030893d9b99b72468034da13df025bda479bb97Jason Sams 1951030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragmentStore")) { 1968ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 1978ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 1988ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 1998ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 2008ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragmentStore.clear(); 2018ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 2028ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 203d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams ProgramFragmentStore * pfs = 204a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams (ProgramFragmentStore *)rsc->lookupName(str[ct+1]); 205a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pfs != NULL) { 206a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragmentStore.set(pfs); 2071030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 2081030893d9b99b72468034da13df025bda479bb97Jason Sams } 2091030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]); 2101030893d9b99b72468034da13df025bda479bb97Jason Sams } 2111030893d9b99b72468034da13df025bda479bb97Jason Sams 2121030893d9b99b72468034da13df025bda479bb97Jason Sams } 2131030893d9b99b72468034da13df025bda479bb97Jason Sams 214d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams 2151030893d9b99b72468034da13df025bda479bb97Jason Sams } else { 2161030893d9b99b72468034da13df025bda479bb97Jason Sams // Deal with an error. 2171030893d9b99b72468034da13df025bda479bb97Jason Sams } 2181030893d9b99b72468034da13df025bda479bb97Jason Sams 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 224326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc) 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->clear(); 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 230326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCAddType(Context * rsc, RsType vt) 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->mConstantBufferTypes.add(static_cast<const Type *>(vt)); 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 236efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Samsvoid rsi_ScriptCSetScript(Context * rsc, void *vp) 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 239e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ss->mProgram.mScript = reinterpret_cast<ScriptC::RunScript_t>(vp); 240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 242326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetRoot(Context * rsc, bool isRoot) 243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 245efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mIsRoot = isRoot; 246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2481f52633fefd1862451e6a30209d590680d02beecJason Samsvoid rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) 2491f52633fefd1862451e6a30209d590680d02beecJason Sams{ 2501f52633fefd1862451e6a30209d590680d02beecJason Sams ScriptCState *ss = &rsc->mScriptC; 251efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptText = text; 252efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptTextLength = len; 2531f52633fefd1862451e6a30209d590680d02beecJason Sams} 2541f52633fefd1862451e6a30209d590680d02beecJason Sams 2551f52633fefd1862451e6a30209d590680d02beecJason Sams 256326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc) 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 260a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ss->runCompiler(rsc); 2611f52633fefd1862451e6a30209d590680d02beecJason Sams 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC *s = new ScriptC(); 263efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->incRef(); 2641ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich s->mAccScript = ss->mAccScript; 2651ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich ss->mAccScript = NULL; 266efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mEnviroment = ss->mEnviroment; 267efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mProgram = ss->mProgram; 268efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->clear(); 2691030893d9b99b72468034da13df025bda479bb97Jason Sams 270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return s; 271326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 272326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 273326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 276326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 277