rsdCore.cpp revision 2d7d0b276ed4b3cedf72342a4d2ab287d4653ce0
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2011-2012 The Android Open Source Project 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License. 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License. 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "../cpu_ref/rsd_cpu.h" 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "rsdCore.h" 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "rsdAllocation.h" 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "rsdBcc.h" 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef RS_COMPATIBILITY_LIB 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project #include "MemChunk.h" 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project #include "rsdGL.h" 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project #include "rsdPath.h" 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project #include "rsdProgramStore.h" 270b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent #include "rsdProgramRaster.h" 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project #include "rsdProgramVertex.h" 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project #include "rsdProgramFragment.h" 300b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent #include "rsdMesh.h" 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project #include "rsdFrameBuffer.h" 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif 330b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent#include "rsdSampler.h" 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "rsdScriptGroup.h" 350b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 365e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#include <malloc.h> 375e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#include "rsContext.h" 380b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 390b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent#include <sys/types.h> 405e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#include <sys/resource.h> 415e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#include <sched.h> 420b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent#include <sys/syscall.h> 430b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent#include <string.h> 445e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 455e0a3043af16bc71a4211ee00dc00724de6623a7David Krauseusing namespace android; 460b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurentusing namespace android::renderscript; 470b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 485e0a3043af16bc71a4211ee00dc00724de6623a7David Krausestatic void Shutdown(Context *rsc); 495e0a3043af16bc71a4211ee00dc00724de6623a7David Krausestatic void SetPriority(const Context *rsc, int32_t priority); 500b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 510b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent#ifndef RS_COMPATIBILITY_LIB 525e0a3043af16bc71a4211ee00dc00724de6623a7David Krause #define NATIVE_FUNC(a) a 535e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#else 540b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent #define NATIVE_FUNC(a) NULL 550b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent#endif 565e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 575e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 580b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurentstatic RsdHalFunctions FunctionTable = { 590b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdGLInit), 605e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdGLShutdown), 615e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdGLSetSurface), 620b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdGLSwap), 630b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 645e0a3043af16bc71a4211ee00dc00724de6623a7David Krause Shutdown, 655e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NULL, 660b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent SetPriority, 670b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocRuntimeMem, 685e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdFreeRuntimeMem, 695e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 700b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptInit, 710b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdInitIntrinsic, 725e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptInvokeFunction, 735e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptInvokeRoot, 740b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptInvokeForEach, 750b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptInvokeInit, 765e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptInvokeFreeChildren, 775e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptSetGlobalVar, 780b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptGetGlobalVar, 790b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptSetGlobalVarWithElemDims, 805e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptSetGlobalBind, 815e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptSetGlobalObj, 820b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptDestroy 830b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent }, 845e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 855e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 860b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationInit, 870b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationDestroy, 885e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationGrallocBits, 895e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationResize, 900b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationSyncAll, 910b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationMarkDirty, 925e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdAllocationSetSurface), 935e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdAllocationIoSend), 940b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdAllocationIoReceive), 950b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationData1D, 965e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationData2D, 975e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationData3D, 980b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationRead1D, 990b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationRead2D, 1005e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationRead3D, 1015e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationLock1D, 1020b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationUnlock1D, 1030b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationData1D_alloc, 1045e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationData2D_alloc, 1055e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationData3D_alloc, 1065e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdAllocationElementData1D, 1070b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationElementData2D, 1080b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdAllocationGenerateMipmaps 1095e0a3043af16bc71a4211ee00dc00724de6623a7David Krause }, 1105e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1115e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1120b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent { 1130b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdProgramStoreInit), 1145e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdProgramStoreSetActive), 1155e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdProgramStoreDestroy) 1160b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent }, 1170b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 1185e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 1195e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdProgramRasterInit), 1205e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdProgramRasterSetActive), 1210b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdProgramRasterDestroy) 1220b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent }, 1235e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1245e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 1255e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdProgramVertexInit), 1260b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdProgramVertexSetActive), 1270b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdProgramVertexDestroy) 1285e0a3043af16bc71a4211ee00dc00724de6623a7David Krause }, 1295e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1305e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 1315e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdProgramFragmentInit), 1325e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdProgramFragmentSetActive), 1330b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdProgramFragmentDestroy) 1340b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent }, 1355e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1365e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 1375e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdMeshInit), 1380b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdMeshDraw), 1390b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdMeshDestroy) 1405e0a3043af16bc71a4211ee00dc00724de6623a7David Krause }, 1415e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1420b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent { 1430b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdPathInitStatic), 1445e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdPathInitDynamic), 1455e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdPathDraw), 1465e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdPathDestroy) 1470b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent }, 1480b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 1495e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 1505e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdSamplerInit, 1510b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdSamplerDestroy 1520b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent }, 1535e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1545e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 1550b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdFrameBufferInit), 1560b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent NATIVE_FUNC(rsdFrameBufferSetActive), 1575e0a3043af16bc71a4211ee00dc00724de6623a7David Krause NATIVE_FUNC(rsdFrameBufferDestroy) 1585e0a3043af16bc71a4211ee00dc00724de6623a7David Krause }, 1595e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1605e0a3043af16bc71a4211ee00dc00724de6623a7David Krause { 1610b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptGroupInit, 1620b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsdScriptGroupSetInput, 1635e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptGroupSetOutput, 1645e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptGroupExecute, 1655e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdScriptGroupDestroy 1660b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent } 1670b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 1685e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1695e0a3043af16bc71a4211ee00dc00724de6623a7David Krause}; 1705e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1710b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurentextern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name); 1720b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 1735e0a3043af16bc71a4211ee00dc00724de6623a7David Krausestatic RsdCpuReference::CpuScript * LookupScript(Context *, const Script *s) { 1745e0a3043af16bc71a4211ee00dc00724de6623a7David Krause return (RsdCpuReference::CpuScript *)s->mHal.drv; 1755e0a3043af16bc71a4211ee00dc00724de6623a7David Krause} 1760b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 1770b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurentextern "C" bool rsdHalInit(RsContext c, uint32_t version_major, 1785e0a3043af16bc71a4211ee00dc00724de6623a7David Krause uint32_t version_minor) { 1795e0a3043af16bc71a4211ee00dc00724de6623a7David Krause Context *rsc = (Context*) c; 1805e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsc->mHal.funcs = FunctionTable; 1810b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent 1820b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent RsdHal *dc = (RsdHal *)calloc(1, sizeof(RsdHal)); 1835e0a3043af16bc71a4211ee00dc00724de6623a7David Krause if (!dc) { 1845e0a3043af16bc71a4211ee00dc00724de6623a7David Krause ALOGE("Calloc for driver hal failed."); 1855e0a3043af16bc71a4211ee00dc00724de6623a7David Krause return false; 1860b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent } 1870b62e242d112d46e9357242b0a4e11c720c98ca0Eric Laurent rsc->mHal.drv = dc; 1885e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1895e0a3043af16bc71a4211ee00dc00724de6623a7David Krause dc->mCpuRef = RsdCpuReference::create(rsc, version_major, version_minor, 1905e0a3043af16bc71a4211ee00dc00724de6623a7David Krause &rsdLookupRuntimeStub, &LookupScript); 1915e0a3043af16bc71a4211ee00dc00724de6623a7David Krause if (!dc->mCpuRef) { 1925e0a3043af16bc71a4211ee00dc00724de6623a7David Krause ALOGE("RsdCpuReference::create for driver hal failed."); 1935e0a3043af16bc71a4211ee00dc00724de6623a7David Krause free(dc); 1945e0a3043af16bc71a4211ee00dc00724de6623a7David Krause return false; 1955e0a3043af16bc71a4211ee00dc00724de6623a7David Krause } 1965e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 1975e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#ifndef RS_COMPATIBILITY_LIB 1985e0a3043af16bc71a4211ee00dc00724de6623a7David Krause // Set a callback for compiler setup here. 1995e0a3043af16bc71a4211ee00dc00724de6623a7David Krause if (false) { 2005e0a3043af16bc71a4211ee00dc00724de6623a7David Krause dc->mCpuRef->setSetupCompilerCallback(NULL); 2015e0a3043af16bc71a4211ee00dc00724de6623a7David Krause } 2025e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2035e0a3043af16bc71a4211ee00dc00724de6623a7David Krause // Set a callback for switching MemChunk's allocator here. 2045e0a3043af16bc71a4211ee00dc00724de6623a7David Krause // Note that the allocation function must return page-aligned memory, so 2055e0a3043af16bc71a4211ee00dc00724de6623a7David Krause // that it can be mprotected properly (i.e. code should be written and 2065e0a3043af16bc71a4211ee00dc00724de6623a7David Krause // later switched to read+execute only). 2075e0a3043af16bc71a4211ee00dc00724de6623a7David Krause if (false) { 2085e0a3043af16bc71a4211ee00dc00724de6623a7David Krause MemChunk::registerAllocFreeCallbacks( 2095e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsc->mHal.funcs.allocRuntimeMem, 2105e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsc->mHal.funcs.freeRuntimeMem); 2115e0a3043af16bc71a4211ee00dc00724de6623a7David Krause } 2125e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#endif 2135e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2145e0a3043af16bc71a4211ee00dc00724de6623a7David Krause return true; 2155e0a3043af16bc71a4211ee00dc00724de6623a7David Krause} 2165e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2175e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2185e0a3043af16bc71a4211ee00dc00724de6623a7David Krausevoid SetPriority(const Context *rsc, int32_t priority) { 2195e0a3043af16bc71a4211ee00dc00724de6623a7David Krause RsdHal *dc = (RsdHal *)rsc->mHal.drv; 2205e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2215e0a3043af16bc71a4211ee00dc00724de6623a7David Krause dc->mCpuRef->setPriority(priority); 2225e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2235e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#ifndef RS_COMPATIBILITY_LIB 2245e0a3043af16bc71a4211ee00dc00724de6623a7David Krause if (dc->mHasGraphics) { 2255e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsdGLSetPriority(rsc, priority); 2265e0a3043af16bc71a4211ee00dc00724de6623a7David Krause } 2275e0a3043af16bc71a4211ee00dc00724de6623a7David Krause#endif 2285e0a3043af16bc71a4211ee00dc00724de6623a7David Krause} 2295e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2305e0a3043af16bc71a4211ee00dc00724de6623a7David Krausevoid Shutdown(Context *rsc) { 2315e0a3043af16bc71a4211ee00dc00724de6623a7David Krause RsdHal *dc = (RsdHal *)rsc->mHal.drv; 2325e0a3043af16bc71a4211ee00dc00724de6623a7David Krause delete dc->mCpuRef; 2335e0a3043af16bc71a4211ee00dc00724de6623a7David Krause rsc->mHal.drv = NULL; 2345e0a3043af16bc71a4211ee00dc00724de6623a7David Krause} 2355e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2365e0a3043af16bc71a4211ee00dc00724de6623a7David Krausevoid* rsdAllocRuntimeMem(size_t size, uint32_t flags) { 2375e0a3043af16bc71a4211ee00dc00724de6623a7David Krause void* buffer = calloc(size, sizeof(char)); 2385e0a3043af16bc71a4211ee00dc00724de6623a7David Krause return buffer; 2395e0a3043af16bc71a4211ee00dc00724de6623a7David Krause} 2405e0a3043af16bc71a4211ee00dc00724de6623a7David Krause 2415e0a3043af16bc71a4211ee00dc00724de6623a7David Krausevoid rsdFreeRuntimeMem(void* ptr) { 2425e0a3043af16bc71a4211ee00dc00724de6623a7David Krause free(ptr); 2435e0a3043af16bc71a4211ee00dc00724de6623a7David Krause} 2445e0a3043af16bc71a4211ee00dc00724de6623a7David Krause