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