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