rsScriptC.cpp revision 8ce125be69531dbf3a7e856d5e59d1b8e2789db0
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 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 28326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::ScriptC() 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 301ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich mAccScript = NULL; 31efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mProgram, 0, sizeof(mProgram)); 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 34326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::~ScriptC() 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 361ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich if (mAccScript) { 371ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich accDeleteScript(mAccScript); 381ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich } 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 41fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadIdentity(void *con, rsc_Matrix *mat) 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->loadIdentity(); 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 47fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadFloat(void *con, rsc_Matrix *mat, const float *f) 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->load(f); 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 53fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadMat(void *con, rsc_Matrix *mat, const rsc_Matrix *newmat) 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->load(reinterpret_cast<const Matrix *>(newmat)); 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 59fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z) 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->loadRotate(rot, x, y, z); 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 65fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadScale(void *con, rsc_Matrix *mat, float x, float y, float z) 66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->loadScale(x, y, z); 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 71fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadTranslate(void *con, rsc_Matrix *mat, float x, float y, float z) 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->loadTranslate(x, y, z); 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 77fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *lhs, const rsc_Matrix *rhs) 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->loadMultiply(reinterpret_cast<const Matrix *>(lhs), 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams reinterpret_cast<const Matrix *>(rhs)); 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 84fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *rhs) 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->multiply(reinterpret_cast<const Matrix *>(rhs)); 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 90fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z) 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->rotate(rot, x, y, z); 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 96fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixScale(void *con, rsc_Matrix *mat, float x, float y, float z) 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->scale(x, y, z); 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 102fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixTranslate(void *con, rsc_Matrix *mat, float x, float y, float z) 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Matrix *m = reinterpret_cast<Matrix *>(mat); 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams m->translate(x, y, z); 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 109fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" const void * loadVp(void *vp, uint32_t bank, uint32_t offset) 110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return &static_cast<const uint8_t *>(env->mScript->mSlots[bank]->getPtr())[offset]; 113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 115fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" float loadF(void *vp, uint32_t bank, uint32_t offset) 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //LOGE("bank %i, offset %i", bank, offset); 119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //LOGE("%p", env->mScript->mSlots[bank]->getPtr()); 120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset]; 121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 123fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" int32_t loadI32(void *vp, uint32_t bank, uint32_t offset) 124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return static_cast<const int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset]; 127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 129fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" uint32_t loadU32(void *vp, uint32_t bank, uint32_t offset) 130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return static_cast<const uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset]; 133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 135fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void loadEnvVec4(void *vp, uint32_t bank, uint32_t offset, rsc_Vector4 *v) 136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams memcpy(v, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Vector4)); 139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 141fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void loadEnvMatrix(void *vp, uint32_t bank, uint32_t offset, rsc_Matrix *m) 142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams memcpy(m, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Matrix)); 145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 148fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeF(void *vp, uint32_t bank, uint32_t offset, float v) 149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset] = v; 152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 154fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeI32(void *vp, uint32_t bank, uint32_t offset, int32_t v) 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams static_cast<int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v; 158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 160fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeU32(void *vp, uint32_t bank, uint32_t offset, uint32_t v) 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams static_cast<uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v; 164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 166fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeEnvVec4(void *vp, uint32_t bank, uint32_t offset, const rsc_Vector4 *v) 167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], v, sizeof(rsc_Vector4)); 170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 172fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeEnvMatrix(void *vp, uint32_t bank, uint32_t offset, const rsc_Matrix *m) 173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], m, sizeof(rsc_Matrix)); 176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 179fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void color(void *vp, float r, float g, float b, float a) 180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glColor4f(r, g, b, a); 183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 185fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void renderTriangleMesh(void *vp, RsTriangleMesh mesh) 186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsi_TriangleMeshRender(env->mContext, mesh); 189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 191fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void renderTriangleMeshRange(void *vp, RsTriangleMesh mesh, uint32_t start, uint32_t count) 192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsi_TriangleMeshRenderRange(env->mContext, mesh, start, count); 195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 197fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialDiffuse(void *vp, float r, float g, float b, float a) 198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams float v[] = {r, g, b, a}; 201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, v); 202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 204fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialSpecular(void *vp, float r, float g, float b, float a) 205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams float v[] = {r, g, b, a}; 208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, v); 209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 211fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void lightPosition(void *vp, float x, float y, float z, float w) 212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams float v[] = {x, y, z, w}; 215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glLightfv(GL_LIGHT0, GL_POSITION, v); 216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 218fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialShininess(void *vp, float s) 219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &s); 222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 224fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void uploadToTexture(void *vp, RsAllocation va, uint32_t baseMipLevel) 225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsi_AllocationUploadToTexture(env->mContext, va, baseMipLevel); 228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 230fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void enable(void *vp, uint32_t p) 231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glEnable(p); 234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 236fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void disable(void *vp, uint32_t p) 237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glDisable(p); 240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 242fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" uint32_t scriptRand(void *vp, uint32_t max) 243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return (uint32_t)(((float)rand()) * max / RAND_MAX); 245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// Assumes (GL_FIXED) x,y,z (GL_UNSIGNED_BYTE)r,g,b,a 248fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void drawTriangleArray(void *vp, RsAllocation alloc, uint32_t count) 249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const Allocation *a = (const Allocation *)alloc; 251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const uint32_t *ptr = (const uint32_t *)a->getPtr(); 252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams env->mContext->setupCheck(); 255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glBindBuffer(GL_ARRAY_BUFFER, 0); 257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]); 258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glEnableClientState(GL_VERTEX_ARRAY); 260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glDisableClientState(GL_NORMAL_ARRAY); 261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glDisableClientState(GL_TEXTURE_COORD_ARRAY); 262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glEnableClientState(GL_COLOR_ARRAY); 263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glVertexPointer(2, GL_FIXED, 12, ptr + 1); 265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //glTexCoordPointer(2, GL_FIXED, 24, ptr + 1); 266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr); 267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams glDrawArrays(GL_TRIANGLES, 0, count * 3); 269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2716678e9b2568ad041429a2477177133fe4932159fJason Samsextern "C" void drawRect(void *vp, int32_t x1, int32_t x2, int32_t y1, int32_t y2) 2726678e9b2568ad041429a2477177133fe4932159fJason Sams{ 2736678e9b2568ad041429a2477177133fe4932159fJason Sams x1 = (x1 << 16); 2746678e9b2568ad041429a2477177133fe4932159fJason Sams x2 = (x2 << 16); 2756678e9b2568ad041429a2477177133fe4932159fJason Sams y1 = (y1 << 16); 2766678e9b2568ad041429a2477177133fe4932159fJason Sams y2 = (y2 << 16); 2776678e9b2568ad041429a2477177133fe4932159fJason Sams 2786678e9b2568ad041429a2477177133fe4932159fJason Sams int32_t vtx[] = {x1,y1, x1,y2, x2,y1, x2,y2}; 2796678e9b2568ad041429a2477177133fe4932159fJason Sams static const int32_t tex[] = {0,0, 0,0x10000, 0x10000,0, 0x10000,0x10000}; 2806678e9b2568ad041429a2477177133fe4932159fJason Sams 2816678e9b2568ad041429a2477177133fe4932159fJason Sams 2826678e9b2568ad041429a2477177133fe4932159fJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 2836678e9b2568ad041429a2477177133fe4932159fJason Sams env->mContext->setupCheck(); 2846678e9b2568ad041429a2477177133fe4932159fJason Sams 2856678e9b2568ad041429a2477177133fe4932159fJason Sams glBindBuffer(GL_ARRAY_BUFFER, 0); 2866678e9b2568ad041429a2477177133fe4932159fJason Sams //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]); 2876678e9b2568ad041429a2477177133fe4932159fJason Sams 2886678e9b2568ad041429a2477177133fe4932159fJason Sams glEnableClientState(GL_VERTEX_ARRAY); 2896678e9b2568ad041429a2477177133fe4932159fJason Sams glEnableClientState(GL_TEXTURE_COORD_ARRAY); 2906678e9b2568ad041429a2477177133fe4932159fJason Sams glDisableClientState(GL_NORMAL_ARRAY); 2916678e9b2568ad041429a2477177133fe4932159fJason Sams glDisableClientState(GL_COLOR_ARRAY); 2926678e9b2568ad041429a2477177133fe4932159fJason Sams 2936678e9b2568ad041429a2477177133fe4932159fJason Sams glVertexPointer(2, GL_FIXED, 8, vtx); 2946678e9b2568ad041429a2477177133fe4932159fJason Sams glTexCoordPointer(2, GL_FIXED, 8, tex); 2956678e9b2568ad041429a2477177133fe4932159fJason Sams //glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr); 2966678e9b2568ad041429a2477177133fe4932159fJason Sams 2976678e9b2568ad041429a2477177133fe4932159fJason Sams glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 2986678e9b2568ad041429a2477177133fe4932159fJason Sams} 2996678e9b2568ad041429a2477177133fe4932159fJason Sams 300fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void pfBindTexture(void *vp, RsProgramFragment vpf, uint32_t slot, RsAllocation va) 301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 302326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //LOGE("pfBindTexture %p", vpf); 303326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 304fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevich rsi_ProgramFragmentBindTexture(env->mContext, 305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams static_cast<ProgramFragment *>(vpf), 306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams slot, 307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams static_cast<Allocation *>(va)); 308326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 309326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 310326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 311fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void pfBindSampler(void *vp, RsProgramFragment vpf, uint32_t slot, RsSampler vs) 312326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 313326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 314fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevich rsi_ProgramFragmentBindSampler(env->mContext, 315326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams static_cast<ProgramFragment *>(vpf), 316326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams slot, 317326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams static_cast<Sampler *>(vs)); 318326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 319326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 320326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 321fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void contextBindProgramFragmentStore(void *vp, RsProgramFragmentStore pfs) 322326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 323326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //LOGE("contextBindProgramFragmentStore %p", pfs); 324326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 325326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsi_ContextBindProgramFragmentStore(env->mContext, pfs); 326326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 327326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 328326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 329fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void contextBindProgramFragment(void *vp, RsProgramFragment pf) 330326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 331326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams //LOGE("contextBindProgramFragment %p", pf); 332326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC::Env * env = static_cast<ScriptC::Env *>(vp); 333326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsi_ContextBindProgramFragment(env->mContext, pf); 334326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 335326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 336326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 337326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 338326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsstatic rsc_FunctionTable scriptCPtrTable = { 339326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams loadVp, 340326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams loadF, 341326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams loadI32, 342326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams loadU32, 343326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams loadEnvVec4, 344326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams loadEnvMatrix, 345326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 346326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams storeF, 347326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams storeI32, 348326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams storeU32, 349326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams storeEnvVec4, 350326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams storeEnvMatrix, 351326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 352326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixLoadIdentity, 353326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixLoadFloat, 354326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixLoadMat, 355326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixLoadRotate, 356326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixLoadScale, 357326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixLoadTranslate, 358326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixLoadMultiply, 359326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixMultiply, 360326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixRotate, 361326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixScale, 362326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams matrixTranslate, 363326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 364326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams color, 365326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 366326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pfBindTexture, 367326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams pfBindSampler, 368326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 369326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams materialDiffuse, 370326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams materialSpecular, 371326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams lightPosition, 372326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams materialShininess, 373326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams uploadToTexture, 374326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams enable, 375326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams disable, 376326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 377326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams scriptRand, 378326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams contextBindProgramFragment, 3796678e9b2568ad041429a2477177133fe4932159fJason Sams contextBindProgramFragmentStore, 3806678e9b2568ad041429a2477177133fe4932159fJason Sams 3816678e9b2568ad041429a2477177133fe4932159fJason Sams 3826678e9b2568ad041429a2477177133fe4932159fJason Sams renderTriangleMesh, 3836678e9b2568ad041429a2477177133fe4932159fJason Sams renderTriangleMeshRange, 3846678e9b2568ad041429a2477177133fe4932159fJason Sams 3856678e9b2568ad041429a2477177133fe4932159fJason Sams drawTriangleArray, 3866678e9b2568ad041429a2477177133fe4932159fJason Sams drawRect 3876678e9b2568ad041429a2477177133fe4932159fJason Sams 388326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 389326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 390326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 391a44cb29164726cd9d812117819abdd7b60dfdd93Jason Samsbool ScriptC::run(Context *rsc, uint32_t launchID) 392326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 393326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Env e = {rsc, this}; 394a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 395a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mEnviroment.mFragmentStore.get()) { 396a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams rsc->setFragmentStore(mEnviroment.mFragmentStore.get()); 397a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 398a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mEnviroment.mFragment.get()) { 399a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams rsc->setFragment(mEnviroment.mFragment.get()); 400a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 4018ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (mEnviroment.mVertex.get()) { 4028ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams rsc->setVertex(mEnviroment.mVertex.get()); 4038ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 404a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 405efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams return mProgram.mScript(&e, &scriptCPtrTable, launchID) != 0; 406326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 407326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 408326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::ScriptCState() 409326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 410326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams clear(); 411326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 412326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 413326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::~ScriptCState() 414326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 4151ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich if (mAccScript) { 4161ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich accDeleteScript(mAccScript); 4171ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich } 418326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 419326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 420326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptCState::clear() 421326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 422efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mProgram, 0, sizeof(mProgram)); 423efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 424326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mConstantBufferTypes.clear(); 425efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 426efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams memset(&mEnviroment, 0, sizeof(mEnviroment)); 427efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[0] = 0; 428efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[1] = 0; 429efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[2] = 0; 430efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearColor[3] = 1; 431efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearDepth = 1; 432efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mClearStencil = 0; 433efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams mEnviroment.mIsRoot = false; 434efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 4351ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich mAccScript = NULL; 436efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 4371f52633fefd1862451e6a30209d590680d02beecJason Sams} 4381f52633fefd1862451e6a30209d590680d02beecJason Sams 439a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 440a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsvoid ScriptCState::runCompiler(Context *rsc) 4411f52633fefd1862451e6a30209d590680d02beecJason Sams{ 4421f52633fefd1862451e6a30209d590680d02beecJason Sams mAccScript = accCreateScript(); 443a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams String8 tmp; 444a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 445a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams rsc->appendNameDefines(&tmp); 4461f52633fefd1862451e6a30209d590680d02beecJason Sams 447a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams const char* scriptSource[] = {tmp.string(), mProgram.mScriptText}; 448a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ; 449a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength); 4501f52633fefd1862451e6a30209d590680d02beecJason Sams accCompileScript(mAccScript); 451efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript); 4521030893d9b99b72468034da13df025bda479bb97Jason Sams rsAssert(mProgram.mScript); 4531030893d9b99b72468034da13df025bda479bb97Jason Sams 4548ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragment.set(rsc->getDefaultProgramFragment()); 4558ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.set(rsc->getDefaultProgramVertex()); 4568ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragmentStore.set(rsc->getDefaultProgramFragmentStore()); 457a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 4581030893d9b99b72468034da13df025bda479bb97Jason Sams if (mProgram.mScript) { 4591030893d9b99b72468034da13df025bda479bb97Jason Sams const static int pragmaMax = 16; 4601030893d9b99b72468034da13df025bda479bb97Jason Sams ACCsizei pragmaCount; 4611030893d9b99b72468034da13df025bda479bb97Jason Sams ACCchar * str[pragmaMax]; 4621030893d9b99b72468034da13df025bda479bb97Jason Sams accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]); 4631030893d9b99b72468034da13df025bda479bb97Jason Sams 4641030893d9b99b72468034da13df025bda479bb97Jason Sams for (int ct=0; ct < pragmaCount; ct+=2) { 4651030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("pragma %i %s %s", ct, str[ct], str[ct+1]); 4661030893d9b99b72468034da13df025bda479bb97Jason Sams 4671030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "version")) { 4681030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 4691030893d9b99b72468034da13df025bda479bb97Jason Sams 4701030893d9b99b72468034da13df025bda479bb97Jason Sams } 4711030893d9b99b72468034da13df025bda479bb97Jason Sams 4721030893d9b99b72468034da13df025bda479bb97Jason Sams 4731030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateVertex")) { 4748ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 4758ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 4768ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 4778ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 4788ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.clear(); 4798ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 4808ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 4818ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams ProgramVertex * pv = (ProgramVertex *)rsc->lookupName(str[ct+1]); 4828ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (pv != NULL) { 4838ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mVertex.set(pv); 4848ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 4858ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 4861030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateVertex", str[ct+1]); 4871030893d9b99b72468034da13df025bda479bb97Jason Sams } 4881030893d9b99b72468034da13df025bda479bb97Jason Sams 4891030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateRaster")) { 4901030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateRaster", str[ct+1]); 4911030893d9b99b72468034da13df025bda479bb97Jason Sams } 4921030893d9b99b72468034da13df025bda479bb97Jason Sams 4931030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragment")) { 4948ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 4958ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 4968ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 4978ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 4988ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragment.clear(); 4998ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 5008ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 5018ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams ProgramFragment * pf = (ProgramFragment *)rsc->lookupName(str[ct+1]); 502a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pf != NULL) { 503a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragment.set(pf); 5041030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 5051030893d9b99b72468034da13df025bda479bb97Jason Sams } 5061030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragment", str[ct+1]); 5071030893d9b99b72468034da13df025bda479bb97Jason Sams } 5081030893d9b99b72468034da13df025bda479bb97Jason Sams 5091030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragmentStore")) { 5108ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "default")) { 5118ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 5128ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 5138ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams if (!strcmp(str[ct+1], "parent")) { 5148ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams mEnviroment.mFragmentStore.clear(); 5158ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams continue; 5168ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams } 517a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ProgramFragmentStore * pfs = 518a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams (ProgramFragmentStore *)rsc->lookupName(str[ct+1]); 519a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pfs != NULL) { 520a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragmentStore.set(pfs); 5211030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 5221030893d9b99b72468034da13df025bda479bb97Jason Sams } 5231030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]); 5241030893d9b99b72468034da13df025bda479bb97Jason Sams } 5251030893d9b99b72468034da13df025bda479bb97Jason Sams 5261030893d9b99b72468034da13df025bda479bb97Jason Sams } 5271030893d9b99b72468034da13df025bda479bb97Jason Sams 5281030893d9b99b72468034da13df025bda479bb97Jason Sams 5291030893d9b99b72468034da13df025bda479bb97Jason Sams } else { 5301030893d9b99b72468034da13df025bda479bb97Jason Sams // Deal with an error. 5311030893d9b99b72468034da13df025bda479bb97Jason Sams } 5321030893d9b99b72468034da13df025bda479bb97Jason Sams 533326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 534326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 535326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 536326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 537326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 538326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc) 539326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 540326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 541326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->clear(); 542326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 543326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 544326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a) 545326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 546326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 547efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[0] = r; 548efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[1] = g; 549efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[2] = b; 550efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[3] = a; 551326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 552326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 553326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearDepth(Context * rsc, float v) 554326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 555326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 556efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearDepth = v; 557326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 558326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 559326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v) 560326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 561326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 562efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearStencil = v; 563326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 564326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 565326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCAddType(Context * rsc, RsType vt) 566326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 567326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 568326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->mConstantBufferTypes.add(static_cast<const Type *>(vt)); 569326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 570326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 571efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Samsvoid rsi_ScriptCSetScript(Context * rsc, void *vp) 572326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 573326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 574efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScript = reinterpret_cast<rsc_RunScript>(vp); 575326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 576326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 577326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetRoot(Context * rsc, bool isRoot) 578326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 579326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 580efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mIsRoot = isRoot; 581326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 582326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 5831f52633fefd1862451e6a30209d590680d02beecJason Samsvoid rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) 5841f52633fefd1862451e6a30209d590680d02beecJason Sams{ 5851f52633fefd1862451e6a30209d590680d02beecJason Sams ScriptCState *ss = &rsc->mScriptC; 586efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptText = text; 587efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptTextLength = len; 5881f52633fefd1862451e6a30209d590680d02beecJason Sams} 5891f52633fefd1862451e6a30209d590680d02beecJason Sams 5901f52633fefd1862451e6a30209d590680d02beecJason Sams 591326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc) 592326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 593326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 594326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 595a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ss->runCompiler(rsc); 5961f52633fefd1862451e6a30209d590680d02beecJason Sams 597326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC *s = new ScriptC(); 598efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->incRef(); 5991ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich s->mAccScript = ss->mAccScript; 6001ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich ss->mAccScript = NULL; 601efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mEnviroment = ss->mEnviroment; 602efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mProgram = ss->mProgram; 603efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->clear(); 6041030893d9b99b72468034da13df025bda479bb97Jason Sams 605326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return s; 606326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 607326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 608326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 609326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 610326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 611326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 612