rsScriptC.cpp revision a4a54e42fc710a62b47cbcb9d64c34a190429d9e
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 } 401a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 402efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams return mProgram.mScript(&e, &scriptCPtrTable, launchID) != 0; 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 mEnviroment.mIsOrtho = true; 432efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 4331ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich mAccScript = NULL; 434efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams 4351f52633fefd1862451e6a30209d590680d02beecJason Sams} 4361f52633fefd1862451e6a30209d590680d02beecJason Sams 437a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 438a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsvoid ScriptCState::runCompiler(Context *rsc) 4391f52633fefd1862451e6a30209d590680d02beecJason Sams{ 4401f52633fefd1862451e6a30209d590680d02beecJason Sams mAccScript = accCreateScript(); 441a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams String8 tmp; 442a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 443a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams rsc->appendNameDefines(&tmp); 4441f52633fefd1862451e6a30209d590680d02beecJason Sams 445a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams const char* scriptSource[] = {tmp.string(), mProgram.mScriptText}; 446a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ; 447a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength); 4481f52633fefd1862451e6a30209d590680d02beecJason Sams accCompileScript(mAccScript); 449efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript); 4501030893d9b99b72468034da13df025bda479bb97Jason Sams rsAssert(mProgram.mScript); 4511030893d9b99b72468034da13df025bda479bb97Jason Sams 452a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams 4531030893d9b99b72468034da13df025bda479bb97Jason Sams if (mProgram.mScript) { 4541030893d9b99b72468034da13df025bda479bb97Jason Sams const static int pragmaMax = 16; 4551030893d9b99b72468034da13df025bda479bb97Jason Sams ACCsizei pragmaCount; 4561030893d9b99b72468034da13df025bda479bb97Jason Sams ACCchar * str[pragmaMax]; 4571030893d9b99b72468034da13df025bda479bb97Jason Sams accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]); 4581030893d9b99b72468034da13df025bda479bb97Jason Sams 4591030893d9b99b72468034da13df025bda479bb97Jason Sams for (int ct=0; ct < pragmaCount; ct+=2) { 4601030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("pragma %i %s %s", ct, str[ct], str[ct+1]); 4611030893d9b99b72468034da13df025bda479bb97Jason Sams 4621030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "version")) { 4631030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 4641030893d9b99b72468034da13df025bda479bb97Jason Sams 4651030893d9b99b72468034da13df025bda479bb97Jason Sams } 4661030893d9b99b72468034da13df025bda479bb97Jason Sams 4671030893d9b99b72468034da13df025bda479bb97Jason Sams 4681030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateVertex")) { 4691030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateVertex", str[ct+1]); 4701030893d9b99b72468034da13df025bda479bb97Jason Sams } 4711030893d9b99b72468034da13df025bda479bb97Jason Sams 4721030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateRaster")) { 4731030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateRaster", str[ct+1]); 4741030893d9b99b72468034da13df025bda479bb97Jason Sams } 4751030893d9b99b72468034da13df025bda479bb97Jason Sams 4761030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragment")) { 477a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ProgramFragment * pf = 478a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams (ProgramFragment *)rsc->lookupName(str[ct+1]); 479a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pf != NULL) { 480a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragment.set(pf); 4811030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 4821030893d9b99b72468034da13df025bda479bb97Jason Sams } 4831030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragment", str[ct+1]); 4841030893d9b99b72468034da13df025bda479bb97Jason Sams } 4851030893d9b99b72468034da13df025bda479bb97Jason Sams 4861030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct], "stateFragmentStore")) { 487a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ProgramFragmentStore * pfs = 488a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams (ProgramFragmentStore *)rsc->lookupName(str[ct+1]); 489a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (pfs != NULL) { 490a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams mEnviroment.mFragmentStore.set(pfs); 4911030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 4921030893d9b99b72468034da13df025bda479bb97Jason Sams } 493a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 4941030893d9b99b72468034da13df025bda479bb97Jason Sams if (!strcmp(str[ct+1], "parent")) { 495a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams //mEnviroment.mStateFragmentStore = 496a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams //Script::Enviroment_t::FRAGMENT_STORE_PARENT; 4971030893d9b99b72468034da13df025bda479bb97Jason Sams continue; 4981030893d9b99b72468034da13df025bda479bb97Jason Sams } 4991030893d9b99b72468034da13df025bda479bb97Jason Sams LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]); 5001030893d9b99b72468034da13df025bda479bb97Jason Sams } 5011030893d9b99b72468034da13df025bda479bb97Jason Sams 5021030893d9b99b72468034da13df025bda479bb97Jason Sams } 5031030893d9b99b72468034da13df025bda479bb97Jason Sams 5041030893d9b99b72468034da13df025bda479bb97Jason Sams 5051030893d9b99b72468034da13df025bda479bb97Jason Sams } else { 5061030893d9b99b72468034da13df025bda479bb97Jason Sams // Deal with an error. 5071030893d9b99b72468034da13df025bda479bb97Jason Sams } 5081030893d9b99b72468034da13df025bda479bb97Jason Sams 509326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 510326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 511326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 512326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 513326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 514326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc) 515326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 516326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 517326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->clear(); 518326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 519326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 520326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a) 521326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 522326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 523efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[0] = r; 524efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[1] = g; 525efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[2] = b; 526efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearColor[3] = a; 527326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 528326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 529326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearDepth(Context * rsc, float v) 530326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 531326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 532efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearDepth = v; 533326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 534326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 535326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v) 536326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 537326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 538efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mClearStencil = v; 539326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 540326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 541326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCAddType(Context * rsc, RsType vt) 542326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 543326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 544326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ss->mConstantBufferTypes.add(static_cast<const Type *>(vt)); 545326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 546326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 547efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Samsvoid rsi_ScriptCSetScript(Context * rsc, void *vp) 548326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 549326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 550efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScript = reinterpret_cast<rsc_RunScript>(vp); 551326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 552326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 553326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetRoot(Context * rsc, bool isRoot) 554326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 555326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 556efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mIsRoot = isRoot; 557326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 558326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 559326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho) 560326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 561326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 562efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mEnviroment.mIsOrtho = isOrtho; 563326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 564326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 5651f52633fefd1862451e6a30209d590680d02beecJason Samsvoid rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) 5661f52633fefd1862451e6a30209d590680d02beecJason Sams{ 5671f52633fefd1862451e6a30209d590680d02beecJason Sams ScriptCState *ss = &rsc->mScriptC; 568efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptText = text; 569efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->mProgram.mScriptTextLength = len; 5701f52633fefd1862451e6a30209d590680d02beecJason Sams} 5711f52633fefd1862451e6a30209d590680d02beecJason Sams 5721f52633fefd1862451e6a30209d590680d02beecJason Sams 573326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc) 574326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 575326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptCState *ss = &rsc->mScriptC; 576326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 577a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ss->runCompiler(rsc); 5781f52633fefd1862451e6a30209d590680d02beecJason Sams 579326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ScriptC *s = new ScriptC(); 580efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->incRef(); 5811ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich s->mAccScript = ss->mAccScript; 5821ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich ss->mAccScript = NULL; 583efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mEnviroment = ss->mEnviroment; 584efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams s->mProgram = ss->mProgram; 585efb8de1ef851c9c2a042ad06f64e33bb8b366041Jason Sams ss->clear(); 5861030893d9b99b72468034da13df025bda479bb97Jason Sams 587326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return s; 588326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 589326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 590326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 591326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 592326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 593326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 594