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