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" 24110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#ifndef RS_COMPATIBILITY_LIB 25a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines #include "MemChunk.h" 26110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdGL.h" 27110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdPath.h" 28110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramStore.h" 29110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramRaster.h" 30110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramVertex.h" 31110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdProgramFragment.h" 32110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdMesh.h" 33110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #include "rsdFrameBuffer.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 47bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsusing namespace android; 48bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsusing namespace android::renderscript; 49bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 50cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsstatic void Shutdown(Context *rsc); 51cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsstatic void SetPriority(const Context *rsc, int32_t priority); 52cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 53110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#ifndef RS_COMPATIBILITY_LIB 54110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #define NATIVE_FUNC(a) a 55110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#else 56110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams #define NATIVE_FUNC(a) NULL 57110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#endif 58110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams 59110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams 60bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsstatic RsdHalFunctions FunctionTable = { 61110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdGLInit), 62110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdGLShutdown), 63110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdGLSetSurface), 64110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdGLSwap), 654b3de47071d875faaa7d419d050a464b09538797Jason Sams 66cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Shutdown, 67bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams NULL, 68cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams SetPriority, 6934689388556747b52c3c2f1c894929fb44580898Tim Murray rsdAllocRuntimeMem, 7034689388556747b52c3c2f1c894929fb44580898Tim Murray rsdFreeRuntimeMem, 71bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams { 72bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsdScriptInit, 738eaba4fee0c7b5325742c87187622fdff51d5effJason Sams rsdInitIntrinsic, 74bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsdScriptInvokeFunction, 75bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsdScriptInvokeRoot, 76cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams rsdScriptInvokeForEach, 77bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsdScriptInvokeInit, 784ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines rsdScriptInvokeFreeChildren, 79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsdScriptSetGlobalVar, 809c64239ebbfa4170190ede812e69150035e008e0Tim Murray rsdScriptGetGlobalVar, 812980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines rsdScriptSetGlobalVarWithElemDims, 82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsdScriptSetGlobalBind, 83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsdScriptSetGlobalObj, 844b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes rsdScriptDestroy, 85a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdScriptInvokeForEachMulti, 86a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdScriptUpdateCachedObject 878feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams }, 888feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 89eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams { 90eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationInit, 91eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationDestroy, 92ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams rsdAllocationGrallocBits, 93eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationResize, 94eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationSyncAll, 95eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationMarkDirty, 96110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdAllocationSetSurface), 97110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdAllocationIoSend), 98110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdAllocationIoReceive), 99eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationData1D, 100eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationData2D, 101eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationData3D, 102807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams rsdAllocationRead1D, 103807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams rsdAllocationRead2D, 104807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams rsdAllocationRead3D, 105807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams rsdAllocationLock1D, 106807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams rsdAllocationUnlock1D, 10774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsdAllocationData1D_alloc, 10874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsdAllocationData2D_alloc, 10974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsdAllocationData3D_alloc, 110eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams rsdAllocationElementData1D, 11161a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Sams rsdAllocationElementData2D, 112a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdAllocationGenerateMipmaps, 113a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdAllocationUpdateCachedObject 114eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams }, 115eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 1168feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 1178feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams { 118110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramStoreInit), 119110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramStoreSetActive), 120110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramStoreDestroy) 121721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams }, 122721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams 123721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams { 124110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramRasterInit), 125110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramRasterSetActive), 126110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramRasterDestroy) 127a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk }, 128a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 129a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk { 130110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramVertexInit), 131110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramVertexSetActive), 132110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramVertexDestroy) 133a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk }, 134a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 135a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk { 136110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramFragmentInit), 137110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramFragmentSetActive), 138110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdProgramFragmentDestroy) 139a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk }, 140a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 141a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk { 142110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdMeshInit), 143110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdMeshDraw), 144110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdMeshDestroy) 1457f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk }, 1467f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk 1477f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk { 148110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdPathInitStatic), 149110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdPathInitDynamic), 150110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdPathDraw), 151110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdPathDestroy) 1529e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams }, 1539e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams 1549e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams { 1557f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk rsdSamplerInit, 156a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdSamplerDestroy, 157a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdSamplerUpdateCachedObject 1587f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk }, 1598feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 160da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk { 161110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdFrameBufferInit), 162110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdFrameBufferSetActive), 163110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams NATIVE_FUNC(rsdFrameBufferDestroy) 164da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk }, 165da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk 166dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams { 167dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams rsdScriptGroupInit, 168dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams rsdScriptGroupSetInput, 169dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams rsdScriptGroupSetOutput, 170dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams rsdScriptGroupExecute, 171a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdScriptGroupDestroy, 172a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams NULL 173a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams }, 174a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 175a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams { 176a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdTypeInit, 177a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdTypeDestroy, 178a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdTypeUpdateCachedObject 179a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams }, 180a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 181a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams { 182a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdElementInit, 183a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdElementDestroy, 184a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams rsdElementUpdateCachedObject 1859761c3fcb8cf2ce89a29cb9202e4282d94f33d9dJason Sams }, 186dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 1879761c3fcb8cf2ce89a29cb9202e4282d94f33d9dJason Sams NULL // finish 188bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams}; 189bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 190709a0978ae141198018ca9769f8d96292a8928e6Jason Samsextern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name); 191cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 192709a0978ae141198018ca9769f8d96292a8928e6Jason Samsstatic RsdCpuReference::CpuScript * LookupScript(Context *, const Script *s) { 193709a0978ae141198018ca9769f8d96292a8928e6Jason Sams return (RsdCpuReference::CpuScript *)s->mHal.drv; 194cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams} 195cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 196414a46166126da6864258bd25ff183f9a3c6261dStephen Hinesextern "C" bool rsdHalInit(RsContext c, uint32_t version_major, 197414a46166126da6864258bd25ff183f9a3c6261dStephen Hines uint32_t version_minor) { 198414a46166126da6864258bd25ff183f9a3c6261dStephen Hines Context *rsc = (Context*) c; 199bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams rsc->mHal.funcs = FunctionTable; 200bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 20187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams RsdHal *dc = (RsdHal *)calloc(1, sizeof(RsdHal)); 2022cfe51e7a9eef3dec091ce7c15d2a5a2216e9d3eJason Sams if (!dc) { 203af12ac6a08651464f8d823add667c706f993b587Steve Block ALOGE("Calloc for driver hal failed."); 204bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams return false; 205bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } 206cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams rsc->mHal.drv = dc; 207bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 208a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines dc->mCpuRef = RsdCpuReference::create(rsc, version_major, version_minor, 209709a0978ae141198018ca9769f8d96292a8928e6Jason Sams &rsdLookupRuntimeStub, &LookupScript); 210709a0978ae141198018ca9769f8d96292a8928e6Jason Sams if (!dc->mCpuRef) { 211709a0978ae141198018ca9769f8d96292a8928e6Jason Sams ALOGE("RsdCpuReference::create for driver hal failed."); 21207ef704308b514272ed2f5c3e6a2f4c055550158Jens Gulin rsc->mHal.drv = NULL; 213709a0978ae141198018ca9769f8d96292a8928e6Jason Sams free(dc); 214cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams return false; 215cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams } 216cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 217b7d9c80c98fc96aa7c638e3124be24f13a6436b2Stephen Hines#ifndef RS_COMPATIBILITY_LIB 218b7d9c80c98fc96aa7c638e3124be24f13a6436b2Stephen Hines // Set a callback for compiler setup here. 219b7d9c80c98fc96aa7c638e3124be24f13a6436b2Stephen Hines if (false) { 220b7d9c80c98fc96aa7c638e3124be24f13a6436b2Stephen Hines dc->mCpuRef->setSetupCompilerCallback(NULL); 221b7d9c80c98fc96aa7c638e3124be24f13a6436b2Stephen Hines } 222a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines 223a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines // Set a callback for switching MemChunk's allocator here. 224a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines // Note that the allocation function must return page-aligned memory, so 225a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines // that it can be mprotected properly (i.e. code should be written and 226a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines // later switched to read+execute only). 227a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines if (false) { 228a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines MemChunk::registerAllocFreeCallbacks( 229a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines rsc->mHal.funcs.allocRuntimeMem, 230a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines rsc->mHal.funcs.freeRuntimeMem); 231a221f569d741a425beca4f111931e12177e3a3f3Stephen Hines } 232b7d9c80c98fc96aa7c638e3124be24f13a6436b2Stephen Hines#endif 233b7d9c80c98fc96aa7c638e3124be24f13a6436b2Stephen Hines 234bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams return true; 235bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 236bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 237cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 238cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsvoid SetPriority(const Context *rsc, int32_t priority) { 23987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams RsdHal *dc = (RsdHal *)rsc->mHal.drv; 240709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 241709a0978ae141198018ca9769f8d96292a8928e6Jason Sams dc->mCpuRef->setPriority(priority); 242709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 243110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#ifndef RS_COMPATIBILITY_LIB 2449719bd4a0187c400ba868712612fe66da4635aacJason Sams if (dc->mHasGraphics) { 2459719bd4a0187c400ba868712612fe66da4635aacJason Sams rsdGLSetPriority(rsc, priority); 2469719bd4a0187c400ba868712612fe66da4635aacJason Sams } 247110f181b7966212a36ef18016f9b81c7322d0a2fJason Sams#endif 248cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams} 249cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 250cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsvoid Shutdown(Context *rsc) { 25187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams RsdHal *dc = (RsdHal *)rsc->mHal.drv; 252709a0978ae141198018ca9769f8d96292a8928e6Jason Sams delete dc->mCpuRef; 25307ef704308b514272ed2f5c3e6a2f4c055550158Jens Gulin free(dc); 254709a0978ae141198018ca9769f8d96292a8928e6Jason Sams rsc->mHal.drv = NULL; 255cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams} 256cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 25734689388556747b52c3c2f1c894929fb44580898Tim Murrayvoid* rsdAllocRuntimeMem(size_t size, uint32_t flags) { 25834689388556747b52c3c2f1c894929fb44580898Tim Murray void* buffer = calloc(size, sizeof(char)); 25934689388556747b52c3c2f1c894929fb44580898Tim Murray return buffer; 26034689388556747b52c3c2f1c894929fb44580898Tim Murray} 26134689388556747b52c3c2f1c894929fb44580898Tim Murray 26234689388556747b52c3c2f1c894929fb44580898Tim Murrayvoid rsdFreeRuntimeMem(void* ptr) { 26334689388556747b52c3c2f1c894929fb44580898Tim Murray free(ptr); 26434689388556747b52c3c2f1c894929fb44580898Tim Murray} 265