rsScript.cpp revision a2cf755a28a1e7ffff2955df656d714f40e4d715
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)); 27928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mEnviroment.mClearColor[0] = 0; 28928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mEnviroment.mClearColor[1] = 0; 29928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mEnviroment.mClearColor[2] = 0; 30928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mEnviroment.mClearColor[3] = 1; 31928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams mEnviroment.mClearDepth = 1; 328c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams mEnviroment.mClearStencil = 0; 338c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams mEnviroment.mIsRoot = false; 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 36326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScript::~Script() 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptBindAllocation(Context * rsc, RsScript vs, RsAllocation va, uint32_t slot) 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Script *s = static_cast<Script *>(vs); 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams s->mSlots[slot].set(static_cast<Allocation *>(va)); 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 50d34b725ac1752f5a234c7643a0b65245591ea1ccJason Samsvoid rsi_ScriptSetClearColor(Context * rsc, RsScript vs, float r, float g, float b, float a) 51d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams{ 52d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams Script *s = static_cast<Script *>(vs); 53d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams s->mEnviroment.mClearColor[0] = r; 54d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams s->mEnviroment.mClearColor[1] = g; 55d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams s->mEnviroment.mClearColor[2] = b; 56d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams s->mEnviroment.mClearColor[3] = a; 57d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams} 58d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams 59d34b725ac1752f5a234c7643a0b65245591ea1ccJason Samsvoid rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, uint32_t length) 60d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams{ 61d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams Script *s = static_cast<Script *>(vs); 62d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams s->mEnviroment.mTimeZone = timeZone; 63d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams} 64d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams 65d34b725ac1752f5a234c7643a0b65245591ea1ccJason Samsvoid rsi_ScriptSetClearDepth(Context * rsc, RsScript vs, float v) 66d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams{ 67d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams Script *s = static_cast<Script *>(vs); 68d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams s->mEnviroment.mClearDepth = v; 69d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams} 70d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams 71d34b725ac1752f5a234c7643a0b65245591ea1ccJason Samsvoid rsi_ScriptSetClearStencil(Context * rsc, RsScript vs, uint32_t v) 72d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams{ 73d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams Script *s = static_cast<Script *>(vs); 74d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams s->mEnviroment.mClearStencil = v; 75d34b725ac1752f5a234c7643a0b65245591ea1ccJason Sams} 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 7790b36a88cf0cc549b296ac15a249ea7786c6de9eJason Samsvoid rsi_ScriptSetType(Context * rsc, RsType vt, uint32_t slot, bool writable, const char *name) 78fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams{ 79fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams ScriptCState *ss = &rsc->mScriptC; 80fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams const Type *t = static_cast<const Type *>(vt); 81fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams ss->mConstantBufferTypes[slot].set(t); 8290b36a88cf0cc549b296ac15a249ea7786c6de9eJason Sams ss->mSlotWritable[slot] = writable; 83fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams if (name) { 84fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams ss->mSlotNames[slot].setTo(name); 85fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams } else { 86fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams ss->mSlotNames[slot].setTo(""); 87fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams } 88fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams} 89fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams 908c6bc6930d4996b897de8e5113da4a4efae2310cJason Samsvoid rsi_ScriptSetInvoke(Context *rsc, const char *name, uint32_t slot) 918c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams{ 928c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams ScriptCState *ss = &rsc->mScriptC; 938c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams ss->mInvokableNames[slot] = name; 948c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams} 958c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams 968c6bc6930d4996b897de8e5113da4a4efae2310cJason Samsvoid rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot) 978c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams{ 988c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams Script *s = static_cast<Script *>(vs); 99a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams if (s->mEnviroment.mInvokables[slot] == NULL) { 100a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams rsc->setError(RS_ERROR_BAD_SCRIPT, "Calling invoke on bad script"); 101a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams return; 102a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams } 103ada7f272890d8791bc518c95989ad7d13050834dJason Sams s->setupScript(); 1048c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams s->mEnviroment.mInvokables[slot](); 1058c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams} 1068c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams 1078c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams 108fa51719e6c1bd17b3f347477b4827face9ab647eJason Samsvoid rsi_ScriptSetRoot(Context * rsc, bool isRoot) 109fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams{ 110fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams ScriptCState *ss = &rsc->mScriptC; 1118c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams ss->mScript->mEnviroment.mIsRoot = isRoot; 112fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams} 113fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams 114fa51719e6c1bd17b3f347477b4827face9ab647eJason Sams 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 118