rsScript.cpp revision 6d0a0740530d57e2a5759df994352600946ff47d
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
19326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
20326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
22e514b45de8561fbc6ef6770845102ca10b0a69d7Jason SamsScript::Script(Context *rsc) : ObjectBase(rsc)
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
24f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocFile = __FILE__;
25f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocLine = __LINE__;
26928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams    memset(&mEnviroment, 0, sizeof(mEnviroment));
27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
29326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScript::~Script()
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
33be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsvoid Script::setVar(uint32_t slot, const void *val, uint32_t len)
34be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{
35be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    int32_t *destPtr = ((int32_t **)mEnviroment.mFieldAddress)[slot];
36be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    if (destPtr) {
37be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams        //LOGE("setVar f1  %f", ((const float *)destPtr)[0]);
38be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams        //LOGE("setVar %p %i", destPtr, len);
39be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams        memcpy(destPtr, val, len);
40be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams        //LOGE("setVar f2  %f", ((const float *)destPtr)[0]);
41be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    } else {
42be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams        LOGE("Calling setVar on slot = %i which is null", slot);
43be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    }
44be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams}
45be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptBindAllocation(Context * rsc, RsScript vs, RsAllocation va, uint32_t slot)
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Script *s = static_cast<Script *>(vs);
53be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    Allocation *a = static_cast<Allocation *>(va);
54be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    s->mSlots[slot].set(a);
55be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    //LOGE("rsi_ScriptBindAllocation %i  %p  %p", slot, a, a->getPtr());
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
58d34b725ac1752f5a234c7643a0b65245591ea1ccJason Samsvoid rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, uint32_t length)
59d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams{
60d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams    Script *s = static_cast<Script *>(vs);
61d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams    s->mEnviroment.mTimeZone = timeZone;
62d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams}
63d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams
6490b36a88cf0cc549b296ac15a249ea7786c6de9eJason Samsvoid rsi_ScriptSetType(Context * rsc, RsType vt, uint32_t slot, bool writable, const char *name)
65fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams{
66fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    ScriptCState *ss = &rsc->mScriptC;
67fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    const Type *t = static_cast<const Type *>(vt);
68fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams    ss->mConstantBufferTypes[slot].set(t);
6990b36a88cf0cc549b296ac15a249ea7786c6de9eJason Sams    ss->mSlotWritable[slot] = writable;
70be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    LOGE("rsi_ScriptSetType");
71fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams}
72fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams
738c6bc6930d4996b897de8e5113da4a4efae2310cJason Samsvoid rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot)
748c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams{
758c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams    Script *s = static_cast<Script *>(vs);
7622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams    s->Invoke(rsc, slot, NULL, 0);
778c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams}
788c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams
798c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams
80be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsvoid rsi_ScriptInvokeData(Context *rsc, RsScript vs, uint32_t slot, void *data)
81be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{
82be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    Script *s = static_cast<Script *>(vs);
8322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams    s->Invoke(rsc, slot, NULL, 0);
84be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams}
85be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams
86be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsvoid rsi_ScriptInvokeV(Context *rsc, RsScript vs, uint32_t slot, const void *data, uint32_t len)
87be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{
88be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    Script *s = static_cast<Script *>(vs);
8922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams    s->Invoke(rsc, slot, data, len);
90be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams}
91be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams
92be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsvoid rsi_ScriptSetVarI(Context *rsc, RsScript vs, uint32_t slot, int value)
93be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{
94be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    Script *s = static_cast<Script *>(vs);
95be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    s->setVar(slot, &value, sizeof(value));
96be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams}
97be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams
98be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsvoid rsi_ScriptSetVarF(Context *rsc, RsScript vs, uint32_t slot, float value)
99be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{
100be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    Script *s = static_cast<Script *>(vs);
101be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    s->setVar(slot, &value, sizeof(value));
102be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams}
103be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams
1046d0a0740530d57e2a5759df994352600946ff47dStephen Hinesvoid rsi_ScriptSetVarD(Context *rsc, RsScript vs, uint32_t slot, double value)
1056d0a0740530d57e2a5759df994352600946ff47dStephen Hines{
1066d0a0740530d57e2a5759df994352600946ff47dStephen Hines    Script *s = static_cast<Script *>(vs);
1076d0a0740530d57e2a5759df994352600946ff47dStephen Hines    s->setVar(slot, &value, sizeof(value));
1086d0a0740530d57e2a5759df994352600946ff47dStephen Hines}
1096d0a0740530d57e2a5759df994352600946ff47dStephen Hines
110be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Samsvoid rsi_ScriptSetVarV(Context *rsc, RsScript vs, uint32_t slot, const void *data, uint32_t len)
111be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams{
112be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    const float *fp = (const float *)data;
113be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    Script *s = static_cast<Script *>(vs);
114be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams    s->setVar(slot, data, len);
115fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams}
116fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams
117fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
121