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