1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsContext.h" 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android::renderscript; 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 22a9e7a05b84470257637c97d65f6562aa832c66efJason SamsScript::Script(Context *rsc) : ObjectBase(rsc) 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 2461f08d6fa7c7657e9fbcd17e9a1c5b9114bb3844Jason Sams mAllocFile = __FILE__; 2561f08d6fa7c7657e9fbcd17e9a1c5b9114bb3844Jason Sams mAllocLine = __LINE__; 26928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams memset(&mEnviroment, 0, sizeof(mEnviroment)); 27928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams mEnviroment.mClearColor[0] = 0; 28928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams mEnviroment.mClearColor[1] = 0; 29928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams mEnviroment.mClearColor[2] = 0; 30928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams mEnviroment.mClearColor[3] = 1; 31928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams mEnviroment.mClearDepth = 1; 32be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams mEnviroment.mClearStencil = 0; 33be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams mEnviroment.mIsRoot = false; 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 36d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsScript::~Script() 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 40d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsvoid rsi_ScriptBindAllocation(Context * rsc, RsScript vs, RsAllocation va, uint32_t slot) 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Script *s = static_cast<Script *>(vs); 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams s->mSlots[slot].set(static_cast<Allocation *>(va)); 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 5022534176fb5c1257130ef4ee589739ca42766a32Jason Samsvoid rsi_ScriptSetClearColor(Context * rsc, RsScript vs, float r, float g, float b, float a) 5122534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 5222534176fb5c1257130ef4ee589739ca42766a32Jason Sams Script *s = static_cast<Script *>(vs); 5322534176fb5c1257130ef4ee589739ca42766a32Jason Sams s->mEnviroment.mClearColor[0] = r; 5422534176fb5c1257130ef4ee589739ca42766a32Jason Sams s->mEnviroment.mClearColor[1] = g; 5522534176fb5c1257130ef4ee589739ca42766a32Jason Sams s->mEnviroment.mClearColor[2] = b; 5622534176fb5c1257130ef4ee589739ca42766a32Jason Sams s->mEnviroment.mClearColor[3] = a; 5722534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 5822534176fb5c1257130ef4ee589739ca42766a32Jason Sams 5922534176fb5c1257130ef4ee589739ca42766a32Jason Samsvoid rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, uint32_t length) 6022534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 6122534176fb5c1257130ef4ee589739ca42766a32Jason Sams Script *s = static_cast<Script *>(vs); 6222534176fb5c1257130ef4ee589739ca42766a32Jason Sams s->mEnviroment.mTimeZone = timeZone; 6322534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 6422534176fb5c1257130ef4ee589739ca42766a32Jason Sams 6522534176fb5c1257130ef4ee589739ca42766a32Jason Samsvoid rsi_ScriptSetClearDepth(Context * rsc, RsScript vs, float v) 6622534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 6722534176fb5c1257130ef4ee589739ca42766a32Jason Sams Script *s = static_cast<Script *>(vs); 6822534176fb5c1257130ef4ee589739ca42766a32Jason Sams s->mEnviroment.mClearDepth = v; 6922534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 7022534176fb5c1257130ef4ee589739ca42766a32Jason Sams 7122534176fb5c1257130ef4ee589739ca42766a32Jason Samsvoid rsi_ScriptSetClearStencil(Context * rsc, RsScript vs, uint32_t v) 7222534176fb5c1257130ef4ee589739ca42766a32Jason Sams{ 7322534176fb5c1257130ef4ee589739ca42766a32Jason Sams Script *s = static_cast<Script *>(vs); 7422534176fb5c1257130ef4ee589739ca42766a32Jason Sams s->mEnviroment.mClearStencil = v; 7522534176fb5c1257130ef4ee589739ca42766a32Jason Sams} 76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 77334ea0c98f051b5a6b85bc616c93304651854298Jason Samsvoid rsi_ScriptSetType(Context * rsc, RsType vt, uint32_t slot, bool writable, const char *name) 78fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams{ 79fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams ScriptCState *ss = &rsc->mScriptC; 80fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams const Type *t = static_cast<const Type *>(vt); 81fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams ss->mConstantBufferTypes[slot].set(t); 82334ea0c98f051b5a6b85bc616c93304651854298Jason Sams ss->mSlotWritable[slot] = writable; 83fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams if (name) { 84fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams ss->mSlotNames[slot].setTo(name); 85fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams } else { 86fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams ss->mSlotNames[slot].setTo(""); 87fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams } 88fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams} 89fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 90be2e84193f709419634de4cc3ba0e67acf6976f3Jason Samsvoid rsi_ScriptSetInvoke(Context *rsc, const char *name, uint32_t slot) 91be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 92be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams ScriptCState *ss = &rsc->mScriptC; 93be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams ss->mInvokableNames[slot] = name; 94be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 95be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 96be2e84193f709419634de4cc3ba0e67acf6976f3Jason Samsvoid rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot) 97be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{ 98be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams Script *s = static_cast<Script *>(vs); 99156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams if (s->mEnviroment.mInvokables[slot] == NULL) { 100156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams rsc->setError(RS_ERROR_BAD_SCRIPT, "Calling invoke on bad script"); 101156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams return; 102156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams } 103e60446b9c1a0f4f48372a36de5b01a2ddb8121e3Jason Sams s->setupScript(); 104be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams s->mEnviroment.mInvokables[slot](); 105be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams} 106be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 107be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 108fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Samsvoid rsi_ScriptSetRoot(Context * rsc, bool isRoot) 109fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams{ 110fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams ScriptCState *ss = &rsc->mScriptC; 111be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams ss->mScript->mEnviroment.mIsRoot = isRoot; 112fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams} 113fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 114fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams 115d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 116d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 117d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 118