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