rsScriptC.cpp revision 2dca84dd6c07992f78ad050177975f16486dd77e
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"
229c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato#include "utils/Timers.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
36e514b45de8561fbc6ef6770845102ca10b0a69d7Jason SamsScriptC::ScriptC(Context *rsc) : Script(rsc)
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
38f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocFile = __FILE__;
39f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocLine = __LINE__;
401ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    mAccScript = NULL;
41efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    memset(&mProgram, 0, sizeof(mProgram));
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
44326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::~ScriptC()
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
461ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    if (mAccScript) {
471ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich        accDeleteScript(mAccScript);
481ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    }
49e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams    free(mEnviroment.mScriptText);
50e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams    mEnviroment.mScriptText = NULL;
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
53ada7f272890d8791bc518c95989ad7d13050834dJason Samsvoid ScriptC::setupScript()
54ada7f272890d8791bc518c95989ad7d13050834dJason Sams{
55ada7f272890d8791bc518c95989ad7d13050834dJason Sams    for (int ct=0; ct < MAX_SCRIPT_BANKS; ct++) {
56ada7f272890d8791bc518c95989ad7d13050834dJason Sams        if (mProgram.mSlotPointers[ct]) {
57ada7f272890d8791bc518c95989ad7d13050834dJason Sams            *mProgram.mSlotPointers[ct] = mSlots[ct]->getPtr();
58ada7f272890d8791bc518c95989ad7d13050834dJason Sams        }
59ada7f272890d8791bc518c95989ad7d13050834dJason Sams    }
60ada7f272890d8791bc518c95989ad7d13050834dJason Sams}
61ada7f272890d8791bc518c95989ad7d13050834dJason Sams
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
632dca84dd6c07992f78ad050177975f16486dd77eJason Samsuint32_t ScriptC::run(Context *rsc, uint32_t launchIndex)
64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
65d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams    Context::ScriptTLSStruct * tls =
66e57691037aea219562ac686429b4b98202aab7bcJason Sams    (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey);
679e4e13d87e834b1cb770407cef0778c262b02b72Jason Sams    rsAssert(tls);
68a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams
69a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    if (mEnviroment.mFragmentStore.get()) {
70a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams        rsc->setFragmentStore(mEnviroment.mFragmentStore.get());
71a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    }
72a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    if (mEnviroment.mFragment.get()) {
73a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams        rsc->setFragment(mEnviroment.mFragment.get());
74a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    }
758ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    if (mEnviroment.mVertex.get()) {
768ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams        rsc->setVertex(mEnviroment.mVertex.get());
778ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    }
78b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams    if (mEnviroment.mRaster.get()) {
79b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams        rsc->setRaster(mEnviroment.mRaster.get());
80b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams    }
81a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams
829c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato    if (launchIndex == 0) {
839c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato        mEnviroment.mStartTimeMillis
849c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato                = nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC));
859c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato    }
86ada7f272890d8791bc518c95989ad7d13050834dJason Sams    setupScript();
871d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams
882dca84dd6c07992f78ad050177975f16486dd77eJason Sams    uint32_t ret = 0;
89e57691037aea219562ac686429b4b98202aab7bcJason Sams    tls->mScript = this;
902dca84dd6c07992f78ad050177975f16486dd77eJason Sams    ret = mProgram.mScript(launchIndex);
91e57691037aea219562ac686429b4b98202aab7bcJason Sams    tls->mScript = NULL;
92e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams    return ret;
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
95326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::ScriptCState()
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
978c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    mScript = NULL;
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    clear();
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
101326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::~ScriptCState()
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
1038c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    delete mScript;
1048c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    mScript = NULL;
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptCState::clear()
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
1098b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams    for (uint32_t ct=0; ct < MAX_SCRIPT_BANKS; ct++) {
1108b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams        mConstantBufferTypes[ct].clear();
111fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        mSlotNames[ct].setTo("");
1128c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams        mInvokableNames[ct].setTo("");
11390b36a88cf0cc549b296ac15a249ea7786c6de9eJason Sams        mSlotWritable[ct] = false;
1148b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams    }
115efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams
1168c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    delete mScript;
117e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams    mScript = new ScriptC(NULL);
118efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams
11957b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    mInt32Defines.clear();
12057b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    mFloatDefines.clear();
1211f52633fefd1862451e6a30209d590680d02beecJason Sams}
1221f52633fefd1862451e6a30209d590680d02beecJason Sams
123d34b725ac1752f5a234c7643a0b65245591ea1ccJason Samsstatic ACCvoid* symbolLookup(ACCvoid* pContext, const ACCchar* name)
12429df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams{
12529df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams    const ScriptCState::SymbolTable_t *sym = ScriptCState::lookupSymbol(name);
12629df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams    if (sym) {
12729df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams        return sym->mPtr;
12829df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams    }
12929df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams    LOGE("ScriptC sym lookup failed for %s", name);
13029df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams    return NULL;
13129df66f82aeef7fa7e2cf00edbf00d43c822b05aJason Sams}
132a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams
1338c6bc6930d4996b897de8e5113da4a4efae2310cJason Samsvoid ScriptCState::runCompiler(Context *rsc, ScriptC *s)
1341f52633fefd1862451e6a30209d590680d02beecJason Sams{
1358c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    s->mAccScript = accCreateScript();
136a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams    String8 tmp;
137a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams
138a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams    rsc->appendNameDefines(&tmp);
139f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams    appendDecls(&tmp);
14057b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    rsc->appendVarDefines(&tmp);
1411fddd90849deaae89b546ff492c345d485bbce42Jason Sams    appendVarDefines(rsc, &tmp);
1421fddd90849deaae89b546ff492c345d485bbce42Jason Sams    appendTypes(rsc, &tmp);
143b5909ce06dd10dcb5ac715572a05b2d225b77c98Jason Sams    tmp.append("#line 1\n");
1441f52633fefd1862451e6a30209d590680d02beecJason Sams
1458c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    const char* scriptSource[] = {tmp.string(), s->mEnviroment.mScriptText};
1468c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    int scriptLength[] = {tmp.length(), s->mEnviroment.mScriptTextLength} ;
1478c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    accScriptSource(s->mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength);
1488c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    accRegisterSymbolCallback(s->mAccScript, symbolLookup, NULL);
1498c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    accCompileScript(s->mAccScript);
1508c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    accGetScriptLabel(s->mAccScript, "main", (ACCvoid**) &s->mProgram.mScript);
1518c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    accGetScriptLabel(s->mAccScript, "init", (ACCvoid**) &s->mProgram.mInit);
1528c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    rsAssert(s->mProgram.mScript);
1531030893d9b99b72468034da13df025bda479bb97Jason Sams
1548c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    if (!s->mProgram.mScript) {
155f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams        ACCchar buf[4096];
156f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams        ACCsizei len;
1578c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams        accGetScriptInfoLog(s->mAccScript, sizeof(buf), &len, buf);
158a891933b4c5ab1b63103add167269cfc404c2adfJason Sams        LOGV(buf);
159f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams    }
160f1685045e3423f2e342c3d74c206a25d72eba89dJason Sams
1618c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    if (s->mProgram.mInit) {
1628c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams        s->mProgram.mInit();
1631d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams    }
1641d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams
1651d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams    for (int ct=0; ct < MAX_SCRIPT_BANKS; ct++) {
1661d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        if (mSlotNames[ct].length() > 0) {
1678c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams            accGetScriptLabel(s->mAccScript,
1681d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                              mSlotNames[ct].string(),
1698c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                              (ACCvoid**) &s->mProgram.mSlotPointers[ct]);
1708c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams        }
1718c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    }
1728c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams
1738c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    for (int ct=0; ct < MAX_SCRIPT_BANKS; ct++) {
1748c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams        if (mInvokableNames[ct].length() > 0) {
1758c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams            accGetScriptLabel(s->mAccScript,
1768c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                              mInvokableNames[ct].string(),
1778c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                              (ACCvoid**) &s->mEnviroment.mInvokables[ct]);
1781d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        }
1791d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams    }
1801d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams
1818c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    s->mEnviroment.mFragment.set(rsc->getDefaultProgramFragment());
1828c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    s->mEnviroment.mVertex.set(rsc->getDefaultProgramVertex());
1838c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    s->mEnviroment.mFragmentStore.set(rsc->getDefaultProgramFragmentStore());
184b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams    s->mEnviroment.mRaster.set(rsc->getDefaultProgramRaster());
185a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams
1868c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    if (s->mProgram.mScript) {
1871030893d9b99b72468034da13df025bda479bb97Jason Sams        const static int pragmaMax = 16;
1881030893d9b99b72468034da13df025bda479bb97Jason Sams        ACCsizei pragmaCount;
1891030893d9b99b72468034da13df025bda479bb97Jason Sams        ACCchar * str[pragmaMax];
1908c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams        accGetPragmas(s->mAccScript, &pragmaCount, pragmaMax, &str[0]);
1911030893d9b99b72468034da13df025bda479bb97Jason Sams
1921030893d9b99b72468034da13df025bda479bb97Jason Sams        for (int ct=0; ct < pragmaCount; ct+=2) {
1931030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "version")) {
1941030893d9b99b72468034da13df025bda479bb97Jason Sams                continue;
1951030893d9b99b72468034da13df025bda479bb97Jason Sams            }
1961030893d9b99b72468034da13df025bda479bb97Jason Sams
1971030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "stateVertex")) {
1988ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "default")) {
1998ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
2008ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
2018ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "parent")) {
2028c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                    s->mEnviroment.mVertex.clear();
2038ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
2048ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
2058ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                ProgramVertex * pv = (ProgramVertex *)rsc->lookupName(str[ct+1]);
2068ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (pv != NULL) {
2078c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                    s->mEnviroment.mVertex.set(pv);
2088ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
2098ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
2101030893d9b99b72468034da13df025bda479bb97Jason Sams                LOGE("Unreconized value %s passed to stateVertex", str[ct+1]);
2111030893d9b99b72468034da13df025bda479bb97Jason Sams            }
2121030893d9b99b72468034da13df025bda479bb97Jason Sams
2131030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "stateRaster")) {
214b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                if (!strcmp(str[ct+1], "default")) {
215b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                    continue;
216b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                }
217b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                if (!strcmp(str[ct+1], "parent")) {
218b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                    s->mEnviroment.mRaster.clear();
219b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                    continue;
220b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                }
221b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                ProgramRaster * pr = (ProgramRaster *)rsc->lookupName(str[ct+1]);
222b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                if (pr != NULL) {
223b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                    s->mEnviroment.mRaster.set(pr);
224b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                    continue;
225b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                }
2261030893d9b99b72468034da13df025bda479bb97Jason Sams                LOGE("Unreconized value %s passed to stateRaster", str[ct+1]);
2271030893d9b99b72468034da13df025bda479bb97Jason Sams            }
2281030893d9b99b72468034da13df025bda479bb97Jason Sams
2291030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "stateFragment")) {
2308ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "default")) {
2318ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
2328ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
2338ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "parent")) {
2348c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                    s->mEnviroment.mFragment.clear();
2358ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
2368ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
2378ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                ProgramFragment * pf = (ProgramFragment *)rsc->lookupName(str[ct+1]);
238a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                if (pf != NULL) {
2398c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                    s->mEnviroment.mFragment.set(pf);
2401030893d9b99b72468034da13df025bda479bb97Jason Sams                    continue;
2411030893d9b99b72468034da13df025bda479bb97Jason Sams                }
2421030893d9b99b72468034da13df025bda479bb97Jason Sams                LOGE("Unreconized value %s passed to stateFragment", str[ct+1]);
2431030893d9b99b72468034da13df025bda479bb97Jason Sams            }
2441030893d9b99b72468034da13df025bda479bb97Jason Sams
245b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams            if (!strcmp(str[ct], "stateStore")) {
2468ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "default")) {
2478ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
2488ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
2498ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "parent")) {
2508c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                    s->mEnviroment.mFragmentStore.clear();
2518ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
2528ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
253d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams                ProgramFragmentStore * pfs =
254a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                    (ProgramFragmentStore *)rsc->lookupName(str[ct+1]);
255a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                if (pfs != NULL) {
2568c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams                    s->mEnviroment.mFragmentStore.set(pfs);
2571030893d9b99b72468034da13df025bda479bb97Jason Sams                    continue;
2581030893d9b99b72468034da13df025bda479bb97Jason Sams                }
259b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams                LOGE("Unreconized value %s passed to stateStore", str[ct+1]);
2601030893d9b99b72468034da13df025bda479bb97Jason Sams            }
2611030893d9b99b72468034da13df025bda479bb97Jason Sams
2621030893d9b99b72468034da13df025bda479bb97Jason Sams        }
2631030893d9b99b72468034da13df025bda479bb97Jason Sams
264d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams
2651030893d9b99b72468034da13df025bda479bb97Jason Sams    } else {
2661030893d9b99b72468034da13df025bda479bb97Jason Sams        // Deal with an error.
2671030893d9b99b72468034da13df025bda479bb97Jason Sams    }
26857b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato}
2691030893d9b99b72468034da13df025bda479bb97Jason Sams
2701d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Samsstatic void appendElementBody(String8 *s, const Element *e)
2711d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams{
2721d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams    s->append(" {\n");
2731d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams    for (size_t ct2=0; ct2 < e->getComponentCount(); ct2++) {
2741d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        const Component *c = e->getComponent(ct2);
2751d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        s->append("    ");
2761d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        s->append(c->getCType());
2771d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        s->append(" ");
2781d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        s->append(c->getComponentName());
2791d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        s->append(";\n");
2801d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams    }
2811d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams    s->append("}");
2821d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams}
28357b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato
2841fddd90849deaae89b546ff492c345d485bbce42Jason Samsvoid ScriptCState::appendVarDefines(const Context *rsc, String8 *str)
28557b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato{
28657b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    char buf[256];
2871fddd90849deaae89b546ff492c345d485bbce42Jason Sams    if (rsc->props.mLogScripts) {
2881fddd90849deaae89b546ff492c345d485bbce42Jason Sams        LOGD("appendVarDefines mInt32Defines.size()=%d mFloatDefines.size()=%d\n",
2891fddd90849deaae89b546ff492c345d485bbce42Jason Sams                mInt32Defines.size(), mFloatDefines.size());
2901fddd90849deaae89b546ff492c345d485bbce42Jason Sams    }
29157b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    for (size_t ct=0; ct < mInt32Defines.size(); ct++) {
29257b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append("#define ");
29357b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append(mInt32Defines.keyAt(ct));
29457b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append(" ");
29557b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        sprintf(buf, "%i\n", (int)mInt32Defines.valueAt(ct));
29657b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append(buf);
29757b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    }
29857b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    for (size_t ct=0; ct < mFloatDefines.size(); ct++) {
29957b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append("#define ");
30057b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append(mFloatDefines.keyAt(ct));
30157b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append(" ");
30257b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        sprintf(buf, "%ff\n", mFloatDefines.valueAt(ct));
30357b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato        str->append(buf);
30457b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    }
305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
3071d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams
3081d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams
3091fddd90849deaae89b546ff492c345d485bbce42Jason Samsvoid ScriptCState::appendTypes(const Context *rsc, String8 *str)
3108b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams{
3118b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams    char buf[256];
312fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    String8 tmp;
3138b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams
314a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams    str->append("struct vec2_s {float x; float y;};");
315a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams    str->append("struct vec3_s {float x; float y; float z;};");
316a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams    str->append("struct vec4_s {float x; float y; float z; float w;};");
317a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams
318fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    for (size_t ct=0; ct < MAX_SCRIPT_BANKS; ct++) {
3198b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams        const Type *t = mConstantBufferTypes[ct].get();
320fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        if (!t) {
3218b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams            continue;
3228b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams        }
323fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        const Element *e = t->getElement();
3241d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        if (e->getName() && (e->getComponentCount() > 1)) {
3251d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            String8 s("struct struct_");
3261d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append(e->getName());
3271d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            appendElementBody(&s, e);
3281d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append(";\n");
3291d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append("#define ");
3301d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append(e->getName());
3311d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append("_t struct struct_");
3321d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append(e->getName());
3331d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append("\n\n");
3341fddd90849deaae89b546ff492c345d485bbce42Jason Sams            if (rsc->props.mLogScripts) {
3351fddd90849deaae89b546ff492c345d485bbce42Jason Sams                LOGV(s);
3361fddd90849deaae89b546ff492c345d485bbce42Jason Sams            }
3371d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            str->append(s);
3381d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams        }
339fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams
340fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        if (t->getName()) {
341fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams            for (size_t ct2=0; ct2 < e->getComponentCount(); ct2++) {
342fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                const Component *c = e->getComponent(ct2);
343fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                tmp.setTo("#define OFFSETOF_");
344fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                tmp.append(t->getName());
345fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                tmp.append("_");
346fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                tmp.append(c->getComponentName());
347fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                sprintf(buf, " %i\n", ct2);
348fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                tmp.append(buf);
3491fddd90849deaae89b546ff492c345d485bbce42Jason Sams                if (rsc->props.mLogScripts) {
3501fddd90849deaae89b546ff492c345d485bbce42Jason Sams                    LOGV(tmp);
3511fddd90849deaae89b546ff492c345d485bbce42Jason Sams                }
352fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams                str->append(tmp);
353fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams            }
3548b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams        }
3558b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams
356fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        if (mSlotNames[ct].length() > 0) {
3571d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            String8 s;
3581d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            if (e->getComponentCount() > 1) {
3591d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                if (e->getName()) {
3601d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    // Use the named struct
3611d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.setTo(e->getName());
3621d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.append("_t *");
3631d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                } else {
3641d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    // create an struct named from the slot.
3651d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.setTo("struct ");
3661d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.append(mSlotNames[ct]);
3671d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.append("_s");
3681d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    appendElementBody(&s, e);
3691d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.append(";\n");
3701d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.append("struct ");
3711d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.append(mSlotNames[ct]);
3721d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                    s.append("_s * ");
3731d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                }
3741d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            } else {
3751d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                // Just make an array
3761d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                s.setTo(e->getComponent(0)->getCType());
3771d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams                s.append("_t *");
3781d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            }
3791d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append(mSlotNames[ct]);
3801d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            s.append(";\n");
3811fddd90849deaae89b546ff492c345d485bbce42Jason Sams            if (rsc->props.mLogScripts) {
3821fddd90849deaae89b546ff492c345d485bbce42Jason Sams                LOGV(s);
3831fddd90849deaae89b546ff492c345d485bbce42Jason Sams            }
3841d54f10f3c23e0d7ec57e52ec3b0701a2a5ed24eJason Sams            str->append(s);
385fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        }
3868b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams    }
3878b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams}
3888b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Sams
38957b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato
390326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
391326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
392326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
393326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc)
394326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
395326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
396326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->clear();
397326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
398326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
399efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Samsvoid rsi_ScriptCSetScript(Context * rsc, void *vp)
400326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
4018c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    rsAssert(0);
4028c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    //ScriptCState *ss = &rsc->mScriptC;
4038c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    //ss->mProgram.mScript = reinterpret_cast<ScriptC::RunScript_t>(vp);
404326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
405326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
4061f52633fefd1862451e6a30209d590680d02beecJason Samsvoid rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
4071f52633fefd1862451e6a30209d590680d02beecJason Sams{
4081f52633fefd1862451e6a30209d590680d02beecJason Sams    ScriptCState *ss = &rsc->mScriptC;
409e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams
410e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams    char *t = (char *)malloc(len + 1);
411e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams    memcpy(t, text, len);
412e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams    t[len] = 0;
413e402ed33486730f1d06f080cdfc48132bf612b3aJason Sams    ss->mScript->mEnviroment.mScriptText = t;
4148c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    ss->mScript->mEnviroment.mScriptTextLength = len;
4151f52633fefd1862451e6a30209d590680d02beecJason Sams}
4161f52633fefd1862451e6a30209d590680d02beecJason Sams
4171f52633fefd1862451e6a30209d590680d02beecJason Sams
418326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc)
419326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
420326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
421326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
4228c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    ScriptC *s = ss->mScript;
4238c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    ss->mScript = NULL;
4241f52633fefd1862451e6a30209d590680d02beecJason Sams
4258c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    ss->runCompiler(rsc, s);
4269397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    s->incUserRef();
427e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams    s->setContext(rsc);
428fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    for (int ct=0; ct < MAX_SCRIPT_BANKS; ct++) {
429fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        s->mTypes[ct].set(ss->mConstantBufferTypes[ct].get());
430fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams        s->mSlotNames[ct] = ss->mSlotNames[ct];
43190b36a88cf0cc549b296ac15a249ea7786c6de9eJason Sams        s->mSlotWritable[ct] = ss->mSlotWritable[ct];
432fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    }
4331030893d9b99b72468034da13df025bda479bb97Jason Sams
434fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    ss->clear();
435326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return s;
436326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
437326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
43857b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onoratovoid rsi_ScriptCSetDefineF(Context *rsc, const char* name, float value)
43957b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato{
44057b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    ScriptCState *ss = &rsc->mScriptC;
44157b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    ss->mFloatDefines.add(String8(name), value);
44257b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato}
44357b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato
44457b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onoratovoid rsi_ScriptCSetDefineI32(Context *rsc, const char* name, int32_t value)
44557b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato{
44657b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    ScriptCState *ss = &rsc->mScriptC;
44757b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato    ss->mInt32Defines.add(String8(name), value);
44857b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato}
44957b79ceb1126e3797fa42367b97dd7bcfcda1ed9Joe Onorato
450326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
451326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
452326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
453326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
454