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