rsdRuntimeStubs.cpp revision b322033c13487a174bb9c26466e9684d1ff4de8d
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"
289e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams#include "rsdPath.h"
29b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams#include "rsdAllocation.h"
3087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <time.h>
3287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android;
3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android::renderscript;
3587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#define GET_TLS()  ScriptTLSStruct * tls = \
3783c451a4ef4388e002482e383d488ca9b7b7600dJason Sams    (ScriptTLSStruct *)pthread_getspecific(rsdgThreadTLSKey); \
3887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    Context * rsc = tls->mContext; \
3987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC * sc = (ScriptC *) tls->mScript
4087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
4487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Allocation
4587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
4687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
4887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll2(Allocation *a, RsAllocationUsageType source) {
4987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
5087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, source);
5187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
5387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll(Allocation *a) {
5487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
5587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, RS_ALLOCATION_USAGE_SCRIPT);
5687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
5874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy1DRange(Allocation *dstAlloc,
5974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstOff,
6074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip,
6174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t count,
6274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
6374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcOff, uint32_t srcMip) {
6474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
65a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    rsrAllocationCopy1DRange(rsc, dstAlloc, dstOff, dstMip, count,
66a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcAlloc, srcOff, srcMip);
6774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
6874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
6974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy2DRange(Allocation *dstAlloc,
7074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstXoff, uint32_t dstYoff,
7174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip, uint32_t dstFace,
7274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t width, uint32_t height,
7374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
7474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcXoff, uint32_t srcYoff,
7574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcMip, uint32_t srcFace) {
7674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
77a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    rsrAllocationCopy2DRange(rsc, dstAlloc,
78a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             dstXoff, dstYoff, dstMip, dstFace,
79a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             width, height,
80a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcAlloc,
81a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcXoff, srcYoff, srcMip, srcFace);
8274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
8374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
84b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsstatic void SC_AllocationIoSend(Allocation *alloc) {
85b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    GET_TLS();
86b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    rsdAllocationIoSend(rsc, alloc);
87b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams}
88b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
89b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
90b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsstatic void SC_AllocationIoReceive(Allocation *alloc) {
91b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    GET_TLS();
92b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    rsdAllocationIoReceive(rsc, alloc);
93b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams}
94b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
95b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
9674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
9787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
9887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Context
9987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
10087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
10187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindTexture(ProgramFragment *pf, uint32_t slot, Allocation *a) {
10287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
10387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindTexture(rsc, sc, pf, slot, a);
10487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
10587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
106a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukstatic void SC_BindVertexConstant(ProgramVertex *pv, uint32_t slot, Allocation *a) {
107a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    GET_TLS();
108a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    rsrBindConstant(rsc, sc, pv, slot, a);
109a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk}
110a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
111a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukstatic void SC_BindFragmentConstant(ProgramFragment *pf, uint32_t slot, Allocation *a) {
112a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    GET_TLS();
113a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    rsrBindConstant(rsc, sc, pf, slot, a);
114a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk}
115a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
11687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindSampler(ProgramFragment *pf, uint32_t slot, Sampler *s) {
11787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
11887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindSampler(rsc, sc, pf, slot, s);
11987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
12087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
12187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramStore(ProgramStore *ps) {
12287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
12387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramStore(rsc, sc, ps);
12487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
12587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
12687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramFragment(ProgramFragment *pf) {
12787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
12887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramFragment(rsc, sc, pf);
12987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
13087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
13187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramVertex(ProgramVertex *pv) {
13287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
13387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramVertex(rsc, sc, pv);
13487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
13587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
13687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramRaster(ProgramRaster *pr) {
13787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
13887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramRaster(rsc, sc, pr);
13987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
14087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
14187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectColorTarget(Allocation *a, uint32_t slot) {
14287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
14387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectColorTarget(rsc, sc, a, slot);
14487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
14587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
14687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectDepthTarget(Allocation *a) {
14787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
14887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectDepthTarget(rsc, sc, a);
14987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectColorTarget(uint32_t slot) {
15287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectColorTarget(rsc, sc, slot);
15487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectDepthTarget(Context *, Script *) {
15787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectDepthTarget(rsc, sc);
15987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectTargets(Context *, Script *) {
16287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
16387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectTargets(rsc, sc);
16487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
16887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// VP
16987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
17087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadProjectionMatrix(const rsc_Matrix *m) {
17287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
17387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadProjectionMatrix(rsc, sc, m);
17487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
17587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadModelMatrix(const rsc_Matrix *m) {
17787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
17887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadModelMatrix(rsc, sc, m);
17987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
18087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadTextureMatrix(const rsc_Matrix *m) {
18287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadTextureMatrix(rsc, sc, m);
18487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
18587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_PfConstantColor(ProgramFragment *pf, float r, float g, float b, float a) {
18787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrPfConstantColor(rsc, sc, pf, r, g, b, a);
18987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
19087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpGetProjectionMatrix(rsc_Matrix *m) {
19287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
19387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpGetProjectionMatrix(rsc, sc, m);
19487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
19587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
19887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Drawing
19987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
20087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
20287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x2, float y2, float z2, float u2, float v2,
20387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x3, float y3, float z3, float u3, float v3,
20487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x4, float y4, float z4, float u4, float v4) {
20587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
20687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawQuadTexCoords(rsc, sc,
20787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x1, y1, z1, u1, v1,
20887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x2, y2, z2, u2, v2,
20987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x3, y3, z3, u3, v3,
21087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x4, y4, z4, u4, v4);
21187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
21287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuad(float x1, float y1, float z1,
21487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x2, float y2, float z2,
21587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x3, float y3, float z3,
21687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x4, float y4, float z4) {
21787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
21887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawQuad(rsc, sc, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4);
21987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
22087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) {
22287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
22387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawSpriteScreenspace(rsc, sc, x, y, z, w, h);
22487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
22587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawRect(float x1, float y1, float x2, float y2, float z) {
22787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
22887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawRect(rsc, sc, x1, y1, x2, y2, z);
22987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
23087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2319e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsstatic void SC_DrawPath(Path *p) {
2329e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    GET_TLS();
2339e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    //rsrDrawPath(rsc, sc, p);
2349e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    rsdPathDraw(rsc, p);
2359e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams}
2369e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
23787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMesh(Mesh *m) {
23887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
23987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMesh(rsc, sc, m);
24087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
24187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
24287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitive(Mesh *m, uint32_t primIndex) {
24387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
24487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitive(rsc, sc, m, primIndex);
24587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
24687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
24787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitiveRange(Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len) {
24887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
24987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitiveRange(rsc, sc, m, primIndex, start, len);
25087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
25187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
25287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeshComputeBoundingBox(Mesh *m,
25387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *minX, float *minY, float *minZ,
25487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *maxX, float *maxY, float *maxZ) {
25587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
25687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeshComputeBoundingBox(rsc, sc, m, minX, minY, minZ, maxX, maxY, maxZ);
25787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
25887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
25987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
26287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
26387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
26487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Color(float r, float g, float b, float a) {
26787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
26887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrColor(rsc, sc, r, g, b, a);
26987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
27087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Finish() {
27287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
273653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLFinish(rsc);
27487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
27587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearColor(float r, float g, float b, float a) {
27787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
278653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsrPrepareClear(rsc, sc);
279653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLClearColor(rsc, r, g, b, a);
28087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
28187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearDepth(float v) {
28387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
284653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsrPrepareClear(rsc, sc);
285653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLClearDepth(rsc, v);
28687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
28787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetWidth() {
28987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
29087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetWidth(rsc, sc);
29187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetHeight() {
29487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
29587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetHeight(rsc, sc);
29687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawTextAlloc(Allocation *a, int x, int y) {
29987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
30087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawTextAlloc(rsc, sc, a, x, y);
30187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
30387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawText(const char *text, int x, int y) {
30487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
30587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawText(rsc, sc, text, x, y);
30687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
30887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureTextAlloc(Allocation *a,
30987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
31087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
31187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureTextAlloc(rsc, sc, a, left, right, top, bottom);
31287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
31387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
31487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureText(const char *text,
31587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                    int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
31687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
31787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureText(rsc, sc, text, left, right, top, bottom);
31887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
31987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFont(Font *f) {
32187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
32287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFont(rsc, sc, f);
32387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_FontColor(float r, float g, float b, float a) {
32687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
32787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrFontColor(rsc, sc, r, g, b, a);
32887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
33387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
33487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
33587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_SetObject(ObjectBase **dst, ObjectBase * src) {
33787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
33887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrSetObject(rsc, sc, dst, src);
33987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearObject(ObjectBase **dst) {
34287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
34387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearObject(rsc, sc, dst);
34487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic bool SC_IsObject(const ObjectBase *src) {
34787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
34887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrIsObject(rsc, sc, src);
34987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
35087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic const Allocation * SC_GetAllocation(const void *ptr) {
35587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
35687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetAllocation(rsc, sc, ptr);
35787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
35887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
359c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAA(Script *target,
360c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *in,
361c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *out) {
362c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
363c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, NULL, 0, NULL);
364c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
365c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
366c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAU(Script *target,
367c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *in,
368c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *out,
369c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            const void *usr) {
37087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
37187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, NULL);
37287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
37387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
374c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAUS(Script *target,
375c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *in,
376c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *out,
377c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const void *usr,
378c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const RsScriptCall *call) {
37987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
38087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, call);
38187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
38287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
383c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAUL(Script *target,
384c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *in,
385c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *out,
386c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const void *usr,
387c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             uint32_t usrLen) {
388c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
389c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, usrLen, NULL);
390c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
391c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
392c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAULS(Script *target,
393c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              Allocation *in,
394c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              Allocation *out,
395c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              const void *usr,
396c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              uint32_t usrLen,
397c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              const RsScriptCall *call) {
398c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
399c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, usrLen, call);
400c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
401c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
40287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
40587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Time routines
40687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
40787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic float SC_GetDt() {
40987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
41087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetDt(rsc, sc);
41187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
41287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
41387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstime_t SC_Time(time_t *timer) {
41487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
41587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrTime(rsc, sc, timer);
41687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
41787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
41887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstm* SC_LocalTime(tm *local, time_t *timer) {
41987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
42087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrLocalTime(rsc, sc, local, timer);
42187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
42287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeMillis() {
42487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
42587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeMillis(rsc, sc);
42687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
42787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeNanos() {
42987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
43087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeNanos(rsc, sc);
43187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
43287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
43387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
43487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Message routines
43587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
43687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
43787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient2(int cmdID, void *data, int len) {
43887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
43987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, data, len);
44087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
44287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient(int cmdID) {
44387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
44487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, NULL, 0);
44587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
44787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking2(int cmdID, void *data, int len) {
44887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
44987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, data, len);
45087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
45287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking(int cmdID) {
45387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
45487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, NULL, 0);
45587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
45787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_divsi3(int a, int b) {
45887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
45987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
46187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_modsi3(int a, int b) {
46287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
46387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
46587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_udivsi3(unsigned int a, unsigned int b) {
46687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
46787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
46987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_umodsi3(unsigned int a, unsigned int b) {
47087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
47187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
47387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugF(const char *s, float f) {
4744a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f)));
47587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv2(const char *s, float f1, float f2) {
4774a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f}", s, f1, f2);
47887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv3(const char *s, float f1, float f2, float f3) {
4804a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f}", s, f1, f2, f3);
48187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) {
4834a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
48487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugD(const char *s, double d) {
4864a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d)));
48787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM4v4(const char *s, const float *f) {
4894a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
4904a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
4914a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]);
4924a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]);
49387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM3v3(const char *s, const float *f) {
4954a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]);
4964a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f", s, f[1], f[4], f[7]);
4974a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f}",s, f[2], f[5], f[8]);
49887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM2v2(const char *s, const float *f) {
5004a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f", s, f[0], f[2]);
5014a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f}",s, f[1], f[3]);
50287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
50487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugI32(const char *s, int32_t i) {
5054a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %i  0x%x", s, i, i);
50687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugU32(const char *s, uint32_t i) {
5084a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %u  0x%x", s, i, i);
50987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
51087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugLL64(const char *s, long long ll) {
5114a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %lld  0x%llx", s, ll, ll);
51287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
51387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugULL64(const char *s, unsigned long long ll) {
5144a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %llu  0x%llx", s, ll, ll);
51587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
51687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
51787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugP(const char *s, const void *p) {
5184a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %p", s, p);
51987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
52087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
52187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
52287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
52387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Stub implementation
52487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
52587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
52687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// llvm name mangling ref
52787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//  <builtin-type> ::= v  # void
52887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= b  # bool
52987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= c  # char
53087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= a  # signed char
53187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= h  # unsigned char
53287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= s  # short
53387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= t  # unsigned short
53487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= i  # int
53587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= j  # unsigned int
53687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= l  # long
53787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= m  # unsigned long
53887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= x  # long long, __int64
53987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= y  # unsigned long long, __int64
54087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= f  # float
54187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= d  # double
54287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
54387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic RsdSymbolTable gSyms[] = {
54487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memset", (void *)&memset, true },
54587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memcpy", (void *)&memcpy, true },
54687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
54787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Refcounting
54887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_SetObject, true },
54987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_element", (void *)&SC_ClearObject, true },
55087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_element", (void *)&SC_IsObject, true },
55187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
55287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_SetObject, true },
55387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_type", (void *)&SC_ClearObject, true },
55487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_type", (void *)&SC_IsObject, true },
55587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
55687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_SetObject, true },
55787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP13rs_allocation", (void *)&SC_ClearObject, true },
55887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject13rs_allocation", (void *)&SC_IsObject, true },
55987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
56087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_SetObject, true },
56187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_sampler", (void *)&SC_ClearObject, true },
56287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_sampler", (void *)&SC_IsObject, true },
56387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
56487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_SetObject, true },
56587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP9rs_script", (void *)&SC_ClearObject, true },
56687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject9rs_script", (void *)&SC_IsObject, true },
56787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
5689e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z11rsSetObjectP7rs_pathS_", (void *)&SC_SetObject, true },
5699e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z13rsClearObjectP7rs_path", (void *)&SC_ClearObject, true },
5709e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z10rsIsObject7rs_path", (void *)&SC_IsObject, true },
5719e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
57287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_meshS_", (void *)&SC_SetObject, true },
57387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_mesh", (void *)&SC_ClearObject, true },
57487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_mesh", (void *)&SC_IsObject, true },
57587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
57687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP19rs_program_fragmentS_", (void *)&SC_SetObject, true },
57787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP19rs_program_fragment", (void *)&SC_ClearObject, true },
57887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject19rs_program_fragment", (void *)&SC_IsObject, true },
57987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
58087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_vertexS_", (void *)&SC_SetObject, true },
58187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_vertex", (void *)&SC_ClearObject, true },
58287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_vertex", (void *)&SC_IsObject, true },
58387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
58487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_rasterS_", (void *)&SC_SetObject, true },
58587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_raster", (void *)&SC_ClearObject, true },
58687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_raster", (void *)&SC_IsObject, true },
58787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
58887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP16rs_program_storeS_", (void *)&SC_SetObject, true },
58987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP16rs_program_store", (void *)&SC_ClearObject, true },
59087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject16rs_program_store", (void *)&SC_IsObject, true },
59187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
59287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_fontS_", (void *)&SC_SetObject, true },
59387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_font", (void *)&SC_ClearObject, true },
59487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_font", (void *)&SC_IsObject, true },
59587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
59687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Allocation ops
59787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_AllocationSyncAll, true },
59887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocation", (void *)&SC_AllocationSyncAll, false },
59987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocationj", (void *)&SC_AllocationSyncAll2, false },
60074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z20rsgAllocationSyncAll13rs_allocation24rs_allocation_usage_type", (void *)&SC_AllocationSyncAll2, false },
60187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z15rsGetAllocationPKv", (void *)&SC_GetAllocation, true },
602b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    { "_Z18rsAllocationIoSend13rs_allocation", (void *)&SC_AllocationIoSend, false },
603b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    { "_Z21rsAllocationIoReceive13rs_allocation", (void *)&SC_AllocationIoReceive, false },
60474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy1DRange13rs_allocationjjjS_jj", (void *)&SC_AllocationCopy1DRange, false },
60574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy2DRange13rs_allocationjjj26rs_allocation_cubemap_facejjS_jjjS0_", (void *)&SC_AllocationCopy2DRange, false },
60687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
60787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Messaging
60887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
60987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClienti", (void *)&SC_ToClient, false },
61087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClientiPKvj", (void *)&SC_ToClient2, false },
61187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingi", (void *)&SC_ToClientBlocking, false },
61287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_ToClientBlocking2, false },
61387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
61487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_BindProgramFragment, false },
61587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_BindProgramStore, false },
61687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_BindProgramVertex, false },
61787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_BindProgramRaster, false },
61887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_BindSampler, false },
61987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_BindTexture, false },
620a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    { "_Z15rsgBindConstant19rs_program_fragmentj13rs_allocation", (void *)&SC_BindFragmentConstant, false },
621a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    { "_Z15rsgBindConstant17rs_program_vertexj13rs_allocation", (void *)&SC_BindVertexConstant, false },
62287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
62387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadProjectionMatrix, false },
62487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadModelMatrix, false },
62587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadTextureMatrix, false },
62687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
62787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_VpGetProjectionMatrix, false },
62887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
62987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_PfConstantColor, false },
63087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
63187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgGetWidthv", (void *)&SC_GetWidth, false },
63287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgGetHeightv", (void *)&SC_GetHeight, false },
63387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
63487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
63587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawRectfffff", (void *)&SC_DrawRect, false },
63687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_DrawQuad, false },
63787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_DrawQuadTexCoords, false },
63887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_DrawSpriteScreenspace, false },
63987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
64087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_DrawMesh, false },
64187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_DrawMeshPrimitive, false },
64287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_DrawMeshPrimitiveRange, false },
64387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_MeshComputeBoundingBox, false },
64487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
6459e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z11rsgDrawPath7rs_path", (void *)&SC_DrawPath, false },
6469e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
64787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false },
64887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false },
64987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
65087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false },
65187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false },
65287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false },
65387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false },
65487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
65587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false },
65687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false },
65787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
65887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindColorTarget13rs_allocationj", (void *)&SC_BindFrameBufferObjectColorTarget, false },
65987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindDepthTarget13rs_allocation", (void *)&SC_BindFrameBufferObjectDepthTarget, false },
66087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearColorTargetj", (void *)&SC_ClearFrameBufferObjectColorTarget, false },
66187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearDepthTargetv", (void *)&SC_ClearFrameBufferObjectDepthTarget, false },
66287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgClearAllRenderTargetsv", (void *)&SC_ClearFrameBufferObjectTargets, false },
66387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
664c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_", (void *)&SC_ForEach_SAA, false },
665c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach_SAAU, false },
666c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvPK16rs_script_call_t", (void *)&SC_ForEach_SAAUS, false },
667c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvj", (void *)&SC_ForEach_SAAUL, false },
668c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvjPK16rs_script_call_t", (void *)&SC_ForEach_SAAULS, false },
66987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
67087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // time
67187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z6rsTimePi", (void *)&SC_Time, true },
67287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsLocaltimeP5rs_tmPKi", (void *)&SC_LocalTime, true },
67387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsUptimeMillisv", (void*)&SC_UptimeMillis, true },
67487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsUptimeNanosv", (void*)&SC_UptimeNanos, true },
67587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsGetDtv", (void*)&SC_GetDt, false },
67687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
67787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // misc
67887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z5colorffff", (void *)&SC_Color, false },
67987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z9rsgFinishv", (void *)&SC_Finish, false },
68087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Debug
68287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcf", (void *)&SC_debugF, true },
68387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcff", (void *)&SC_debugFv2, true },
68487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcfff", (void *)&SC_debugFv3, true },
68587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcffff", (void *)&SC_debugFv4, true },
68687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcd", (void *)&SC_debugD, true },
68787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix4x4", (void *)&SC_debugFM4v4, true },
68887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix3x3", (void *)&SC_debugFM3v3, true },
68987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix2x2", (void *)&SC_debugFM2v2, true },
69087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKci", (void *)&SC_debugI32, true },
69187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcj", (void *)&SC_debugU32, true },
69287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Both "long" and "unsigned long" need to be redirected to their
69387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // 64-bit counterparts, since we have hacked Slang to use 64-bit
69487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // for "long" on Arm (to be similar to Java).
69587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcl", (void *)&SC_debugLL64, true },
69687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcm", (void *)&SC_debugULL64, true },
69787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcx", (void *)&SC_debugLL64, true },
69887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcy", (void *)&SC_debugULL64, true },
69987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPKv", (void *)&SC_debugP, true },
70087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { NULL, NULL, false }
70287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams};
70387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid* rsdLookupRuntimeStub(void* pContext, char const* name) {
70687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC *s = (ScriptC *)pContext;
70787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (!strcmp(name, "__isThreadable")) {
70887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams      return (void*) s->mHal.info.isThreadable;
70987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    } else if (!strcmp(name, "__clearThreadable")) {
71087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams      s->mHal.info.isThreadable = false;
71187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams      return NULL;
71287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
71387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
71487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    RsdSymbolTable *syms = gSyms;
71587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    const RsdSymbolTable *sym = rsdLookupSymbolMath(name);
71687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
71787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (!sym) {
71887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        while (syms->mPtr) {
71987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            if (!strcmp(syms->mName, name)) {
72087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                sym = syms;
72187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            }
72287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            syms++;
72387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        }
72487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
72587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
72687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (sym) {
72787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        s->mHal.info.isThreadable &= sym->threadable;
72887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        return sym->mPtr;
72987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
730af12ac6a08651464f8d823add667c706f993b587Steve Block    ALOGE("ScriptC sym lookup failed for %s", name);
73187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return NULL;
73287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
73387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
73487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
735