1e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams/* 24419977d78018a9933c7f455fe001f644f2d638bStephen Hines * Copyright (C) 2009-2012 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" 1987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix4x4.h" 2087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix3x3.h" 2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix2x2.h" 224edf030cbb7c6ac08dc563335c2af73c20f6e2e5Alex Sakhartchouk#include "rsgApiStructs.h" 23e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 24b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hines#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) 259c4e4ca9ff75a7fe18544c83fcf782e46c9b6ac2Joe Onorato#include "utils/Timers.h" 260b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif 27e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 2898e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy#include <time.h> 2998e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 30e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsusing namespace android; 31e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Samsusing namespace android::renderscript; 32e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsnamespace android { 3587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsnamespace renderscript { 36e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 37a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 38e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 39e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// Math routines 40e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 41e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 42196c1112ec95a99b75bf9335f0a4e007150e6091Stephen Hines#if 0 43afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_sinf_fast(float x) { 442275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float A = 1.0f / (2.0f * M_PI); 452275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float B = -16.0f; 462275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float C = 8.0f; 47a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 482275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // scale angle for easy argument reduction 492275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x *= A; 50a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 512275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy if (fabsf(x) >= 0.5f) { 522275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // argument reduction 532275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x = x - ceilf(x + 0.5f) + 1.0f; 542275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy } 55a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 562275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float y = B * x * fabsf(x) + C * x; 572275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy return 0.2215f * (y * fabsf(y) - y) + y; 582275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy} 592275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 60afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic float SC_cosf_fast(float x) { 612275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x += float(M_PI / 2); 622275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 632275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float A = 1.0f / (2.0f * M_PI); 642275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float B = -16.0f; 652275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float C = 8.0f; 66a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 672275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // scale angle for easy argument reduction 682275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x *= A; 69a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 702275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy if (fabsf(x) >= 0.5f) { 712275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy // argument reduction 722275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy x = x - ceilf(x + 0.5f) + 1.0f; 732275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy } 74a57c0a72c3b3babc2757d081ff8146ebaa2caf4cJason Sams 752275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy const float y = B * x * fabsf(x) + C * x; 762275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy return 0.2215f * (y * fabsf(y) - y) + y; 772275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy} 78196c1112ec95a99b75bf9335f0a4e007150e6091Stephen Hines#endif 792275d635bd1d1b716ae22ee7507583e5013d55f4Romain Guy 8098e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy////////////////////////////////////////////////////////////////////////////// 8198e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy// Time routines 8298e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy////////////////////////////////////////////////////////////////////////////// 8398e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 84709a0978ae141198018ca9769f8d96292a8928e6Jason Samstime_t rsrTime(Context *rsc, time_t *timer) { 85ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines return time(timer); 8639dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 8739dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 88709a0978ae141198018ca9769f8d96292a8928e6Jason Samstm* rsrLocalTime(Context *rsc, tm *local, time_t *timer) { 89ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines if (!local) { 90ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines return NULL; 91ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines } 92e5ffb879ae535a899a486285a23bea05e912480fJason Sams 93ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines // The native localtime function is not thread-safe, so we 94ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines // have to apply locking for proper behavior in RenderScript. 95ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines pthread_mutex_lock(&rsc->gLibMutex); 96ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines tm *tmp = localtime(timer); 97110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#ifndef RS_COMPATIBILITY_LIB 98ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines memcpy(local, tmp, sizeof(*tmp)); 99110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#else 100110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams // WORKAROUND to struct rs_tm != struct tm 101110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams memcpy(local, tmp, sizeof(int)*9); 102110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#endif 103ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines pthread_mutex_unlock(&rsc->gLibMutex); 104ca3f09c0924e9515901dfd47fa5f95385d53cf80Stephen Hines return local; 10539dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy} 10639dbc8067ef613b84475c20306d1b9be71d61c16Romain Guy 107709a0978ae141198018ca9769f8d96292a8928e6Jason Samsint64_t rsrUptimeMillis(Context *rsc) { 1080b575de8ed0b628d84d256f5846500b0385979bdTim Murray#ifndef RS_SERVER 10922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams return nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC)); 1100b575de8ed0b628d84d256f5846500b0385979bdTim Murray#else 1110b575de8ed0b628d84d256f5846500b0385979bdTim Murray return 0; 1120b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif 11322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 11422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 115709a0978ae141198018ca9769f8d96292a8928e6Jason Samsint64_t rsrUptimeNanos(Context *rsc) { 1160b575de8ed0b628d84d256f5846500b0385979bdTim Murray#ifndef RS_SERVER 1177349547db61d2d458b31c074b902d56d082e5d84Jason Sams return systemTime(SYSTEM_TIME_MONOTONIC); 1180b575de8ed0b628d84d256f5846500b0385979bdTim Murray#else 1190b575de8ed0b628d84d256f5846500b0385979bdTim Murray return 0; 1200b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif 12122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 12222fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 123709a0978ae141198018ca9769f8d96292a8928e6Jason Samsfloat rsrGetDt(Context *rsc, const Script *sc) { 1240b575de8ed0b628d84d256f5846500b0385979bdTim Murray#ifndef RS_SERVER 125ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams int64_t l = sc->mEnviroment.mLastDtTime; 126ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams sc->mEnviroment.mLastDtTime = systemTime(SYSTEM_TIME_MONOTONIC); 127ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams return ((float)(sc->mEnviroment.mLastDtTime - l)) / 1.0e9; 1280b575de8ed0b628d84d256f5846500b0385979bdTim Murray#else 1290b575de8ed0b628d84d256f5846500b0385979bdTim Murray return 0.f; 1300b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif 131e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 132e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 133e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 134e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams// 135e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams////////////////////////////////////////////////////////////////////////////// 136e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams 137a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samsstatic void SetObjectRef(const Context *rsc, const ObjectBase *dst, const ObjectBase *src) { 138a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams //ALOGE("setObjectRef %p,%p %p", rsc, dst, src); 139bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams if (src) { 140bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams CHECK_OBJ(src); 141bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams src->incSysRef(); 142f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams } 143a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams if (dst) { 144a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams CHECK_OBJ(dst); 145a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams dst->decSysRef(); 146f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams } 147c093685672e54657d87b953d44e514803889486cJason Sams} 148afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 149f29edf80510d483b8663e9d8b859959e37361aeeJason Sams// Legacy, remove when drivers are updated 150a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samsvoid rsrSetObject(const Context *rsc, void *dst, ObjectBase *src) { 151a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams ObjectBase **odst = (ObjectBase **)dst; 152a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams //ALOGE("rsrSetObject (base) %p,%p %p", dst, *odst, src); 153a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams SetObjectRef(rsc, odst[0], src); 154a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams if (src != NULL) { 155a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams src->callUpdateCacheObject(rsc, dst); 156f24d7d0eab1dce2cee0108a1d1952bba6d562349Jason Sams } 157a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams} 158a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 159f29edf80510d483b8663e9d8b859959e37361aeeJason Samsvoid rsrSetObject(const Context *rsc, rs_object_base *dst, const ObjectBase *src) { 160f29edf80510d483b8663e9d8b859959e37361aeeJason Sams ObjectBase **odst = (ObjectBase **)dst; 161f29edf80510d483b8663e9d8b859959e37361aeeJason Sams //ALOGE("rsrSetObject (base) %p,%p %p", dst, *odst, src); 162f29edf80510d483b8663e9d8b859959e37361aeeJason Sams SetObjectRef(rsc, odst[0], src); 163f29edf80510d483b8663e9d8b859959e37361aeeJason Sams if (src != NULL) { 164f29edf80510d483b8663e9d8b859959e37361aeeJason Sams src->callUpdateCacheObject(rsc, dst); 165f29edf80510d483b8663e9d8b859959e37361aeeJason Sams } 166f29edf80510d483b8663e9d8b859959e37361aeeJason Sams} 167a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 168f29edf80510d483b8663e9d8b859959e37361aeeJason Sams// Legacy, remove when drivers are updated 169a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samsvoid rsrClearObject(const Context *rsc, void *dst) { 170a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams ObjectBase **odst = (ObjectBase **)dst; 171a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams //ALOGE("rsrClearObject %p,%p", odst, *odst); 172a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams if (odst[0]) { 173a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams CHECK_OBJ(odst[0]); 174a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams odst[0]->decSysRef(); 175a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams } 176a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams *odst = NULL; 177c093685672e54657d87b953d44e514803889486cJason Sams} 178afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 179f29edf80510d483b8663e9d8b859959e37361aeeJason Samsvoid rsrClearObject(const Context *rsc, rs_object_base *dst) { 180f29edf80510d483b8663e9d8b859959e37361aeeJason Sams //ALOGE("rsrClearObject %p,%p", odst, *odst); 181f29edf80510d483b8663e9d8b859959e37361aeeJason Sams if (dst->p) { 182f29edf80510d483b8663e9d8b859959e37361aeeJason Sams CHECK_OBJ(dst->p); 183f29edf80510d483b8663e9d8b859959e37361aeeJason Sams dst->p->decSysRef(); 184f29edf80510d483b8663e9d8b859959e37361aeeJason Sams } 185f29edf80510d483b8663e9d8b859959e37361aeeJason Sams dst->p = NULL; 186f29edf80510d483b8663e9d8b859959e37361aeeJason Sams} 187f29edf80510d483b8663e9d8b859959e37361aeeJason Sams 188f29edf80510d483b8663e9d8b859959e37361aeeJason Sams// Legacy, remove when drivers are updated 1891aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murraybool rsrIsObject(const Context *, ObjectBase* src) { 190f29edf80510d483b8663e9d8b859959e37361aeeJason Sams ObjectBase **osrc = (ObjectBase **)src; 191f29edf80510d483b8663e9d8b859959e37361aeeJason Sams return osrc != NULL; 192f29edf80510d483b8663e9d8b859959e37361aeeJason Sams} 193f29edf80510d483b8663e9d8b859959e37361aeeJason Sams 194f29edf80510d483b8663e9d8b859959e37361aeeJason Samsbool rsrIsObject(const Context *rsc, rs_object_base o) { 195f29edf80510d483b8663e9d8b859959e37361aeeJason Sams return o.p != NULL; 196c093685672e54657d87b953d44e514803889486cJason Sams} 197c093685672e54657d87b953d44e514803889486cJason Sams 1987bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams 1991aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 200276000a3673e639f9abc41db4709c1b0a96c1bf9Stephen Hinesuint32_t rsrToClient(Context *rsc, int cmdID, const void *data, int len) { 201af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("SC_toClient %i %i %i", cmdID, len); 202aad4bc5231dd7059fc5148b34a951117d9b5f4adJason Sams return rsc->sendMessageToClient(data, RS_MESSAGE_TO_CLIENT_USER, cmdID, len, false); 203ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 204ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams 205276000a3673e639f9abc41db4709c1b0a96c1bf9Stephen Hinesuint32_t rsrToClientBlocking(Context *rsc, int cmdID, const void *data, int len) { 206af12ac6a08651464f8d823add667c706f993b587Steve Block //ALOGE("SC_toClientBlocking %i %i", cmdID, len); 207aad4bc5231dd7059fc5148b34a951117d9b5f4adJason Sams return rsc->sendMessageToClient(data, RS_MESSAGE_TO_CLIENT_USER, cmdID, len, true); 208ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams} 209ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams 21070537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines// Keep these two routines (using non-const void pointers) so that we can 21170537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines// still use existing GPU drivers. 21270537f52bdc6e8702db03cc91fe511371fb31267Stephen Hinesuint32_t rsrToClient(Context *rsc, int cmdID, void *data, int len) { 21370537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines return rsrToClient(rsc, cmdID, (const void *)data, len); 21470537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines} 21570537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines 21670537f52bdc6e8702db03cc91fe511371fb31267Stephen Hinesuint32_t rsrToClientBlocking(Context *rsc, int cmdID, void *data, int len) { 21770537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines return rsrToClientBlocking(rsc, cmdID, (const void *)data, len); 21870537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines} 21970537f52bdc6e8702db03cc91fe511371fb31267Stephen Hines 220ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsvoid rsrAllocationIoSend(Context *rsc, Allocation *src) { 221ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams src->ioSend(rsc); 222ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams} 223ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 224ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsvoid rsrAllocationIoReceive(Context *rsc, Allocation *src) { 225ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams src->ioReceive(rsc); 226ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams} 227711e7316c7bc274dd0ee9e4f3f043a85c1a706a8Stephen Hines 228709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrForEach(Context *rsc, 22987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams Script *target, 23087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams Allocation *in, Allocation *out, 23187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams const void *usr, uint32_t usrBytes, 232afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk const RsScriptCall *call) { 2334419977d78018a9933c7f455fe001f644f2d638bStephen Hines target->runForEach(rsc, /* root slot */ 0, in, out, usr, usrBytes, call); 234693080efdafbf49d675fe5f959f0286f83b30c81Jason Sams} 235693080efdafbf49d675fe5f959f0286f83b30c81Jason Sams 236709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid rsrAllocationSyncAll(Context *rsc, Allocation *a, RsAllocationUsageType usage) { 23787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams a->syncAll(rsc, usage); 238693080efdafbf49d675fe5f959f0286f83b30c81Jason Sams} 239693080efdafbf49d675fe5f959f0286f83b30c81Jason Sams 24074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsrAllocationCopy1DRange(Context *rsc, Allocation *dstAlloc, 24174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstOff, 24274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstMip, 24374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t count, 24474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk Allocation *srcAlloc, 24574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcOff, uint32_t srcMip) { 24674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsi_AllocationCopy2DRange(rsc, dstAlloc, dstOff, 0, 24774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk dstMip, 0, count, 1, 24874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk srcAlloc, srcOff, 0, srcMip, 0); 24974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} 25074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 25174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsrAllocationCopy2DRange(Context *rsc, Allocation *dstAlloc, 25274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, 25374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstMip, uint32_t dstFace, 25474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t width, uint32_t height, 25574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk Allocation *srcAlloc, 25674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, 25774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcMip, uint32_t srcFace) { 25874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsi_AllocationCopy2DRange(rsc, dstAlloc, dstXoff, dstYoff, 25974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk dstMip, dstFace, width, height, 26074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk srcAlloc, srcXoff, srcYoff, srcMip, srcFace); 26174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} 26274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 263693080efdafbf49d675fe5f959f0286f83b30c81Jason Sams 264693080efdafbf49d675fe5f959f0286f83b30c81Jason Sams} 265e45ac6e91864f2a6617b6a2c0aa87cdb62cf58fdJason Sams} 266