rsdRuntimeStubs.cpp revision 74a827988567a9d65954bb0d825a3ba4a97e2947
187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams/*
2a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * you may not use this file except in compliance with the License.
687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * You may obtain a copy of the License at
787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams *
1087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Unless required by applicable law or agreed to in writing, software
1187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * See the License for the specific language governing permissions and
1487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * limitations under the License.
1587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams */
1687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
1787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsContext.h"
1887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsScriptC.h"
1987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix4x4.h"
2087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix3x3.h"
2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix2x2.h"
2287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsRuntime.h"
2387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "utils/Timers.h"
2587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsdCore.h"
2687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsdRuntime.h"
2887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <time.h>
3087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android;
3287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android::renderscript;
3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#define GET_TLS()  ScriptTLSStruct * tls = \
3583c451a4ef4388e002482e383d488ca9b7b7600dJason Sams    (ScriptTLSStruct *)pthread_getspecific(rsdgThreadTLSKey); \
3687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    Context * rsc = tls->mContext; \
3787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC * sc = (ScriptC *) tls->mScript
3887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
4287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Allocation
4387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
4487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_allocGetDimX(Allocation *a) {
4687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a->mHal.state.dimensionX;
4787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
4887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_allocGetDimY(Allocation *a) {
5087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a->mHal.state.dimensionY;
5187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
5387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_allocGetDimZ(Allocation *a) {
5487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a->mHal.state.dimensionZ;
5587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
5787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_allocGetDimLOD(Allocation *a) {
5887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a->mHal.state.hasMipmaps;
5987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
6087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
6187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_allocGetDimFaces(Allocation *a) {
6287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a->mHal.state.hasFaces;
6387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
6487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
6587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic const void * SC_getElementAtX(Allocation *a, uint32_t x) {
6687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    const uint8_t *p = (const uint8_t *)a->getPtr();
6787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return &p[a->mHal.state.elementSizeBytes * x];
6887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
6987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic const void * SC_getElementAtXY(Allocation *a, uint32_t x, uint32_t y) {
7187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    const uint8_t *p = (const uint8_t *)a->getPtr();
7287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return &p[a->mHal.state.elementSizeBytes * (x + y * a->mHal.state.dimensionX)];
7387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
7487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic const void * SC_getElementAtXYZ(Allocation *a, uint32_t x, uint32_t y, uint32_t z) {
7687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    const uint8_t *p = (const uint8_t *)a->getPtr();
7787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return &p[a->mHal.state.elementSizeBytes * (x + y * a->mHal.state.dimensionX +
7887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams              z * a->mHal.state.dimensionX * a->mHal.state.dimensionY)];
7987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
8087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
8187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll2(Allocation *a, RsAllocationUsageType source) {
8287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
8387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, source);
8487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
8587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
8687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll(Allocation *a) {
8787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
8887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, RS_ALLOCATION_USAGE_SCRIPT);
8987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
9087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
9174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy1DRange(Allocation *dstAlloc,
9274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstOff,
9374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip,
9474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t count,
9574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
9674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcOff, uint32_t srcMip) {
9774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
9874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
9974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
10074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy2DRange(Allocation *dstAlloc,
10174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstXoff, uint32_t dstYoff,
10274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip, uint32_t dstFace,
10374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t width, uint32_t height,
10474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
10574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcXoff, uint32_t srcYoff,
10674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcMip, uint32_t srcFace) {
10774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
10874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
10974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
11074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
11187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsconst Allocation * SC_getAllocation(const void *ptr) {
11287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
11387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetAllocation(rsc, sc, ptr);
11487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
11587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
11687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
11787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
11887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Context
11987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
12087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
12187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindTexture(ProgramFragment *pf, uint32_t slot, Allocation *a) {
12287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
12387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindTexture(rsc, sc, pf, slot, a);
12487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
12587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
12687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindSampler(ProgramFragment *pf, uint32_t slot, Sampler *s) {
12787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
12887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindSampler(rsc, sc, pf, slot, s);
12987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
13087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
13187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramStore(ProgramStore *ps) {
13287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
13387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramStore(rsc, sc, ps);
13487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
13587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
13687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramFragment(ProgramFragment *pf) {
13787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
13887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramFragment(rsc, sc, pf);
13987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
14087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
14187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramVertex(ProgramVertex *pv) {
14287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
14387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramVertex(rsc, sc, pv);
14487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
14587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
14687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramRaster(ProgramRaster *pr) {
14787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
14887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramRaster(rsc, sc, pr);
14987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectColorTarget(Allocation *a, uint32_t slot) {
15287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectColorTarget(rsc, sc, a, slot);
15487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectDepthTarget(Allocation *a) {
15787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectDepthTarget(rsc, sc, a);
15987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectColorTarget(uint32_t slot) {
16287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
16387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectColorTarget(rsc, sc, slot);
16487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectDepthTarget(Context *, Script *) {
16787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
16887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectDepthTarget(rsc, sc);
16987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
17087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectTargets(Context *, Script *) {
17287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
17387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectTargets(rsc, sc);
17487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
17587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
17887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// VP
17987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
18087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadProjectionMatrix(const rsc_Matrix *m) {
18287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadProjectionMatrix(rsc, sc, m);
18487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
18587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadModelMatrix(const rsc_Matrix *m) {
18787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadModelMatrix(rsc, sc, m);
18987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
19087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadTextureMatrix(const rsc_Matrix *m) {
19287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
19387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadTextureMatrix(rsc, sc, m);
19487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
19587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_PfConstantColor(ProgramFragment *pf, float r, float g, float b, float a) {
19787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
19887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrPfConstantColor(rsc, sc, pf, r, g, b, a);
19987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
20087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpGetProjectionMatrix(rsc_Matrix *m) {
20287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
20387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpGetProjectionMatrix(rsc, sc, m);
20487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
20587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
20887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Drawing
20987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
21087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
21287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x2, float y2, float z2, float u2, float v2,
21387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x3, float y3, float z3, float u3, float v3,
21487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x4, float y4, float z4, float u4, float v4) {
21587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
21687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawQuadTexCoords(rsc, sc,
21787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x1, y1, z1, u1, v1,
21887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x2, y2, z2, u2, v2,
21987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x3, y3, z3, u3, v3,
22087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x4, y4, z4, u4, v4);
22187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
22287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuad(float x1, float y1, float z1,
22487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x2, float y2, float z2,
22587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x3, float y3, float z3,
22687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x4, float y4, float z4) {
22787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
22887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawQuad(rsc, sc, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4);
22987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
23087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
23187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) {
23287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
23387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawSpriteScreenspace(rsc, sc, x, y, z, w, h);
23487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
23587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
23687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawRect(float x1, float y1, float x2, float y2, float z) {
23787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
23887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawRect(rsc, sc, x1, y1, x2, y2, z);
23987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
24087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
24187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMesh(Mesh *m) {
24287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
24387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMesh(rsc, sc, m);
24487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
24587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
24687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitive(Mesh *m, uint32_t primIndex) {
24787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
24887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitive(rsc, sc, m, primIndex);
24987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
25087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
25187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitiveRange(Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len) {
25287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
25387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitiveRange(rsc, sc, m, primIndex, start, len);
25487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
25587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
25687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeshComputeBoundingBox(Mesh *m,
25787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *minX, float *minY, float *minZ,
25887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *maxX, float *maxY, float *maxZ) {
25987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
26087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeshComputeBoundingBox(rsc, sc, m, minX, minY, minZ, maxX, maxY, maxZ);
26187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
26287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
26687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
26787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
26887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Color(float r, float g, float b, float a) {
27187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
27287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrColor(rsc, sc, r, g, b, a);
27387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
27487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Finish() {
27687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
27787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrFinish(rsc, sc);
27887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
27987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearColor(float r, float g, float b, float a) {
28187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
28287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearColor(rsc, sc, r, g, b, a);
28387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
28487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearDepth(float v) {
28687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
28787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearDepth(rsc, sc, v);
28887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
28987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetWidth() {
29187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
29287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetWidth(rsc, sc);
29387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetHeight() {
29687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
29787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetHeight(rsc, sc);
29887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
30087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawTextAlloc(Allocation *a, int x, int y) {
30187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
30287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawTextAlloc(rsc, sc, a, x, y);
30387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
30587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawText(const char *text, int x, int y) {
30687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
30787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawText(rsc, sc, text, x, y);
30887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
31087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureTextAlloc(Allocation *a,
31187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
31287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
31387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureTextAlloc(rsc, sc, a, left, right, top, bottom);
31487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
31587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
31687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureText(const char *text,
31787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                    int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
31887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
31987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureText(rsc, sc, text, left, right, top, bottom);
32087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFont(Font *f) {
32387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
32487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFont(rsc, sc, f);
32587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_FontColor(float r, float g, float b, float a) {
32887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
32987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrFontColor(rsc, sc, r, g, b, a);
33087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
33187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
33587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
33687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
33787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_SetObject(ObjectBase **dst, ObjectBase * src) {
33987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
34087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrSetObject(rsc, sc, dst, src);
34187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearObject(ObjectBase **dst) {
34487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
34587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearObject(rsc, sc, dst);
34687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic bool SC_IsObject(const ObjectBase *src) {
34987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
35087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrIsObject(rsc, sc, src);
35187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
35287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic const Allocation * SC_GetAllocation(const void *ptr) {
35787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
35887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetAllocation(rsc, sc, ptr);
35987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
36087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
36187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ForEach(Script *target,
36287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                Allocation *in,
36387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                Allocation *out,
36487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                const void *usr,
36587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                const RsScriptCall *call) {
36687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
36787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, NULL);
36887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
36987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
37087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ForEach2(Script *target,
37187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                 Allocation *in,
37287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                 Allocation *out,
37387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                 const void *usr,
37487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                 const RsScriptCall *call) {
37587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
37687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, call);
37787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
37887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
37987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
38087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
38187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
38287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Time routines
38387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
38487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
38587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic float SC_GetDt() {
38687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
38787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetDt(rsc, sc);
38887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
38987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
39087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstime_t SC_Time(time_t *timer) {
39187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
39287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrTime(rsc, sc, timer);
39387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
39487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
39587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstm* SC_LocalTime(tm *local, time_t *timer) {
39687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
39787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrLocalTime(rsc, sc, local, timer);
39887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
39987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeMillis() {
40187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
40287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeMillis(rsc, sc);
40387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
40487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeNanos() {
40687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
40787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeNanos(rsc, sc);
40887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
40987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
41087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
41187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Message routines
41287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
41387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
41487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient2(int cmdID, void *data, int len) {
41587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
41687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, data, len);
41787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
41887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
41987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient(int cmdID) {
42087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
42187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, NULL, 0);
42287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
42387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking2(int cmdID, void *data, int len) {
42587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
42687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, data, len);
42787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
42887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking(int cmdID) {
43087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
43187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, NULL, 0);
43287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
43387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
43487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_divsi3(int a, int b) {
43587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
43687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
43787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
43887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_modsi3(int a, int b) {
43987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
44087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
44287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_udivsi3(unsigned int a, unsigned int b) {
44387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
44487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
44687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_umodsi3(unsigned int a, unsigned int b) {
44787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
44887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
45087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugF(const char *s, float f) {
45187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s %f, 0x%08x", s, f, *((int *) (&f)));
45287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv2(const char *s, float f1, float f2) {
45487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s {%f, %f}", s, f1, f2);
45587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv3(const char *s, float f1, float f2, float f3) {
45787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s {%f, %f, %f}", s, f1, f2, f3);
45887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) {
46087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
46187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugD(const char *s, double d) {
46387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d)));
46487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM4v4(const char *s, const float *f) {
46687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
46787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s  %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
46887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s  %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]);
46987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s  %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]);
47087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM3v3(const char *s, const float *f) {
47287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]);
47387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s  %f, %f, %f", s, f[1], f[4], f[7]);
47487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s  %f, %f, %f}",s, f[2], f[5], f[8]);
47587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM2v2(const char *s, const float *f) {
47787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s {%f, %f", s, f[0], f[2]);
47887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s  %f, %f}",s, f[1], f[3]);
47987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
48187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugI32(const char *s, int32_t i) {
48287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s %i  0x%x", s, i, i);
48387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugU32(const char *s, uint32_t i) {
48587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s %u  0x%x", s, i, i);
48687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugLL64(const char *s, long long ll) {
48887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s %lld  0x%llx", s, ll, ll);
48987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugULL64(const char *s, unsigned long long ll) {
49187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s %llu  0x%llx", s, ll, ll);
49287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
49487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugP(const char *s, const void *p) {
49587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGD("%s %p", s, p);
49687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
49887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
49987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
50087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Stub implementation
50187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
50287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
50387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// llvm name mangling ref
50487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//  <builtin-type> ::= v  # void
50587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= b  # bool
50687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= c  # char
50787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= a  # signed char
50887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= h  # unsigned char
50987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= s  # short
51087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= t  # unsigned short
51187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= i  # int
51287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= j  # unsigned int
51387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= l  # long
51487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= m  # unsigned long
51587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= x  # long long, __int64
51687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= y  # unsigned long long, __int64
51787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= f  # float
51887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= d  # double
51987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
52087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic RsdSymbolTable gSyms[] = {
52187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "__divsi3", (void *)&SC_divsi3, true },
52287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "__modsi3", (void *)&SC_modsi3, true },
52387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "__udivsi3", (void *)&SC_udivsi3, true },
52487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "__umodsi3", (void *)&SC_umodsi3, true },
52587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memset", (void *)&memset, true },
52687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memcpy", (void *)&memcpy, true },
52787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
52887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Refcounting
52987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_SetObject, true },
53087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_element", (void *)&SC_ClearObject, true },
53187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_element", (void *)&SC_IsObject, true },
53287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
53387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_SetObject, true },
53487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_type", (void *)&SC_ClearObject, true },
53587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_type", (void *)&SC_IsObject, true },
53687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
53787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_SetObject, true },
53887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP13rs_allocation", (void *)&SC_ClearObject, true },
53987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject13rs_allocation", (void *)&SC_IsObject, true },
54087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
54187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_SetObject, true },
54287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_sampler", (void *)&SC_ClearObject, true },
54387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_sampler", (void *)&SC_IsObject, true },
54487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
54587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_SetObject, true },
54687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP9rs_script", (void *)&SC_ClearObject, true },
54787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject9rs_script", (void *)&SC_IsObject, true },
54887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
54987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_meshS_", (void *)&SC_SetObject, true },
55087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_mesh", (void *)&SC_ClearObject, true },
55187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_mesh", (void *)&SC_IsObject, true },
55287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
55387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP19rs_program_fragmentS_", (void *)&SC_SetObject, true },
55487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP19rs_program_fragment", (void *)&SC_ClearObject, true },
55587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject19rs_program_fragment", (void *)&SC_IsObject, true },
55687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
55787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_vertexS_", (void *)&SC_SetObject, true },
55887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_vertex", (void *)&SC_ClearObject, true },
55987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_vertex", (void *)&SC_IsObject, true },
56087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
56187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_rasterS_", (void *)&SC_SetObject, true },
56287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_raster", (void *)&SC_ClearObject, true },
56387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_raster", (void *)&SC_IsObject, true },
56487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
56587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP16rs_program_storeS_", (void *)&SC_SetObject, true },
56687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP16rs_program_store", (void *)&SC_ClearObject, true },
56787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject16rs_program_store", (void *)&SC_IsObject, true },
56887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
56987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_fontS_", (void *)&SC_SetObject, true },
57087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_font", (void *)&SC_ClearObject, true },
57187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_font", (void *)&SC_IsObject, true },
57287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
57387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Allocation ops
57487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsAllocationGetDimX13rs_allocation", (void *)&SC_allocGetDimX, true },
57587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsAllocationGetDimY13rs_allocation", (void *)&SC_allocGetDimY, true },
57687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsAllocationGetDimZ13rs_allocation", (void *)&SC_allocGetDimZ, true },
57787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z21rsAllocationGetDimLOD13rs_allocation", (void *)&SC_allocGetDimLOD, true },
57887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z23rsAllocationGetDimFaces13rs_allocation", (void *)&SC_allocGetDimFaces, true },
57987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
58087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsGetElementAt13rs_allocationj", (void *)&SC_getElementAtX, true },
58187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsGetElementAt13rs_allocationjj", (void *)&SC_getElementAtXY, true },
58287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsGetElementAt13rs_allocationjjj", (void *)&SC_getElementAtXYZ, true },
58387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
58487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z15rsGetAllocationPKv", (void *)&SC_getAllocation, true },
58587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
58687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_AllocationSyncAll, true },
58787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocation", (void *)&SC_AllocationSyncAll, false },
58887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocationj", (void *)&SC_AllocationSyncAll2, false },
58974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z20rsgAllocationSyncAll13rs_allocation24rs_allocation_usage_type", (void *)&SC_AllocationSyncAll2, false },
59087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z15rsGetAllocationPKv", (void *)&SC_GetAllocation, true },
59187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
59274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy1DRange13rs_allocationjjjS_jj", (void *)&SC_AllocationCopy1DRange, false },
59374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy2DRange13rs_allocationjjj26rs_allocation_cubemap_facejjS_jjjS0_", (void *)&SC_AllocationCopy2DRange, false },
59487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
59587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Messaging
59687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
59787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClienti", (void *)&SC_ToClient, false },
59887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClientiPKvj", (void *)&SC_ToClient2, false },
59987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingi", (void *)&SC_ToClientBlocking, false },
60087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_ToClientBlocking2, false },
60187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
60287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_BindProgramFragment, false },
60387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_BindProgramStore, false },
60487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_BindProgramVertex, false },
60587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_BindProgramRaster, false },
60687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_BindSampler, false },
60787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_BindTexture, false },
60887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
60987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadProjectionMatrix, false },
61087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadModelMatrix, false },
61187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadTextureMatrix, false },
61287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
61387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_VpGetProjectionMatrix, false },
61487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
61587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_PfConstantColor, false },
61687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
61787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgGetWidthv", (void *)&SC_GetWidth, false },
61887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgGetHeightv", (void *)&SC_GetHeight, false },
61987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
62087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
62187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawRectfffff", (void *)&SC_DrawRect, false },
62287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_DrawQuad, false },
62387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_DrawQuadTexCoords, false },
62487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_DrawSpriteScreenspace, false },
62587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
62687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_DrawMesh, false },
62787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_DrawMeshPrimitive, false },
62887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_DrawMeshPrimitiveRange, false },
62987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_MeshComputeBoundingBox, false },
63087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
63187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false },
63287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false },
63387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
63487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false },
63587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false },
63687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false },
63787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false },
63887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
63987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false },
64087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false },
64187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
64287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindColorTarget13rs_allocationj", (void *)&SC_BindFrameBufferObjectColorTarget, false },
64387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindDepthTarget13rs_allocation", (void *)&SC_BindFrameBufferObjectDepthTarget, false },
64487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearColorTargetj", (void *)&SC_ClearFrameBufferObjectColorTarget, false },
64587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearDepthTargetv", (void *)&SC_ClearFrameBufferObjectDepthTarget, false },
64687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgClearAllRenderTargetsv", (void *)&SC_ClearFrameBufferObjectTargets, false },
64787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
64887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach, false },
64987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvj", (void *)&SC_ForEach2, false },
65087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
65187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // time
65287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z6rsTimePi", (void *)&SC_Time, true },
65387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsLocaltimeP5rs_tmPKi", (void *)&SC_LocalTime, true },
65487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsUptimeMillisv", (void*)&SC_UptimeMillis, true },
65587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsUptimeNanosv", (void*)&SC_UptimeNanos, true },
65687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsGetDtv", (void*)&SC_GetDt, false },
65787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
65887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // misc
65987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z5colorffff", (void *)&SC_Color, false },
66087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z9rsgFinishv", (void *)&SC_Finish, false },
66187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
66287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Debug
66387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcf", (void *)&SC_debugF, true },
66487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcff", (void *)&SC_debugFv2, true },
66587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcfff", (void *)&SC_debugFv3, true },
66687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcffff", (void *)&SC_debugFv4, true },
66787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcd", (void *)&SC_debugD, true },
66887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix4x4", (void *)&SC_debugFM4v4, true },
66987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix3x3", (void *)&SC_debugFM3v3, true },
67087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix2x2", (void *)&SC_debugFM2v2, true },
67187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKci", (void *)&SC_debugI32, true },
67287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcj", (void *)&SC_debugU32, true },
67387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Both "long" and "unsigned long" need to be redirected to their
67487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // 64-bit counterparts, since we have hacked Slang to use 64-bit
67587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // for "long" on Arm (to be similar to Java).
67687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcl", (void *)&SC_debugLL64, true },
67787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcm", (void *)&SC_debugULL64, true },
67887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcx", (void *)&SC_debugLL64, true },
67987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcy", (void *)&SC_debugULL64, true },
68087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPKv", (void *)&SC_debugP, true },
68187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { NULL, NULL, false }
68387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams};
68487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid* rsdLookupRuntimeStub(void* pContext, char const* name) {
68787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC *s = (ScriptC *)pContext;
68887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (!strcmp(name, "__isThreadable")) {
68987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams      return (void*) s->mHal.info.isThreadable;
69087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    } else if (!strcmp(name, "__clearThreadable")) {
69187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams      s->mHal.info.isThreadable = false;
69287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams      return NULL;
69387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
69487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
69587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    RsdSymbolTable *syms = gSyms;
69687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    const RsdSymbolTable *sym = rsdLookupSymbolMath(name);
69787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
69887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (!sym) {
69987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        while (syms->mPtr) {
70087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            if (!strcmp(syms->mName, name)) {
70187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                sym = syms;
70287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            }
70387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            syms++;
70487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        }
70587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
70687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (sym) {
70887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        s->mHal.info.isThreadable &= sym->threadable;
70987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        return sym->mPtr;
71087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
71187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    LOGE("ScriptC sym lookup failed for %s", name);
71287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return NULL;
71387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
71487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
71587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
716