rsScriptC.cpp revision e57691037aea219562ac686429b4b98202aab7bc
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
24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
27e57691037aea219562ac686429b4b98202aab7bcJason Sams#define GET_TLS()  Context::ScriptTLSStruct * tls = \
28e57691037aea219562ac686429b4b98202aab7bcJason Sams    (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \
29e57691037aea219562ac686429b4b98202aab7bcJason Sams    Context * rsc = tls->mContext; \
30e57691037aea219562ac686429b4b98202aab7bcJason Sams    ScriptC * sc = (ScriptC *) tls->mScript
31e57691037aea219562ac686429b4b98202aab7bcJason Sams
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
33326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::ScriptC()
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
351ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    mAccScript = NULL;
36efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    memset(&mProgram, 0, sizeof(mProgram));
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
39326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::~ScriptC()
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
411ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    if (mAccScript) {
421ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich        accDeleteScript(mAccScript);
431ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    }
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
46e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixLoadIdentity(rsc_Matrix *mat)
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadIdentity();
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
52e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixLoadFloat(rsc_Matrix *mat, const float *f)
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->load(f);
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
58e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixLoadMat(rsc_Matrix *mat, const rsc_Matrix *newmat)
59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->load(reinterpret_cast<const Matrix *>(newmat));
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
64e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixLoadRotate(rsc_Matrix *mat, float rot, float x, float y, float z)
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadRotate(rot, x, y, z);
68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
70e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixLoadScale(rsc_Matrix *mat, float x, float y, float z)
71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadScale(x, y, z);
74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
76e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixLoadTranslate(rsc_Matrix *mat, float x, float y, float z)
77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadTranslate(x, y, z);
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
82e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixLoadMultiply(rsc_Matrix *mat, const rsc_Matrix *lhs, const rsc_Matrix *rhs)
83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadMultiply(reinterpret_cast<const Matrix *>(lhs),
86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                    reinterpret_cast<const Matrix *>(rhs));
87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
89e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixMultiply(rsc_Matrix *mat, const rsc_Matrix *rhs)
90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->multiply(reinterpret_cast<const Matrix *>(rhs));
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
95e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixRotate(rsc_Matrix *mat, float rot, float x, float y, float z)
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->rotate(rot, x, y, z);
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
101e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixScale(rsc_Matrix *mat, float x, float y, float z)
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->scale(x, y, z);
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
107e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void matrixTranslate(rsc_Matrix *mat, float x, float y, float z)
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->translate(x, y, z);
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
114e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" const void * loadVp(uint32_t bank, uint32_t offset)
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
116e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
117e57691037aea219562ac686429b4b98202aab7bcJason Sams    return &static_cast<const uint8_t *>(sc->mSlots[bank]->getPtr())[offset];
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
120e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" float loadF(uint32_t bank, uint32_t offset)
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
122e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
123e57691037aea219562ac686429b4b98202aab7bcJason Sams    return static_cast<const float *>(sc->mSlots[bank]->getPtr())[offset];
124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
126e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" int32_t loadI32(uint32_t bank, uint32_t offset)
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
128e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
129e57691037aea219562ac686429b4b98202aab7bcJason Sams    return static_cast<const int32_t *>(sc->mSlots[bank]->getPtr())[offset];
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
132e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" uint32_t loadU32(uint32_t bank, uint32_t offset)
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
134e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
135e57691037aea219562ac686429b4b98202aab7bcJason Sams    return static_cast<const uint32_t *>(sc->mSlots[bank]->getPtr())[offset];
136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
138e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void loadEnvVec4(uint32_t bank, uint32_t offset, rsc_Vector4 *v)
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
140e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
141e57691037aea219562ac686429b4b98202aab7bcJason Sams    memcpy(v, &static_cast<const float *>(sc->mSlots[bank]->getPtr())[offset], sizeof(rsc_Vector4));
142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
144e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void loadEnvMatrix(uint32_t bank, uint32_t offset, rsc_Matrix *m)
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
146e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
147e57691037aea219562ac686429b4b98202aab7bcJason Sams    memcpy(m, &static_cast<const float *>(sc->mSlots[bank]->getPtr())[offset], sizeof(rsc_Matrix));
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
151e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void storeF(uint32_t bank, uint32_t offset, float v)
152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
153e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
154e57691037aea219562ac686429b4b98202aab7bcJason Sams    static_cast<float *>(sc->mSlots[bank]->getPtr())[offset] = v;
155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
157e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void storeI32(uint32_t bank, uint32_t offset, int32_t v)
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
159e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
160e57691037aea219562ac686429b4b98202aab7bcJason Sams    static_cast<int32_t *>(sc->mSlots[bank]->getPtr())[offset] = v;
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
163e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void storeU32(uint32_t bank, uint32_t offset, uint32_t v)
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
165e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
166e57691037aea219562ac686429b4b98202aab7bcJason Sams    static_cast<uint32_t *>(sc->mSlots[bank]->getPtr())[offset] = v;
167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
169e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void storeEnvVec4(uint32_t bank, uint32_t offset, const rsc_Vector4 *v)
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
171e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
172e57691037aea219562ac686429b4b98202aab7bcJason Sams    memcpy(&static_cast<float *>(sc->mSlots[bank]->getPtr())[offset], v, sizeof(rsc_Vector4));
173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
175e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void storeEnvMatrix(uint32_t bank, uint32_t offset, const rsc_Matrix *m)
176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
177e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
178e57691037aea219562ac686429b4b98202aab7bcJason Sams    memcpy(&static_cast<float *>(sc->mSlots[bank]->getPtr())[offset], m, sizeof(rsc_Matrix));
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
182e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void color(float r, float g, float b, float a)
183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColor4f(r, g, b, a);
185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
187e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void renderTriangleMesh(RsTriangleMesh mesh)
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
189e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
190e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsi_TriangleMeshRender(rsc, mesh);
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
193e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void renderTriangleMeshRange(RsTriangleMesh mesh, uint32_t start, uint32_t count)
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
195e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
196e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsi_TriangleMeshRenderRange(rsc, mesh, start, count);
197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
199e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void materialDiffuse(float r, float g, float b, float a)
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {r, g, b, a};
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, v);
203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
205e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void materialSpecular(float r, float g, float b, float a)
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {r, g, b, a};
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, v);
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
211e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void lightPosition(float x, float y, float z, float w)
212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {x, y, z, w};
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glLightfv(GL_LIGHT0, GL_POSITION, v);
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
217e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void materialShininess(float s)
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &s);
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
222e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void uploadToTexture(RsAllocation va, uint32_t baseMipLevel)
223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
224e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
225e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsi_AllocationUploadToTexture(rsc, va, baseMipLevel);
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
228e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void enable(uint32_t p)
229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnable(p);
231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
233e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void disable(uint32_t p)
234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisable(p);
236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
238e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" uint32_t scriptRand(uint32_t max)
239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return (uint32_t)(((float)rand()) * max / RAND_MAX);
241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// Assumes (GL_FIXED) x,y,z (GL_UNSIGNED_BYTE)r,g,b,a
244e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void drawTriangleArray(RsAllocation alloc, uint32_t count)
245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
246e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
247e57691037aea219562ac686429b4b98202aab7bcJason Sams
248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const Allocation *a = (const Allocation *)alloc;
249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const uint32_t *ptr = (const uint32_t *)a->getPtr();
250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
251e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsc->setupCheck();
252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glBindBuffer(GL_ARRAY_BUFFER, 0);
254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnableClientState(GL_VERTEX_ARRAY);
257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisableClientState(GL_NORMAL_ARRAY);
258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnableClientState(GL_COLOR_ARRAY);
260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glVertexPointer(2, GL_FIXED, 12, ptr + 1);
262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //glTexCoordPointer(2, GL_FIXED, 24, ptr + 1);
263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDrawArrays(GL_TRIANGLES, 0, count * 3);
266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
268e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void drawRect(int32_t x1, int32_t x2, int32_t y1, int32_t y2)
2696678e9b2568ad041429a2477177133fe4932159fJason Sams{
270e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
2716678e9b2568ad041429a2477177133fe4932159fJason Sams    x1 = (x1 << 16);
2726678e9b2568ad041429a2477177133fe4932159fJason Sams    x2 = (x2 << 16);
2736678e9b2568ad041429a2477177133fe4932159fJason Sams    y1 = (y1 << 16);
2746678e9b2568ad041429a2477177133fe4932159fJason Sams    y2 = (y2 << 16);
2756678e9b2568ad041429a2477177133fe4932159fJason Sams
2766678e9b2568ad041429a2477177133fe4932159fJason Sams    int32_t vtx[] = {x1,y1, x1,y2, x2,y1, x2,y2};
2776678e9b2568ad041429a2477177133fe4932159fJason Sams    static const int32_t tex[] = {0,0, 0,0x10000, 0x10000,0, 0x10000,0x10000};
2786678e9b2568ad041429a2477177133fe4932159fJason Sams
2796678e9b2568ad041429a2477177133fe4932159fJason Sams
280e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsc->setupCheck();
2816678e9b2568ad041429a2477177133fe4932159fJason Sams
2826678e9b2568ad041429a2477177133fe4932159fJason Sams    glBindBuffer(GL_ARRAY_BUFFER, 0);
2836678e9b2568ad041429a2477177133fe4932159fJason Sams    //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
2846678e9b2568ad041429a2477177133fe4932159fJason Sams
2856678e9b2568ad041429a2477177133fe4932159fJason Sams    glEnableClientState(GL_VERTEX_ARRAY);
2866678e9b2568ad041429a2477177133fe4932159fJason Sams    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
2876678e9b2568ad041429a2477177133fe4932159fJason Sams    glDisableClientState(GL_NORMAL_ARRAY);
2886678e9b2568ad041429a2477177133fe4932159fJason Sams    glDisableClientState(GL_COLOR_ARRAY);
2896678e9b2568ad041429a2477177133fe4932159fJason Sams
2906678e9b2568ad041429a2477177133fe4932159fJason Sams    glVertexPointer(2, GL_FIXED, 8, vtx);
2916678e9b2568ad041429a2477177133fe4932159fJason Sams    glTexCoordPointer(2, GL_FIXED, 8, tex);
2926678e9b2568ad041429a2477177133fe4932159fJason Sams    //glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
2936678e9b2568ad041429a2477177133fe4932159fJason Sams
2946678e9b2568ad041429a2477177133fe4932159fJason Sams    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
2956678e9b2568ad041429a2477177133fe4932159fJason Sams}
2966678e9b2568ad041429a2477177133fe4932159fJason Sams
297e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void pfBindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va)
298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
299e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
300e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsi_ProgramFragmentBindTexture(rsc,
301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<ProgramFragment *>(vpf),
302326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   slot,
303326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<Allocation *>(va));
304326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
307e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void pfBindSampler(RsProgramFragment vpf, uint32_t slot, RsSampler vs)
308326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
309e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
310e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsi_ProgramFragmentBindSampler(rsc,
311326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<ProgramFragment *>(vpf),
312326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   slot,
313326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<Sampler *>(vs));
314326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
315326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
316326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
317e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void contextBindProgramFragmentStore(RsProgramFragmentStore pfs)
318326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
319e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
320e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsi_ContextBindProgramFragmentStore(rsc, pfs);
321326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
322326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
323326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
324e57691037aea219562ac686429b4b98202aab7bcJason Samsextern "C" void contextBindProgramFragment(RsProgramFragment pf)
325326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
326e57691037aea219562ac686429b4b98202aab7bcJason Sams    GET_TLS();
327e57691037aea219562ac686429b4b98202aab7bcJason Sams    rsi_ContextBindProgramFragment(rsc, pf);
328326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
329326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
330326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
331326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
332326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsstatic rsc_FunctionTable scriptCPtrTable = {
333326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadVp,
334326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadF,
335326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadI32,
336326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadU32,
337326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadEnvVec4,
338326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadEnvMatrix,
339326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
340326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeF,
341326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeI32,
342326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeU32,
343326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeEnvVec4,
344326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeEnvMatrix,
345326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
346326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadIdentity,
347326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadFloat,
348326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadMat,
349326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadRotate,
350326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadScale,
351326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadTranslate,
352326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadMultiply,
353326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixMultiply,
354326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixRotate,
355326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixScale,
356326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixTranslate,
357326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
358326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    color,
359326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
360326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pfBindTexture,
361326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pfBindSampler,
362326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
363326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialDiffuse,
364326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialSpecular,
365326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    lightPosition,
366326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialShininess,
367326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uploadToTexture,
368326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    enable,
369326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    disable,
370326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
371326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    scriptRand,
372326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    contextBindProgramFragment,
3736678e9b2568ad041429a2477177133fe4932159fJason Sams    contextBindProgramFragmentStore,
3746678e9b2568ad041429a2477177133fe4932159fJason Sams
3756678e9b2568ad041429a2477177133fe4932159fJason Sams
3766678e9b2568ad041429a2477177133fe4932159fJason Sams    renderTriangleMesh,
3776678e9b2568ad041429a2477177133fe4932159fJason Sams    renderTriangleMeshRange,
3786678e9b2568ad041429a2477177133fe4932159fJason Sams
3796678e9b2568ad041429a2477177133fe4932159fJason Sams    drawTriangleArray,
3806678e9b2568ad041429a2477177133fe4932159fJason Sams    drawRect
3816678e9b2568ad041429a2477177133fe4932159fJason Sams
382326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams};
383326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
384326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
385e57691037aea219562ac686429b4b98202aab7bcJason Samsbool ScriptC::run(Context *rsc, uint32_t launchIndex)
386326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
387e57691037aea219562ac686429b4b98202aab7bcJason Sams    Context::ScriptTLSStruct * tls =
388e57691037aea219562ac686429b4b98202aab7bcJason Sams    (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey);
389a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams
390a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    if (mEnviroment.mFragmentStore.get()) {
391a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams        rsc->setFragmentStore(mEnviroment.mFragmentStore.get());
392a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    }
393a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    if (mEnviroment.mFragment.get()) {
394a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams        rsc->setFragment(mEnviroment.mFragment.get());
395a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    }
3968ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    if (mEnviroment.mVertex.get()) {
3978ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams        rsc->setVertex(mEnviroment.mVertex.get());
3988ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    }
399a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams
400e57691037aea219562ac686429b4b98202aab7bcJason Sams    tls->mScript = this;
401e57691037aea219562ac686429b4b98202aab7bcJason Sams    return mProgram.mScript(launchIndex, &scriptCPtrTable) != 0;
402e57691037aea219562ac686429b4b98202aab7bcJason Sams    tls->mScript = NULL;
403326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
404326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
405326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::ScriptCState()
406326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
407326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    clear();
408326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
409326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
410326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::~ScriptCState()
411326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
4121ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    if (mAccScript) {
4131ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich        accDeleteScript(mAccScript);
4141ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    }
415326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
416326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
417326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptCState::clear()
418326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
419efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    memset(&mProgram, 0, sizeof(mProgram));
420efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams
421326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mConstantBufferTypes.clear();
422efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams
423efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    memset(&mEnviroment, 0, sizeof(mEnviroment));
424efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    mEnviroment.mClearColor[0] = 0;
425efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    mEnviroment.mClearColor[1] = 0;
426efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    mEnviroment.mClearColor[2] = 0;
427efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    mEnviroment.mClearColor[3] = 1;
428efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    mEnviroment.mClearDepth = 1;
429efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    mEnviroment.mClearStencil = 0;
430efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    mEnviroment.mIsRoot = false;
431efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams
4321ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    mAccScript = NULL;
433efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams
4341f52633fefd1862451e6a30209d590680d02beecJason Sams}
4351f52633fefd1862451e6a30209d590680d02beecJason Sams
436a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams
437a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsvoid ScriptCState::runCompiler(Context *rsc)
4381f52633fefd1862451e6a30209d590680d02beecJason Sams{
4391f52633fefd1862451e6a30209d590680d02beecJason Sams    mAccScript = accCreateScript();
440a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams    String8 tmp;
441a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams
442a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams    rsc->appendNameDefines(&tmp);
4431f52633fefd1862451e6a30209d590680d02beecJason Sams
444a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams    const char* scriptSource[] = {tmp.string(), mProgram.mScriptText};
445a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams    int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ;
446a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams    accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength);
4471f52633fefd1862451e6a30209d590680d02beecJason Sams    accCompileScript(mAccScript);
448efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript);
4491030893d9b99b72468034da13df025bda479bb97Jason Sams    rsAssert(mProgram.mScript);
4501030893d9b99b72468034da13df025bda479bb97Jason Sams
4518ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    mEnviroment.mFragment.set(rsc->getDefaultProgramFragment());
4528ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    mEnviroment.mVertex.set(rsc->getDefaultProgramVertex());
4538ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    mEnviroment.mFragmentStore.set(rsc->getDefaultProgramFragmentStore());
454a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams
4551030893d9b99b72468034da13df025bda479bb97Jason Sams    if (mProgram.mScript) {
4561030893d9b99b72468034da13df025bda479bb97Jason Sams        const static int pragmaMax = 16;
4571030893d9b99b72468034da13df025bda479bb97Jason Sams        ACCsizei pragmaCount;
4581030893d9b99b72468034da13df025bda479bb97Jason Sams        ACCchar * str[pragmaMax];
4591030893d9b99b72468034da13df025bda479bb97Jason Sams        accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]);
4601030893d9b99b72468034da13df025bda479bb97Jason Sams
4611030893d9b99b72468034da13df025bda479bb97Jason Sams        for (int ct=0; ct < pragmaCount; ct+=2) {
4621030893d9b99b72468034da13df025bda479bb97Jason Sams            LOGE("pragma %i %s %s", ct, str[ct], str[ct+1]);
4631030893d9b99b72468034da13df025bda479bb97Jason Sams
4641030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "version")) {
4651030893d9b99b72468034da13df025bda479bb97Jason Sams                continue;
4661030893d9b99b72468034da13df025bda479bb97Jason Sams
4671030893d9b99b72468034da13df025bda479bb97Jason Sams            }
4681030893d9b99b72468034da13df025bda479bb97Jason Sams
4691030893d9b99b72468034da13df025bda479bb97Jason Sams
4701030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "stateVertex")) {
4718ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "default")) {
4728ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
4738ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
4748ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "parent")) {
4758ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    mEnviroment.mVertex.clear();
4768ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
4778ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
4788ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                ProgramVertex * pv = (ProgramVertex *)rsc->lookupName(str[ct+1]);
4798ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (pv != NULL) {
4808ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    mEnviroment.mVertex.set(pv);
4818ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
4828ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
4831030893d9b99b72468034da13df025bda479bb97Jason Sams                LOGE("Unreconized value %s passed to stateVertex", str[ct+1]);
4841030893d9b99b72468034da13df025bda479bb97Jason Sams            }
4851030893d9b99b72468034da13df025bda479bb97Jason Sams
4861030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "stateRaster")) {
4871030893d9b99b72468034da13df025bda479bb97Jason Sams                LOGE("Unreconized value %s passed to stateRaster", str[ct+1]);
4881030893d9b99b72468034da13df025bda479bb97Jason Sams            }
4891030893d9b99b72468034da13df025bda479bb97Jason Sams
4901030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "stateFragment")) {
4918ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "default")) {
4928ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
4938ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
4948ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "parent")) {
4958ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    mEnviroment.mFragment.clear();
4968ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
4978ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
4988ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                ProgramFragment * pf = (ProgramFragment *)rsc->lookupName(str[ct+1]);
499a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                if (pf != NULL) {
500a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                    mEnviroment.mFragment.set(pf);
5011030893d9b99b72468034da13df025bda479bb97Jason Sams                    continue;
5021030893d9b99b72468034da13df025bda479bb97Jason Sams                }
5031030893d9b99b72468034da13df025bda479bb97Jason Sams                LOGE("Unreconized value %s passed to stateFragment", str[ct+1]);
5041030893d9b99b72468034da13df025bda479bb97Jason Sams            }
5051030893d9b99b72468034da13df025bda479bb97Jason Sams
5061030893d9b99b72468034da13df025bda479bb97Jason Sams            if (!strcmp(str[ct], "stateFragmentStore")) {
5078ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "default")) {
5088ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
5098ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
5108ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                if (!strcmp(str[ct+1], "parent")) {
5118ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    mEnviroment.mFragmentStore.clear();
5128ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                    continue;
5138ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams                }
514a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                ProgramFragmentStore * pfs =
515a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                    (ProgramFragmentStore *)rsc->lookupName(str[ct+1]);
516a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                if (pfs != NULL) {
517a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams                    mEnviroment.mFragmentStore.set(pfs);
5181030893d9b99b72468034da13df025bda479bb97Jason Sams                    continue;
5191030893d9b99b72468034da13df025bda479bb97Jason Sams                }
5201030893d9b99b72468034da13df025bda479bb97Jason Sams                LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]);
5211030893d9b99b72468034da13df025bda479bb97Jason Sams            }
5221030893d9b99b72468034da13df025bda479bb97Jason Sams
5231030893d9b99b72468034da13df025bda479bb97Jason Sams        }
5241030893d9b99b72468034da13df025bda479bb97Jason Sams
5251030893d9b99b72468034da13df025bda479bb97Jason Sams
5261030893d9b99b72468034da13df025bda479bb97Jason Sams    } else {
5271030893d9b99b72468034da13df025bda479bb97Jason Sams        // Deal with an error.
5281030893d9b99b72468034da13df025bda479bb97Jason Sams    }
5291030893d9b99b72468034da13df025bda479bb97Jason Sams
530326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
531326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
532326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
533326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
534326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
535326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc)
536326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
537326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
538326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->clear();
539326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
540326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
541326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a)
542326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
543326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
544efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mEnviroment.mClearColor[0] = r;
545efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mEnviroment.mClearColor[1] = g;
546efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mEnviroment.mClearColor[2] = b;
547efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mEnviroment.mClearColor[3] = a;
548326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
549326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
550326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearDepth(Context * rsc, float v)
551326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
552326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
553efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mEnviroment.mClearDepth = v;
554326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
555326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
556326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v)
557326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
558326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
559efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mEnviroment.mClearStencil = v;
560326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
561326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
562326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCAddType(Context * rsc, RsType vt)
563326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
564326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
565326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mConstantBufferTypes.add(static_cast<const Type *>(vt));
566326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
567326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
568efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Samsvoid rsi_ScriptCSetScript(Context * rsc, void *vp)
569326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
570326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
571efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mProgram.mScript = reinterpret_cast<rsc_RunScript>(vp);
572326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
573326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
574326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetRoot(Context * rsc, bool isRoot)
575326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
576326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
577efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mEnviroment.mIsRoot = isRoot;
578326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
579326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
5801f52633fefd1862451e6a30209d590680d02beecJason Samsvoid rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
5811f52633fefd1862451e6a30209d590680d02beecJason Sams{
5821f52633fefd1862451e6a30209d590680d02beecJason Sams    ScriptCState *ss = &rsc->mScriptC;
583efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mProgram.mScriptText = text;
584efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->mProgram.mScriptTextLength = len;
5851f52633fefd1862451e6a30209d590680d02beecJason Sams}
5861f52633fefd1862451e6a30209d590680d02beecJason Sams
5871f52633fefd1862451e6a30209d590680d02beecJason Sams
588326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc)
589326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
590326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
591326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
592a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams    ss->runCompiler(rsc);
5931f52633fefd1862451e6a30209d590680d02beecJason Sams
594326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC *s = new ScriptC();
595efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    s->incRef();
5961ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    s->mAccScript = ss->mAccScript;
5971ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    ss->mAccScript = NULL;
598efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    s->mEnviroment = ss->mEnviroment;
599efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    s->mProgram = ss->mProgram;
600efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams    ss->clear();
6011030893d9b99b72468034da13df025bda479bb97Jason Sams
602326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return s;
603326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
604326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
605326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
606326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
607326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
608326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
609