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