rsScriptC_Lib.cpp revision 711e7316c7bc274dd0ee9e4f3f043a85c1a706a8
1e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams/* 2e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * Copyright (C) 2009 The Android Open Source Project 3e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * 4e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * you may not use this file except in compliance with the License. 6e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * You may obtain a copy of the License at 7e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * 8e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * 10e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * Unless required by applicable law or agreed to in writing, software 11e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * See the License for the specific language governing permissions and 14e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams * limitations under the License. 15e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams */ 16e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 17e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#include "rsContext.h" 18e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#include "rsScriptC.h" 19e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#include "rsMatrix.h" 20e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 219c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato#include "utils/Timers.h" 22e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 2398e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy#include <time.h> 2498e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 25e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsusing namespace android; 26e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsusing namespace android::renderscript; 27e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 28e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams#define GET_TLS() Context::ScriptTLSStruct * tls = \ 29e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \ 30e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams Context * rsc = tls->mContext; \ 31e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ScriptC * sc = (ScriptC *) tls->mScript 32e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 33a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 34e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 35e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// Math routines 36e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 37e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 38afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_sinf_fast(float x) { 392275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float A = 1.0f / (2.0f * M_PI); 402275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float B = -16.0f; 412275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float C = 8.0f; 42a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 432275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // scale angle for easy argument reduction 442275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x *= A; 45a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 462275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy if (fabsf(x) >= 0.5f) { 472275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // argument reduction 482275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x = x - ceilf(x + 0.5f) + 1.0f; 492275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy } 50a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 512275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float y = B * x * fabsf(x) + C * x; 522275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy return 0.2215f * (y * fabsf(y) - y) + y; 532275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy} 542275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 55afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_cosf_fast(float x) { 562275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x += float(M_PI / 2); 572275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 582275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float A = 1.0f / (2.0f * M_PI); 592275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float B = -16.0f; 602275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float C = 8.0f; 61a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 622275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // scale angle for easy argument reduction 632275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x *= A; 64a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 652275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy if (fabsf(x) >= 0.5f) { 662275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // argument reduction 672275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x = x - ceilf(x + 0.5f) + 1.0f; 682275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy } 69a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 702275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float y = B * x * fabsf(x) + C * x; 712275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy return 0.2215f * (y * fabsf(y) - y) + y; 722275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy} 732275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 74afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_randf(float max) { 75e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams float r = (float)rand(); 76366c9c85196675437a8dd74c1cf6b63ddbde3d6aJason Sams r *= max; 77366c9c85196675437a8dd74c1cf6b63ddbde3d6aJason Sams return r / RAND_MAX; 78e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 79e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 80afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_randf2(float min, float max) { 8139dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy float r = (float)rand(); 82366c9c85196675437a8dd74c1cf6b63ddbde3d6aJason Sams r = r * (max - min) + min; 83366c9c85196675437a8dd74c1cf6b63ddbde3d6aJason Sams return r / RAND_MAX; 8439dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 8539dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 86afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic int SC_randi(int max) { 8722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams return (int)SC_randf(max); 8822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 8922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 90afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic int SC_randi2(int min, int max) { 9122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams return (int)SC_randf2(min, max); 9222fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 9322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 94afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_frac(float v) { 95be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams int i = (int)floor(v); 96be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return fmin(v - i, 0x1.fffffep-1f); 97be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams} 98be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 9998e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy////////////////////////////////////////////////////////////////////////////// 10098e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy// Time routines 10198e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy////////////////////////////////////////////////////////////////////////////// 10298e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 103ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hinesstatic time_t SC_time(time_t *timer) { 10498e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy GET_TLS(); 105ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines return time(timer); 10639dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 10739dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 108ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hinesstatic tm* SC_localtime(tm *local, time_t *timer) { 10939dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy GET_TLS(); 110ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines if (!local) { 111ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines return NULL; 112ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines } 113e5ffb879ae535a899a486285a23bea05e912480fJason Sams 114ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines // The native localtime function is not thread-safe, so we 115ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines // have to apply locking for proper behavior in RenderScript. 116ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines pthread_mutex_lock(&rsc->gLibMutex); 117ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines tm *tmp = localtime(timer); 118ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines memcpy(local, tmp, sizeof(*tmp)); 119ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines pthread_mutex_unlock(&rsc->gLibMutex); 120ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines return local; 12139dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 12239dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 123afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic int64_t SC_uptimeMillis() { 12422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams return nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC)); 12522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 12622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 127afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic int64_t SC_uptimeNanos() { 1287349547db61d2d458b31c074b902d56d082e5d84Jason Sams return systemTime(SYSTEM_TIME_MONOTONIC); 12922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 13022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 131afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_getDt() { 1329c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato GET_TLS(); 133ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams int64_t l = sc->mEnviroment.mLastDtTime; 134ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams sc->mEnviroment.mLastDtTime = systemTime(SYSTEM_TIME_MONOTONIC); 135ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams return ((float)(sc->mEnviroment.mLastDtTime - l)) / 1.0e9; 136e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 137e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 138e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 139e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// 140e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 141e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 142afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_allocGetDimX(RsAllocation va) { 143be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 144605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 145605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams //LOGE("SC_allocGetDimX a=%p type=%p", a, a->getType()); 146be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimX(); 147e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 148e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 149afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_allocGetDimY(RsAllocation va) { 150be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 151605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 152be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimY(); 15348b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 15448b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 155afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_allocGetDimZ(RsAllocation va) { 156be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 157605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 158be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimZ(); 15948b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 16048b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 161afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_allocGetDimLOD(RsAllocation va) { 162be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 163605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 164be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimLOD(); 16548b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 16648b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 167afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_allocGetDimFaces(RsAllocation va) { 168be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams const Allocation *a = static_cast<const Allocation *>(va); 169605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 170be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a->getType()->getDimFaces(); 17148b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy} 17248b7edc13372dcb4537713e32beeb36bcd73a6d9Romain Guy 173afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic const void * SC_getElementAtX(RsAllocation va, uint32_t x) { 1747bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Allocation *a = static_cast<const Allocation *>(va); 175605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 1767bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Type *t = a->getType(); 177605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(t); 1787bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const uint8_t *p = (const uint8_t *)a->getPtr(); 1797bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return &p[t->getElementSizeBytes() * x]; 1807bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 1817bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 182afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic const void * SC_getElementAtXY(RsAllocation va, uint32_t x, uint32_t y) { 1837bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Allocation *a = static_cast<const Allocation *>(va); 184605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 1857bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Type *t = a->getType(); 186605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(t); 1877bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const uint8_t *p = (const uint8_t *)a->getPtr(); 1887bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return &p[t->getElementSizeBytes() * (x + y*t->getDimX())]; 1897bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 1907bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 191afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic const void * SC_getElementAtXYZ(RsAllocation va, uint32_t x, uint32_t y, uint32_t z) { 1927bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Allocation *a = static_cast<const Allocation *>(va); 193605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(a); 1947bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const Type *t = a->getType(); 195605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(t); 1967bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams const uint8_t *p = (const uint8_t *)a->getPtr(); 1977bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams return &p[t->getElementSizeBytes() * (x + y*t->getDimX())]; 1987bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 199be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 200c093685672e54657d87b953d44e514803889486cJason Samsstatic void SC_setObject(void **vdst, void * vsrc) { 201f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams //LOGE("SC_setObject %p,%p %p", vdst, *vdst, vsrc); 202f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams if (vsrc) { 203605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsrc); 204f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams static_cast<ObjectBase *>(vsrc)->incSysRef(); 205f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams } 206f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams if (vdst[0]) { 207605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vdst[0]); 208f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams static_cast<ObjectBase *>(vdst[0])->decSysRef(); 209f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams } 210c093685672e54657d87b953d44e514803889486cJason Sams *vdst = vsrc; 211f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams //LOGE("SC_setObject *"); 212c093685672e54657d87b953d44e514803889486cJason Sams} 213afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 214c093685672e54657d87b953d44e514803889486cJason Samsstatic void SC_clearObject(void **vdst) { 215f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams //LOGE("SC_clearObject %p,%p", vdst, *vdst); 216f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams if (vdst[0]) { 217605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vdst[0]); 218f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams static_cast<ObjectBase *>(vdst[0])->decSysRef(); 219f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams } 220c093685672e54657d87b953d44e514803889486cJason Sams *vdst = NULL; 221f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams //LOGE("SC_clearObject *"); 222c093685672e54657d87b953d44e514803889486cJason Sams} 223afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 224c093685672e54657d87b953d44e514803889486cJason Samsstatic bool SC_isObject(RsAllocation vsrc) { 225c093685672e54657d87b953d44e514803889486cJason Sams return vsrc != NULL; 226c093685672e54657d87b953d44e514803889486cJason Sams} 227c093685672e54657d87b953d44e514803889486cJason Sams 22822fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_debugF(const char *s, float f) { 229fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, 0x%08x", s, f, *((int *) (&f))); 230c9d43db4d216b01b13aebfdb31d5615909591b33Jason Sams} 2317dce6bc09126187534ab0297c66b30149643b162Jason Samsstatic void SC_debugFv2(const char *s, float f1, float f2) { 232fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s {%f, %f}", s, f1, f2); 233370ed1525dc570381edd8c67d92eb45701d5f767Romain Guy} 2347dce6bc09126187534ab0297c66b30149643b162Jason Samsstatic void SC_debugFv3(const char *s, float f1, float f2, float f3) { 235fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s {%f, %f, %f}", s, f1, f2, f3); 236c9d43db4d216b01b13aebfdb31d5615909591b33Jason Sams} 2377dce6bc09126187534ab0297c66b30149643b162Jason Samsstatic void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) { 238fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4); 23922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 240df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesstatic void SC_debugD(const char *s, double d) { 241fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d))); 242df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines} 2437dce6bc09126187534ab0297c66b30149643b162Jason Samsstatic void SC_debugFM4v4(const char *s, const float *f) { 244fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]); 245fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]); 246fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]); 247fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]); 2487dce6bc09126187534ab0297c66b30149643b162Jason Sams} 2497dce6bc09126187534ab0297c66b30149643b162Jason Samsstatic void SC_debugFM3v3(const char *s, const float *f) { 250fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]); 251fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, %f, %f", s, f[1], f[4], f[7]); 252fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, %f, %f}",s, f[2], f[5], f[8]); 2537dce6bc09126187534ab0297c66b30149643b162Jason Sams} 2547dce6bc09126187534ab0297c66b30149643b162Jason Samsstatic void SC_debugFM2v2(const char *s, const float *f) { 255fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s {%f, %f", s, f[0], f[2]); 256fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %f, %f}",s, f[1], f[3]); 2577dce6bc09126187534ab0297c66b30149643b162Jason Sams} 2587dce6bc09126187534ab0297c66b30149643b162Jason Sams 25922fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_debugI32(const char *s, int32_t i) { 260fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %i 0x%x", s, i, i); 261370ed1525dc570381edd8c67d92eb45701d5f767Romain Guy} 262ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsstatic void SC_debugU32(const char *s, uint32_t i) { 263fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %u 0x%x", s, i, i); 264df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines} 265df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesstatic void SC_debugLL64(const char *s, long long ll) { 266fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %lld 0x%llx", s, ll, ll); 267df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines} 268df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesstatic void SC_debugULL64(const char *s, unsigned long long ll) { 269fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %llu 0x%llx", s, ll, ll); 270ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 271370ed1525dc570381edd8c67d92eb45701d5f767Romain Guy 2727bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsstatic void SC_debugP(const char *s, const void *p) { 273fca82b1b10bb7d2f774cf6116f6424be05c75c67Jason Sams LOGD("%s %p", s, p); 2747bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams} 2757bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 276afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_toClient2(int cmdID, void *data, int len) { 277ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams GET_TLS(); 278ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClient %i %i %i", cmdID, len); 279aad4bc5231dd7059fc5148b34a951117d9b5f4adJason Sams return rsc->sendMessageToClient(data, RS_MESSAGE_TO_CLIENT_USER, cmdID, len, false); 280ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 281ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams 282afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_toClient(int cmdID) { 2838c401effb0837155fc39ca0364f57a882d127d38Jason Sams GET_TLS(); 284ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClient %i", cmdID); 285aad4bc5231dd7059fc5148b34a951117d9b5f4adJason Sams return rsc->sendMessageToClient(NULL, RS_MESSAGE_TO_CLIENT_USER, cmdID, 0, false); 2868c401effb0837155fc39ca0364f57a882d127d38Jason Sams} 2878c401effb0837155fc39ca0364f57a882d127d38Jason Sams 288afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_toClientBlocking2(int cmdID, void *data, int len) { 2893a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams GET_TLS(); 290ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClientBlocking %i %i", cmdID, len); 291aad4bc5231dd7059fc5148b34a951117d9b5f4adJason Sams return rsc->sendMessageToClient(data, RS_MESSAGE_TO_CLIENT_USER, cmdID, len, true); 292ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 293ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams 294afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_toClientBlocking(int cmdID) { 295ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams GET_TLS(); 296ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams //LOGE("SC_toClientBlocking %i", cmdID); 297aad4bc5231dd7059fc5148b34a951117d9b5f4adJason Sams return rsc->sendMessageToClient(NULL, RS_MESSAGE_TO_CLIENT_USER, cmdID, 0, true); 2983a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams} 2993a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams 300afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukint SC_divsi3(int a, int b) { 301be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams return a / b; 302be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams} 3033a27c952c013ad0a8e0c91bea76d895a07f7a56dJason Sams 304cb082a3239b1511caed4c1a3b31a4e922a42c977Bryan Mawhinneyint SC_modsi3(int a, int b) { 305cb082a3239b1511caed4c1a3b31a4e922a42c977Bryan Mawhinney return a % b; 306cb082a3239b1511caed4c1a3b31a4e922a42c977Bryan Mawhinney} 307cb082a3239b1511caed4c1a3b31a4e922a42c977Bryan Mawhinney 308711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hinesunsigned int SC_udivsi3(unsigned int a, unsigned int b) { 309711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines return a / b; 310711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines} 311711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines 312711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hinesunsigned int SC_umodsi3(unsigned int a, unsigned int b) { 313711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines return a % b; 314711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines} 315711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines 316afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukint SC_getAllocation(const void *ptr) { 317ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams GET_TLS(); 318ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams const Allocation *alloc = sc->ptrToAllocation(ptr); 319ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams return (int)alloc; 320ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams} 321ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams 322afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid SC_allocationMarkDirty(RsAllocation a) { 3231e5168d113ccdcf9fe1b817dcbf2f7f476d36c74Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(a); 3241e5168d113ccdcf9fe1b817dcbf2f7f476d36c74Alex Sakhartchouk alloc->sendDirty(); 3251e5168d113ccdcf9fe1b817dcbf2f7f476d36c74Alex Sakhartchouk} 326ce92d4baf7a5bce097228fdd4498601764cd4014Jason Sams 327ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Samsvoid SC_ForEach(RsScript vs, 328ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vin, 329ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vout, 330afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk const void *usr) { 331c61346b91434307c5003029017b54ce9c49112beJason Sams GET_TLS(); 332ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const Allocation *ain = static_cast<const Allocation *>(vin); 333c61346b91434307c5003029017b54ce9c49112beJason Sams Allocation *aout = static_cast<Allocation *>(vout); 334c61346b91434307c5003029017b54ce9c49112beJason Sams Script *s = static_cast<Script *>(vs); 335ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams s->runForEach(rsc, ain, aout, usr); 336c61346b91434307c5003029017b54ce9c49112beJason Sams} 337c61346b91434307c5003029017b54ce9c49112beJason Sams 338ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Samsvoid SC_ForEach2(RsScript vs, 339ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vin, 340ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams RsAllocation vout, 341ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const void *usr, 342afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk const RsScriptCall *call) { 343c61346b91434307c5003029017b54ce9c49112beJason Sams GET_TLS(); 344ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams const Allocation *ain = static_cast<const Allocation *>(vin); 345c61346b91434307c5003029017b54ce9c49112beJason Sams Allocation *aout = static_cast<Allocation *>(vout); 346c61346b91434307c5003029017b54ce9c49112beJason Sams Script *s = static_cast<Script *>(vs); 347ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams s->runForEach(rsc, ain, aout, usr, call); 348c61346b91434307c5003029017b54ce9c49112beJason Sams} 349c61346b91434307c5003029017b54ce9c49112beJason Sams 350e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 351e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// Class implementation 352e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 353e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 354be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// llvm name mangling ref 355be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// <builtin-type> ::= v # void 356be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= b # bool 357be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= c # char 358be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= a # signed char 359be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= h # unsigned char 360be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= s # short 361be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= t # unsigned short 362be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= i # int 363be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= j # unsigned int 364be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= l # long 365be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= m # unsigned long 366be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= x # long long, __int64 367be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= y # unsigned long long, __int64 368be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= f # float 369be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams// ::= d # double 370be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 371aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic ScriptCState::SymbolTable_t gSyms[] = { 3726bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "__divsi3", (void *)&SC_divsi3, true }, 373cb082a3239b1511caed4c1a3b31a4e922a42c977Bryan Mawhinney { "__modsi3", (void *)&SC_modsi3, true }, 374711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines { "__udivsi3", (void *)&SC_udivsi3, true }, 375711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines { "__umodsi3", (void *)&SC_umodsi3, true }, 376be36bf3a76481737a7fa606a04144ceef80eb4f2Jason Sams 37722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // allocation 3786bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z19rsAllocationGetDimX13rs_allocation", (void *)&SC_allocGetDimX, true }, 3796bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z19rsAllocationGetDimY13rs_allocation", (void *)&SC_allocGetDimY, true }, 3806bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z19rsAllocationGetDimZ13rs_allocation", (void *)&SC_allocGetDimZ, true }, 3816bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z21rsAllocationGetDimLOD13rs_allocation", (void *)&SC_allocGetDimLOD, true }, 3826bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z23rsAllocationGetDimFaces13rs_allocation", (void *)&SC_allocGetDimFaces, true }, 3836bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z15rsGetAllocationPKv", (void *)&SC_getAllocation, true }, 38422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 3856bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsGetElementAt13rs_allocationj", (void *)&SC_getElementAtX, true }, 3866bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsGetElementAt13rs_allocationjj", (void *)&SC_getElementAtXY, true }, 3876bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsGetElementAt13rs_allocationjjj", (void *)&SC_getElementAtXYZ, true }, 3887bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 3896bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_setObject, true }, 3906bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP10rs_element", (void *)&SC_clearObject, true }, 3916bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject10rs_element", (void *)&SC_isObject, true }, 392f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 3936bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_setObject, true }, 3946bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP7rs_type", (void *)&SC_clearObject, true }, 3956bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject7rs_type", (void *)&SC_isObject, true }, 396f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 3976bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_setObject, true }, 3986bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP13rs_allocation", (void *)&SC_clearObject, true }, 3996bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject13rs_allocation", (void *)&SC_isObject, true }, 400c093685672e54657d87b953d44e514803889486cJason Sams 4016bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_setObject, true }, 4026bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP10rs_sampler", (void *)&SC_clearObject, true }, 4036bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject10rs_sampler", (void *)&SC_isObject, true }, 404f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4056bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_setObject, true }, 4066bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP9rs_script", (void *)&SC_clearObject, true }, 4076bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject9rs_script", (void *)&SC_isObject, true }, 408f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4096bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP7rs_meshS_", (void *)&SC_setObject, true }, 4106bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP7rs_mesh", (void *)&SC_clearObject, true }, 4116bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject7rs_mesh", (void *)&SC_isObject, true }, 412f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4136bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP19rs_program_fragmentS_", (void *)&SC_setObject, true }, 4146bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP19rs_program_fragment", (void *)&SC_clearObject, true }, 4156bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject19rs_program_fragment", (void *)&SC_isObject, true }, 416f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4176bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP17rs_program_vertexS_", (void *)&SC_setObject, true }, 4186bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP17rs_program_vertex", (void *)&SC_clearObject, true }, 4196bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject17rs_program_vertex", (void *)&SC_isObject, true }, 420f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4216bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP17rs_program_rasterS_", (void *)&SC_setObject, true }, 4226bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP17rs_program_raster", (void *)&SC_clearObject, true }, 4236bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject17rs_program_raster", (void *)&SC_isObject, true }, 424f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4256bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP16rs_program_storeS_", (void *)&SC_setObject, true }, 4266bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP16rs_program_store", (void *)&SC_clearObject, true }, 4276bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject16rs_program_store", (void *)&SC_isObject, true }, 428f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4296bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsSetObjectP7rs_fontS_", (void *)&SC_setObject, true }, 4306bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsClearObjectP7rs_font", (void *)&SC_clearObject, true }, 4316bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z10rsIsObject7rs_font", (void *)&SC_isObject, true }, 432f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 433f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams 4346bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_allocationMarkDirty, true }, 4351e5168d113ccdcf9fe1b817dcbf2f7f476d36c74Alex Sakhartchouk 436c093685672e54657d87b953d44e514803889486cJason Sams 43722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // Debug 4386bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcf", (void *)&SC_debugF, true }, 4396bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcff", (void *)&SC_debugFv2, true }, 4406bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcfff", (void *)&SC_debugFv3, true }, 4416bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcffff", (void *)&SC_debugFv4, true }, 4426bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcd", (void *)&SC_debugD, true }, 4436bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcPK12rs_matrix4x4", (void *)&SC_debugFM4v4, true }, 4446bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcPK12rs_matrix3x3", (void *)&SC_debugFM3v3, true }, 4456bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcPK12rs_matrix2x2", (void *)&SC_debugFM2v2, true }, 4466bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKci", (void *)&SC_debugI32, true }, 4476bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcj", (void *)&SC_debugU32, true }, 448df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines // Both "long" and "unsigned long" need to be redirected to their 449df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines // 64-bit counterparts, since we have hacked Slang to use 64-bit 450df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines // for "long" on Arm (to be similar to Java). 4516bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcl", (void *)&SC_debugLL64, true }, 4526bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcm", (void *)&SC_debugULL64, true }, 4536bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcx", (void *)&SC_debugLL64, true }, 4546bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcy", (void *)&SC_debugULL64, true }, 4556bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsDebugPKcPKv", (void *)&SC_debugP, true }, 45622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 45722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // RS Math 4586bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z6rsRandi", (void *)&SC_randi, true }, 4596bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z6rsRandii", (void *)&SC_randi2, true }, 4606bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z6rsRandf", (void *)&SC_randf, true }, 4616bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z6rsRandff", (void *)&SC_randf2, true }, 4626bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z6rsFracf", (void *)&SC_frac, true }, 46322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 46422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams // time 465ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines { "_Z6rsTimePi", (void *)&SC_time, true }, 466ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines { "_Z11rsLocaltimeP5rs_tmPKi", (void *)&SC_localtime, true }, 4676bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsUptimeMillisv", (void*)&SC_uptimeMillis, true }, 4686bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsUptimeNanosv", (void*)&SC_uptimeNanos, true }, 4696bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z7rsGetDtv", (void*)&SC_getDt, false }, 4706bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams 4716bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsSendToClienti", (void *)&SC_toClient, false }, 4726bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsSendToClientiPKvj", (void *)&SC_toClient2, false }, 4736bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z22rsSendToClientBlockingi", (void *)&SC_toClientBlocking, false }, 4746bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_toClientBlocking2, false }, 4756bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams 4766bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach, false }, 4776bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams //{ "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach2, true }, 47822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 47922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams//////////////////////////////////////////////////////////////////// 48022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4816bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams //{ "sinf_fast", (void *)&SC_sinf_fast, true }, 4826bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams //{ "cosf_fast", (void *)&SC_cosf_fast, true }, 483e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 4846bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { NULL, NULL, false } 485e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams}; 486e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 487afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukconst ScriptCState::SymbolTable_t * ScriptCState::lookupSymbol(const char *sym) { 488e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams ScriptCState::SymbolTable_t *syms = gSyms; 489e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 490e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams while (syms->mPtr) { 491e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams if (!strcmp(syms->mName, sym)) { 492e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams return syms; 493e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams } 494e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams syms++; 495e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams } 496e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams return NULL; 497e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 498