10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009-2012 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsContext.h" 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <time.h> 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android; 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android::renderscript; 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesScript::Script(Context *rsc) : ObjectBase(rsc) { 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines memset(&mEnviroment, 0, sizeof(mEnviroment)); 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines memset(&mHal, 0, sizeof(mHal)); 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mSlots = NULL; 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mTypes = NULL; 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mInitialized = false; 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesScript::~Script() { 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (mSlots) { 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines delete [] mSlots; 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mSlots = NULL; 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (mTypes) { 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines delete [] mTypes; 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mTypes = NULL; 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Script::setSlot(uint32_t slot, Allocation *a) { 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //ALOGE("setSlot %i %p", slot, a); 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (slot >= mHal.info.exportedVariableCount) { 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ALOGE("Script::setSlot unable to set allocation, invalid slot index"); 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mSlots[slot].set(a); 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mRSC->mHal.funcs.script.setGlobalBind(mRSC, this, slot, a); 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Script::setVar(uint32_t slot, const void *val, size_t len) { 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //ALOGE("setVar %i %p %i", slot, val, len); 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (slot >= mHal.info.exportedVariableCount) { 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ALOGE("Script::setVar unable to set allocation, invalid slot index"); 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mRSC->mHal.funcs.script.setGlobalVar(mRSC, this, slot, (void *)val, len); 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Script::setVar(uint32_t slot, const void *val, size_t len, Element *e, 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const size_t *dims, size_t dimLen) { 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (slot >= mHal.info.exportedVariableCount) { 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ALOGE("Script::setVar unable to set allocation, invalid slot index"); 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mRSC->mHal.funcs.script.setGlobalVarWithElemDims(mRSC, this, slot, 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines (void *)val, len, e, dims, dimLen); 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Script::setVarObj(uint32_t slot, ObjectBase *val) { 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //ALOGE("setVarObj %i %p", slot, val); 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (slot >= mHal.info.exportedVariableCount) { 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ALOGE("Script::setVarObj unable to set allocation, invalid slot index"); 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines //ALOGE("setvarobj %i %p", slot, val); 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mRSC->mHal.funcs.script.setGlobalObj(mRSC, this, slot, val); 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool Script::freeChildren() { 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines incSysRef(); 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mRSC->mHal.funcs.script.invokeFreeChildren(mRSC, this); 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return decSysRef(); 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsScriptKernelID::ScriptKernelID(Context *rsc, Script *s, int slot, int sig) 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams : ObjectBase(rsc) { 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mScript = s; 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mSlot = slot; 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mHasKernelInput = (sig & 1) != 0; 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mHasKernelOutput = (sig & 2) != 0; 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsScriptKernelID::~ScriptKernelID() { 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsvoid ScriptKernelID::serialize(Context *rsc, OStream *stream) const { 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsRsA3DClassID ScriptKernelID::getClassId() const { 107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return RS_A3D_CLASS_ID_SCRIPT_KERNEL_ID; 108ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 109ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 110ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsScriptFieldID::ScriptFieldID(Context *rsc, Script *s, int slot) : ObjectBase(rsc) { 111ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mScript = s; 112ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mSlot = slot; 113ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 114ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 115ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsScriptFieldID::~ScriptFieldID() { 116ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 117ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 118ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 119ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsvoid ScriptFieldID::serialize(Context *rsc, OStream *stream) const { 120ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 121ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 122ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 123ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsRsA3DClassID ScriptFieldID::getClassId() const { 124ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return RS_A3D_CLASS_ID_SCRIPT_FIELD_ID; 125ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 126ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 127ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 131ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsRsScriptKernelID rsi_ScriptKernelIDCreate(Context *rsc, RsScript vs, int slot, int sig) { 132ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return new ScriptKernelID(rsc, (Script *)vs, slot, sig); 133ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 134ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 135ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason SamsRsScriptFieldID rsi_ScriptFieldIDCreate(Context *rsc, RsScript vs, int slot) { 136ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return new ScriptFieldID(rsc, (Script *)vs, slot); 137ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 138ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptBindAllocation(Context * rsc, RsScript vs, RsAllocation va, uint32_t slot) { 1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation *a = static_cast<Allocation *>(va); 1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setSlot(slot, a); 1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, size_t length) { 1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // We unfortunately need to make a new copy of the string, since it is 1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // not NULL-terminated. We then use setenv(), which properly handles 1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines // freeing/duplicating the actual string for the environment. 1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char *tz = (char *) malloc(length + 1); 1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (!tz) { 1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ALOGE("Couldn't allocate memory for timezone buffer"); 1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines strncpy(tz, timeZone, length); 1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines tz[length] = '\0'; 1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines if (setenv("TZ", tz, 1) == 0) { 1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines tzset(); 1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } else { 1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ALOGE("Error setting timezone"); 1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines free(tz); 1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptForEach(Context *rsc, RsScript vs, uint32_t slot, 1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines RsAllocation vain, RsAllocation vaout, 1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *params, size_t paramLen) { 1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->runForEach(rsc, slot, 1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines static_cast<const Allocation *>(vain), static_cast<Allocation *>(vaout), 1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines params, paramLen); 1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot) { 1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->Invoke(rsc, slot, NULL, 0); 1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptInvokeData(Context *rsc, RsScript vs, uint32_t slot, void *data) { 1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->Invoke(rsc, slot, NULL, 0); 1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptInvokeV(Context *rsc, RsScript vs, uint32_t slot, const void *data, size_t len) { 1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->Invoke(rsc, slot, data, len); 1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetVarI(Context *rsc, RsScript vs, uint32_t slot, int value) { 1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setVar(slot, &value, sizeof(value)); 1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetVarObj(Context *rsc, RsScript vs, uint32_t slot, RsObjectBase value) { 1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ObjectBase *o = static_cast<ObjectBase *>(value); 1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setVarObj(slot, o); 1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetVarJ(Context *rsc, RsScript vs, uint32_t slot, long long value) { 2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setVar(slot, &value, sizeof(value)); 2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetVarF(Context *rsc, RsScript vs, uint32_t slot, float value) { 2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setVar(slot, &value, sizeof(value)); 2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetVarD(Context *rsc, RsScript vs, uint32_t slot, double value) { 2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setVar(slot, &value, sizeof(value)); 2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetVarV(Context *rsc, RsScript vs, uint32_t slot, const void *data, size_t len) { 2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setVar(slot, data, len); 2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_ScriptSetVarVE(Context *rsc, RsScript vs, uint32_t slot, 2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *data, size_t len, RsElement ve, 2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const size_t *dims, size_t dimLen) { 2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script *s = static_cast<Script *>(vs); 2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Element *e = static_cast<Element *>(ve); 2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines s->setVar(slot, data, len, e, dims, dimLen); 2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 232