1bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/* 2ee7aa2e3900f807ee41bb9735da86b3eb4cc2e70Stephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 3bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 4bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * you may not use this file except in compliance with the License. 6bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * You may obtain a copy of the License at 7bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 8bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 10bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Unless required by applicable law or agreed to in writing, software 11bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * See the License for the specific language governing permissions and 14bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * limitations under the License. 15bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 16bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 17709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "../cpu_ref/rsd_cpu.h" 18709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 19bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include "rsdCore.h" 20eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include "rsdAllocation.h" 21bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include "rsdBcc.h" 22a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#include "rsdElement.h" 23a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams#include "rsdType.h" 2459f6142d7657e43b4d21e077a28387431db02edfMiao Wang#if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 25110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdGL.h" 26110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramStore.h" 27110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramRaster.h" 28110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramVertex.h" 29110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramFragment.h" 30110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdMesh.h" 31110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdFrameBuffer.h" 322bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang#else 332bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang #include <dlfcn.h> 34110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#endif 357f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk#include "rsdSampler.h" 36dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams#include "rsdScriptGroup.h" 37bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 38bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include <malloc.h> 39bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include "rsContext.h" 40bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 41cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams#include <sys/types.h> 42cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams#include <sys/resource.h> 43cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams#include <sched.h> 44cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams#include <sys/syscall.h> 45cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams#include <string.h> 46cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 47e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsiehusing android::renderscript::Allocation; 48e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsiehusing android::renderscript::Context; 49e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsiehusing android::renderscript::RsHalInitEnums; 50e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsiehusing android::renderscript::RsdCpuReference; 51e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsiehusing android::renderscript::Script; 52bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 53cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsstatic void Shutdown(Context *rsc); 54cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsstatic void SetPriority(const Context *rsc, int32_t priority); 55cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 56110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#ifndef RS_COMPATIBILITY_LIB 57110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #define NATIVE_FUNC(a) a 58110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#else 5944bef6fba6244292b751387f3d6c31cca96c28adChris Wailes #define NATIVE_FUNC(a) nullptr 60110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#endif 61110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams 62e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsiehnamespace android { 63e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsiehnamespace renderscript { 64e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsieh 650ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsextern "C" bool rsdHalQueryHal(RsHalInitEnums entry, void **fnPtr) { 660ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams switch(entry) { 670ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_CORE_SHUTDOWN: 680ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)Shutdown; break; 690ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_CORE_SET_PRIORITY: 700ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)SetPriority; break; 710ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_CORE_ALLOC_RUNTIME_MEM: 720ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocRuntimeMem; break; 730ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_CORE_FREE_RUNTIME_MEM: 740ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdFreeRuntimeMem; break; 750ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_CORE_FINISH: 760ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)nullptr; break; 770ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 780ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INIT: 790ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptInit; break; 800ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INIT_INTRINSIC: 810ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdInitIntrinsic; break; 820ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INVOKE_FUNCTION: 830ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptInvokeFunction; break; 840ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INVOKE_ROOT: 850ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptInvokeRoot; break; 860ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INVOKE_FOR_EACH: 870ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptInvokeForEach; break; 880ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INVOKE_INIT: 890ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptInvokeInit; break; 900ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INVOKE_FREE_CHILDREN: 910ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptInvokeFreeChildren; break; 920ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_SET_GLOBAL_VAR: 930ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptSetGlobalVar; break; 940ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_GET_GLOBAL_VAR: 950ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptGetGlobalVar; break; 960ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_SET_GLOBAL_VAR_WITH_ELEMENT_DIM: 970ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptSetGlobalVarWithElemDims; break; 980ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_SET_GLOBAL_BIND: 990ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptSetGlobalBind; break; 1000ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_SET_GLOBAL_OBJECT: 1010ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptSetGlobalObj; break; 1020ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_DESTROY: 1030ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptDestroy; break; 1040ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_INVOKE_FOR_EACH_MULTI: 1050ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptInvokeForEachMulti; break; 1060ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_UPDATE_CACHED_OBJECT: 1070ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptUpdateCachedObject; break; 10814ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala case RS_HAL_SCRIPT_INVOKE_REDUCE: 10914ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala fnPtr[0] = (void *)rsdScriptInvokeReduce; break; 1100ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 1110ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_INIT: 1120ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationInit; break; 113f82b626e0479ce4a23ebff1fc088e073dcabaa30Jason Sams case RS_HAL_ALLOCATION_INIT_OEM: 114f82b626e0479ce4a23ebff1fc088e073dcabaa30Jason Sams fnPtr[0] = (void *)nullptr; break; 1150ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_INIT_ADAPTER: 1160ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationAdapterInit; break; 1170ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_DESTROY: 1180ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationDestroy; break; 1190ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_GET_GRALLOC_BITS: 1200ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationGrallocBits; break; 1210ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_RESIZE: 1220ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationResize; break; 1230ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_SYNC_ALL: 1240ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationSyncAll; break; 1250ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_MARK_DIRTY: 1260ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationMarkDirty; break; 1270ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_SET_SURFACE: 1280ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)NATIVE_FUNC(rsdAllocationSetSurface); break; 1290ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_IO_SEND: 1300ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)NATIVE_FUNC(rsdAllocationIoSend); break; 1310ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_IO_RECEIVE: 1320ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)NATIVE_FUNC(rsdAllocationIoReceive); break; 1330ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_DATA_1D: 1340ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationData1D; break; 1350ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_DATA_2D: 1360ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationData2D; break; 1370ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_DATA_3D: 1380ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationData3D; break; 1390ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_READ_1D: 1400ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationRead1D; break; 1410ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_READ_2D: 1420ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationRead2D; break; 1430ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_READ_3D: 1440ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationRead3D; break; 1450ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_LOCK_1D: 1460ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationLock1D; break; 1470ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_UNLOCK_1D: 1480ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationUnlock1D; break; 1490ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_COPY_1D: 1500ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationData1D_alloc; break; 1510ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_COPY_2D: 1520ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationData2D_alloc; break; 1530ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_COPY_3D: 1540ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationData3D_alloc; break; 1550ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_ELEMENT_DATA: 1560ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationElementData; break; 1570ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_ELEMENT_READ: 1580ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationElementRead; break; 1590ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_GENERATE_MIPMAPS: 1600ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationGenerateMipmaps; break; 1610ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_UPDATE_CACHED_OBJECT: 1620ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationUpdateCachedObject; break; 1630ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ALLOCATION_ADAPTER_OFFSET: 1640ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdAllocationAdapterOffset; break; 1658ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams case RS_HAL_ALLOCATION_GET_POINTER: 1668ce12815675bfaeb2768959b092d6db293ba36c5Jason Sams fnPtr[0] = (void *)nullptr; break; 16747a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#ifdef RS_COMPATIBILITY_LIB 16847a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang case RS_HAL_ALLOCATION_INIT_STRIDED: 16947a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang fnPtr[0] = (void *)rsdAllocationInitStrided; break; 17047a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#endif 1710ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 1720ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SAMPLER_INIT: 1730ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdSamplerInit; break; 1740ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SAMPLER_DESTROY: 1750ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdSamplerDestroy; break; 1760ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SAMPLER_UPDATE_CACHED_OBJECT: 1770ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdSamplerUpdateCachedObject; break; 1780ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 1790ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_TYPE_INIT: 1800ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdTypeInit; break; 1810ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_TYPE_DESTROY: 1820ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdTypeDestroy; break; 1830ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_TYPE_UPDATE_CACHED_OBJECT: 1840ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdTypeUpdateCachedObject; break; 1850ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 1860ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ELEMENT_INIT: 1870ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdElementInit; break; 1880ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ELEMENT_DESTROY: 1890ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdElementDestroy; break; 1900ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_ELEMENT_UPDATE_CACHED_OBJECT: 1910ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdElementUpdateCachedObject; break; 1920ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 1930ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_GROUP_INIT: 1940ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptGroupInit; break; 1950ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_GROUP_DESTROY: 1960ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptGroupDestroy; break; 1970ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_GROUP_UPDATE_CACHED_OBJECT: 1980ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)nullptr; break; 1990ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_GROUP_SET_INPUT: 2000ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptGroupSetInput; break; 2010ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_GROUP_SET_OUTPUT: 2020ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptGroupSetOutput; break; 2030ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_SCRIPT_GROUP_EXECUTE: 2040ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdScriptGroupExecute; break; 2050ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2060ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2070ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2080ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams // Functions below this point are for the legacy graphics api, 2090ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams // vendor drivers are NOT expected to implement these. They will never be called 2100ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams // for an external driver. 21159f6142d7657e43b4d21e077a28387431db02edfMiao Wang#if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 2120ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_INIT: 2130ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdGLInit; break; 2140ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_SHUTDOWN: 2150ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdGLShutdown; break; 2160ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_SWAP: 2170ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdGLSwap; break; 2180ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_SET_SURFACE: 2190ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdGLSetSurface; break; 2200ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_RASTER_INIT: 2210ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramRasterInit; break; 2220ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_RASTER_SET_ACTIVE: 2230ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramRasterSetActive; break; 2240ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_RASTER_DESTROY: 2250ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramRasterDestroy; break; 2260ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_VERTEX_INIT: 2270ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramVertexInit; break; 2280ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_VERTEX_SET_ACTIVE: 2290ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramVertexSetActive; break; 2300ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_VERTEX_DESTROY: 2310ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramVertexDestroy; break; 2320ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_FRAGMENT_INIT: 2330ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramFragmentInit; break; 2340ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_FRAGMENT_SET_ACTIVE: 2350ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramFragmentSetActive; break; 2360ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_FRAGMENT_DESTROY: 2370ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramFragmentDestroy; break; 2380ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_MESH_INIT: 2390ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdMeshInit; break; 2400ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_MESH_DRAW: 2410ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdMeshDraw; break; 2420ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_MESH_DESTROY: 2430ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdMeshDestroy; break; 2440ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_FB_INIT: 2450ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdFrameBufferInit; break; 2460ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_FB_SET_ACTIVE: 2470ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdFrameBufferSetActive; break; 2480ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_FB_DESTROY: 2490ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdFrameBufferDestroy; break; 2500ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_STORE_INIT: 2510ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramStoreInit; break; 2520ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_STORE_SET_ACTIVE: 2530ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramStoreSetActive; break; 2540ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams case RS_HAL_GRAPHICS_STORE_DESTROY: 2550ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams fnPtr[0] = (void *)rsdProgramStoreDestroy; break; 2560ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams#endif 2570ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2580ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams default: 2590ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams ALOGE("ERROR: unknown RenderScript HAL API query, %i", entry); 2600ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams return false; 2610ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams } 2620ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2630ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams return true; 2640ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams} 2650ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2660ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsextern "C" void rsdHalAbort(RsContext) { 2670ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2680ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams} 2690ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2700ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 2710ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Samsextern "C" bool rsdHalQueryVersion(uint32_t *major, uint32_t *minor) { 2728e70791ff732ce244077310bdfdaf75dc19baabcDavid Gross *major = RS_HAL_VERSION; 2730ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams *minor = 0; 2740ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams return true; 2750ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams} 2760ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 277e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsieh} // namespace renderscript 278e939ce7e3b609ee53d73c2b48c5ff8f03b4579a3Chih-Hung Hsieh} // namespace android 279bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 280709a0978ae141198018ca9769f8d96292a8928e6Jason Samsextern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name); 281cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 282709a0978ae141198018ca9769f8d96292a8928e6Jason Samsstatic RsdCpuReference::CpuScript * LookupScript(Context *, const Script *s) { 283709a0978ae141198018ca9769f8d96292a8928e6Jason Sams return (RsdCpuReference::CpuScript *)s->mHal.drv; 284cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams} 285cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 2862bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang#ifdef RS_COMPATIBILITY_LIB 2872bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangtypedef void (*sAllocationDestroyFnPtr) (const Context *rsc, Allocation *alloc); 2882bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangtypedef void (*sAllocationIoSendFnPtr) (const Context *rsc, Allocation *alloc); 2892bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangtypedef void (*sAllocationSetSurfaceFnPtr) (const Context *rsc, Allocation *alloc, ANativeWindow *nw); 2902bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangstatic sAllocationDestroyFnPtr sAllocationDestroy; 2912bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangstatic sAllocationIoSendFnPtr sAllocationIoSend; 2922bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangstatic sAllocationSetSurfaceFnPtr sAllocationSetSurface; 2932bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang 2942bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangstatic bool loadIOSuppLibSyms() { 2952bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang void* handleIO = nullptr; 2962bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang handleIO = dlopen("libRSSupportIO.so", RTLD_LAZY | RTLD_LOCAL); 2972bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang if (handleIO == nullptr) { 2982bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang ALOGE("Couldn't load libRSSupportIO.so"); 2992bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang return false; 3002bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang } 3012bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang sAllocationDestroy = (sAllocationDestroyFnPtr)dlsym(handleIO, "rscAllocationDestroy"); 3022bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang if (sAllocationDestroy==nullptr) { 3032bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang ALOGE("Failed to initialize sAllocationDestroy"); 3042bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang return false; 3052bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang } 3062bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang sAllocationIoSend = (sAllocationIoSendFnPtr)dlsym(handleIO, "rscAllocationIoSend"); 3072bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang if (sAllocationIoSend==nullptr) { 3082bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang ALOGE("Failed to initialize sAllocationIoSend"); 3092bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang return false; 3102bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang } 3112bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang sAllocationSetSurface = (sAllocationSetSurfaceFnPtr)dlsym(handleIO, "rscAllocationSetSurface"); 3122bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang if (sAllocationSetSurface==nullptr) { 3132bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang ALOGE("Failed to initialize sAllocationIoSend"); 3142bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang return false; 3152bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang } 3162bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang return true; 3172bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang} 3182bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang#endif 3192bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang 320414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesextern "C" bool rsdHalInit(RsContext c, uint32_t version_major, 321414a46166126da6864258bd25ff183f9a3c6261dStephen Hines uint32_t version_minor) { 322414a46166126da6864258bd25ff183f9a3c6261dStephen Hines Context *rsc = (Context*) c; 3232bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang#ifdef RS_COMPATIBILITY_LIB 3242bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang if (loadIOSuppLibSyms()) { 3250ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams rsc->mHal.funcs.allocation.destroy = sAllocationDestroy; 3260ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams rsc->mHal.funcs.allocation.ioSend = sAllocationIoSend; 3270ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams rsc->mHal.funcs.allocation.setSurface = sAllocationSetSurface; 3282bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang } 3292bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang#endif 3300ca7cbaea8d5cf18f25d1148be75fbb6e2d86c62Jason Sams 33187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams RsdHal *dc = (RsdHal *)calloc(1, sizeof(RsdHal)); 3322cfe51e7a9eef3dec091ce7c15d2a5a2216e9d3eJason Sams if (!dc) { 333af12ac6a08651464f8d823add667c706f993b587Steve Block ALOGE("Calloc for driver hal failed."); 334bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams return false; 335bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } 336cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams rsc->mHal.drv = dc; 337bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 338a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines dc->mCpuRef = RsdCpuReference::create(rsc, version_major, version_minor, 339709a0978ae141198018ca9769f8d96292a8928e6Jason Sams &rsdLookupRuntimeStub, &LookupScript); 340709a0978ae141198018ca9769f8d96292a8928e6Jason Sams if (!dc->mCpuRef) { 341709a0978ae141198018ca9769f8d96292a8928e6Jason Sams ALOGE("RsdCpuReference::create for driver hal failed."); 34244bef6fba6244292b751387f3d6c31cca96c28adChris Wailes rsc->mHal.drv = nullptr; 343709a0978ae141198018ca9769f8d96292a8928e6Jason Sams free(dc); 344cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams return false; 345cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams } 346cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 347bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams return true; 348bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 349bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 350cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 351cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsvoid SetPriority(const Context *rsc, int32_t priority) { 35287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams RsdHal *dc = (RsdHal *)rsc->mHal.drv; 353709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 354709a0978ae141198018ca9769f8d96292a8928e6Jason Sams dc->mCpuRef->setPriority(priority); 355709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 35659f6142d7657e43b4d21e077a28387431db02edfMiao Wang#if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 3579719bd4a0187c400ba868712612fe66da4635aacJason Sams if (dc->mHasGraphics) { 3589719bd4a0187c400ba868712612fe66da4635aacJason Sams rsdGLSetPriority(rsc, priority); 3599719bd4a0187c400ba868712612fe66da4635aacJason Sams } 360110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#endif 361cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams} 362cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 363cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsvoid Shutdown(Context *rsc) { 36487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams RsdHal *dc = (RsdHal *)rsc->mHal.drv; 365709a0978ae141198018ca9769f8d96292a8928e6Jason Sams delete dc->mCpuRef; 36607ef704308b514272ed2f5c3e6a2f4c055550158Jens Gulin free(dc); 36744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes rsc->mHal.drv = nullptr; 368cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams} 369cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 37034689388556747b52c3c2f1c894929fb44580898Tim Murrayvoid* rsdAllocRuntimeMem(size_t size, uint32_t flags) { 37134689388556747b52c3c2f1c894929fb44580898Tim Murray void* buffer = calloc(size, sizeof(char)); 37234689388556747b52c3c2f1c894929fb44580898Tim Murray return buffer; 37334689388556747b52c3c2f1c894929fb44580898Tim Murray} 37434689388556747b52c3c2f1c894929fb44580898Tim Murray 37534689388556747b52c3c2f1c894929fb44580898Tim Murrayvoid rsdFreeRuntimeMem(void* ptr) { 37634689388556747b52c3c2f1c894929fb44580898Tim Murray free(ptr); 37734689388556747b52c3c2f1c894929fb44580898Tim Murray} 378