rsdRuntimeStubs.cpp revision 807fdc4b6f3fb893015ee136565d6151bb2332d3
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"
26807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams#include "rsdBcc.h"
2787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsdRuntime.h"
299e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams#include "rsdPath.h"
30b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams#include "rsdAllocation.h"
3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <time.h>
3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android;
3587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android::renderscript;
3687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#define GET_TLS()  ScriptTLSStruct * tls = \
3883c451a4ef4388e002482e383d488ca9b7b7600dJason Sams    (ScriptTLSStruct *)pthread_getspecific(rsdgThreadTLSKey); \
3987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    Context * rsc = tls->mContext; \
4087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC * sc = (ScriptC *) tls->mScript
4187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float2 __attribute__((ext_vector_type(2)));
43a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float3 __attribute__((ext_vector_type(3)));
44a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float4 __attribute__((ext_vector_type(4)));
45a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char2 __attribute__((ext_vector_type(2)));
46a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char3 __attribute__((ext_vector_type(3)));
47a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char4 __attribute__((ext_vector_type(4)));
48a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar2 __attribute__((ext_vector_type(2)));
49a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar3 __attribute__((ext_vector_type(3)));
50a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar4 __attribute__((ext_vector_type(4)));
51a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef short short2 __attribute__((ext_vector_type(2)));
52a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef short short3 __attribute__((ext_vector_type(3)));
53a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef short short4 __attribute__((ext_vector_type(4)));
54a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned short ushort2 __attribute__((ext_vector_type(2)));
55a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned short ushort3 __attribute__((ext_vector_type(3)));
56a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned short ushort4 __attribute__((ext_vector_type(4)));
57a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int2 __attribute__((ext_vector_type(2)));
58a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int3 __attribute__((ext_vector_type(3)));
59a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int4 __attribute__((ext_vector_type(4)));
60a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint2 __attribute__((ext_vector_type(2)));
61a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint3 __attribute__((ext_vector_type(3)));
62a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint4 __attribute__((ext_vector_type(4)));
63a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef long long long2 __attribute__((ext_vector_type(2)));
64a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef long long long3 __attribute__((ext_vector_type(3)));
65a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef long long long4 __attribute__((ext_vector_type(4)));
66a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned long long ulong2 __attribute__((ext_vector_type(2)));
67a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned long long ulong3 __attribute__((ext_vector_type(3)));
68a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned long long ulong4 __attribute__((ext_vector_type(4)));
6987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
7287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Allocation
7387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
7487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll2(Allocation *a, RsAllocationUsageType source) {
7787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
7887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, source);
7987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
8087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
8187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll(Allocation *a) {
8287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
8387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, RS_ALLOCATION_USAGE_SCRIPT);
8487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
8587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
8674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy1DRange(Allocation *dstAlloc,
8774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstOff,
8874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip,
8974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t count,
9074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
9174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcOff, uint32_t srcMip) {
9274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
93a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    rsrAllocationCopy1DRange(rsc, dstAlloc, dstOff, dstMip, count,
94a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcAlloc, srcOff, srcMip);
9574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
9674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
9774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy2DRange(Allocation *dstAlloc,
9874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstXoff, uint32_t dstYoff,
9974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip, uint32_t dstFace,
10074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t width, uint32_t height,
10174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
10274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcXoff, uint32_t srcYoff,
10374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcMip, uint32_t srcFace) {
10474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
105a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    rsrAllocationCopy2DRange(rsc, dstAlloc,
106a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             dstXoff, dstYoff, dstMip, dstFace,
107a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             width, height,
108a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcAlloc,
109a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcXoff, srcYoff, srcMip, srcFace);
11074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
11174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
112b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsstatic void SC_AllocationIoSend(Allocation *alloc) {
113b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    GET_TLS();
114b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    rsdAllocationIoSend(rsc, alloc);
115b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams}
116b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
117b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
118b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsstatic void SC_AllocationIoReceive(Allocation *alloc) {
119b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    GET_TLS();
120b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    rsdAllocationIoReceive(rsc, alloc);
121b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams}
122b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
123b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
12474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
12587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
12687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Context
12787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
12887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
12987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindTexture(ProgramFragment *pf, uint32_t slot, Allocation *a) {
13087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
13187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindTexture(rsc, sc, pf, slot, a);
13287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
13387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
134a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukstatic void SC_BindVertexConstant(ProgramVertex *pv, uint32_t slot, Allocation *a) {
135a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    GET_TLS();
136a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    rsrBindConstant(rsc, sc, pv, slot, a);
137a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk}
138a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
139a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukstatic void SC_BindFragmentConstant(ProgramFragment *pf, uint32_t slot, Allocation *a) {
140a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    GET_TLS();
141a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    rsrBindConstant(rsc, sc, pf, slot, a);
142a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk}
143a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
14487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindSampler(ProgramFragment *pf, uint32_t slot, Sampler *s) {
14587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
14687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindSampler(rsc, sc, pf, slot, s);
14787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
14887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
14987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramStore(ProgramStore *ps) {
15087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramStore(rsc, sc, ps);
15287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramFragment(ProgramFragment *pf) {
15587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramFragment(rsc, sc, pf);
15787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramVertex(ProgramVertex *pv) {
16087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
16187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramVertex(rsc, sc, pv);
16287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramRaster(ProgramRaster *pr) {
16587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
16687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramRaster(rsc, sc, pr);
16787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectColorTarget(Allocation *a, uint32_t slot) {
17087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
17187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectColorTarget(rsc, sc, a, slot);
17287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
17387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectDepthTarget(Allocation *a) {
17587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
17687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectDepthTarget(rsc, sc, a);
17787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
17887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectColorTarget(uint32_t slot) {
18087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectColorTarget(rsc, sc, slot);
18287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
18387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectDepthTarget(Context *, Script *) {
18587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectDepthTarget(rsc, sc);
18787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
18887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectTargets(Context *, Script *) {
19087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
19187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectTargets(rsc, sc);
19287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
19387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
19687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// VP
19787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
19887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadProjectionMatrix(const rsc_Matrix *m) {
20087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
20187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadProjectionMatrix(rsc, sc, m);
20287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
20387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadModelMatrix(const rsc_Matrix *m) {
20587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
20687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadModelMatrix(rsc, sc, m);
20787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
20887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadTextureMatrix(const rsc_Matrix *m) {
21087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
21187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadTextureMatrix(rsc, sc, m);
21287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
21387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_PfConstantColor(ProgramFragment *pf, float r, float g, float b, float a) {
21587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
21687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrPfConstantColor(rsc, sc, pf, r, g, b, a);
21787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
21887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpGetProjectionMatrix(rsc_Matrix *m) {
22087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
22187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpGetProjectionMatrix(rsc, sc, m);
22287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
22387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
22687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Drawing
22787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
22887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
23087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x2, float y2, float z2, float u2, float v2,
23187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x3, float y3, float z3, float u3, float v3,
23287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x4, float y4, float z4, float u4, float v4) {
23387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
23487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawQuadTexCoords(rsc, sc,
23587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x1, y1, z1, u1, v1,
23687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x2, y2, z2, u2, v2,
23787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x3, y3, z3, u3, v3,
23887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         x4, y4, z4, u4, v4);
23987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
24087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
24187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuad(float x1, float y1, float z1,
24287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x2, float y2, float z2,
24387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x3, float y3, float z3,
24487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x4, float y4, float z4) {
24587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
24687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawQuad(rsc, sc, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4);
24787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
24887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
24987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) {
25087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
25187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawSpriteScreenspace(rsc, sc, x, y, z, w, h);
25287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
25387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
25487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawRect(float x1, float y1, float x2, float y2, float z) {
25587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
25687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawRect(rsc, sc, x1, y1, x2, y2, z);
25787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
25887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
2599e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsstatic void SC_DrawPath(Path *p) {
2609e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    GET_TLS();
2619e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    //rsrDrawPath(rsc, sc, p);
2629e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    rsdPathDraw(rsc, p);
2639e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams}
2649e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
26587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMesh(Mesh *m) {
26687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
26787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMesh(rsc, sc, m);
26887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
26987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitive(Mesh *m, uint32_t primIndex) {
27187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
27287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitive(rsc, sc, m, primIndex);
27387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
27487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitiveRange(Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len) {
27687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
27787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitiveRange(rsc, sc, m, primIndex, start, len);
27887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
27987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeshComputeBoundingBox(Mesh *m,
28187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *minX, float *minY, float *minZ,
28287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *maxX, float *maxY, float *maxZ) {
28387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
28487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeshComputeBoundingBox(rsc, sc, m, minX, minY, minZ, maxX, maxY, maxZ);
28587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
28687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
28987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
29087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
29187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
29287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Color(float r, float g, float b, float a) {
29587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
29687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrColor(rsc, sc, r, g, b, a);
29787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Finish() {
30087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
301653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLFinish(rsc);
30287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
30487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearColor(float r, float g, float b, float a) {
30587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
306653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsrPrepareClear(rsc, sc);
307653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLClearColor(rsc, r, g, b, a);
30887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
31087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearDepth(float v) {
31187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
312653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsrPrepareClear(rsc, sc);
313653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLClearDepth(rsc, v);
31487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
31587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
31687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetWidth() {
31787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
31887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetWidth(rsc, sc);
31987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetHeight() {
32287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
32387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetHeight(rsc, sc);
32487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawTextAlloc(Allocation *a, int x, int y) {
32787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
32887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawTextAlloc(rsc, sc, a, x, y);
32987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
33087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawText(const char *text, int x, int y) {
33287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
33387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawText(rsc, sc, text, x, y);
33487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
33587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureTextAlloc(Allocation *a,
33787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
33887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
33987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureTextAlloc(rsc, sc, a, left, right, top, bottom);
34087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureText(const char *text,
34387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                    int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
34487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
34587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureText(rsc, sc, text, left, right, top, bottom);
34687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFont(Font *f) {
34987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
35087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFont(rsc, sc, f);
35187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
35287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_FontColor(float r, float g, float b, float a) {
35487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
35587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrFontColor(rsc, sc, r, g, b, a);
35687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
35787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
36087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
36187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
36287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
36387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
36487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_SetObject(ObjectBase **dst, ObjectBase * src) {
36587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
36687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrSetObject(rsc, sc, dst, src);
36787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
36887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
36987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearObject(ObjectBase **dst) {
37087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
37187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearObject(rsc, sc, dst);
37287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
37387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
37487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic bool SC_IsObject(const ObjectBase *src) {
37587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
37687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrIsObject(rsc, sc, src);
37787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
37887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
37987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
38087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
38187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
38287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic const Allocation * SC_GetAllocation(const void *ptr) {
38387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
384807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams    return rsdScriptGetAllocationForPointer(rsc, sc, ptr);
38587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
38687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
387c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAA(Script *target,
388c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *in,
389c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *out) {
390c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
391c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, NULL, 0, NULL);
392c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
393c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
394c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAU(Script *target,
395c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *in,
396c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *out,
397c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            const void *usr) {
39887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
39987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, NULL);
40087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
40187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
402c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAUS(Script *target,
403c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *in,
404c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *out,
405c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const void *usr,
406c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const RsScriptCall *call) {
40787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
40887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, call);
40987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
41087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
411c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAUL(Script *target,
412c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *in,
413c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *out,
414c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const void *usr,
415c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             uint32_t usrLen) {
416c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
417c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, usrLen, NULL);
418c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
419c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
420c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAULS(Script *target,
421c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              Allocation *in,
422c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              Allocation *out,
423c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              const void *usr,
424c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              uint32_t usrLen,
425c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              const RsScriptCall *call) {
426c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
427c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, usrLen, call);
428c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
429c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
43087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
43187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
43287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
43387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Time routines
43487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
43587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
43687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic float SC_GetDt() {
43787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
43887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetDt(rsc, sc);
43987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
44187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstime_t SC_Time(time_t *timer) {
44287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
44387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrTime(rsc, sc, timer);
44487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
44687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstm* SC_LocalTime(tm *local, time_t *timer) {
44787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
44887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrLocalTime(rsc, sc, local, timer);
44987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
45187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeMillis() {
45287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
45387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeMillis(rsc, sc);
45487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
45687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeNanos() {
45787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
45887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeNanos(rsc, sc);
45987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
46187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
46287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Message routines
46387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
46487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
46587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient2(int cmdID, void *data, int len) {
46687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
46787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, data, len);
46887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
47087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient(int cmdID) {
47187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
47287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, NULL, 0);
47387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
47587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking2(int cmdID, void *data, int len) {
47687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
47787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, data, len);
47887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
48087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking(int cmdID) {
48187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
48287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, NULL, 0);
48387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
48587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_divsi3(int a, int b) {
48687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
48787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
48987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_modsi3(int a, int b) {
49087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
49187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
49387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_udivsi3(unsigned int a, unsigned int b) {
49487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
49587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
49787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_umodsi3(unsigned int a, unsigned int b) {
49887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
49987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
50187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugF(const char *s, float f) {
5024a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f)));
50387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv2(const char *s, float f1, float f2) {
5054a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f}", s, f1, f2);
50687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv3(const char *s, float f1, float f2, float f3) {
5084a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f}", s, f1, f2, f3);
50987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
51087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) {
5114a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
51287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5136537404d5ad7ec19f0f26533d695d39909782781Stephen Hinesstatic void SC_debugF2(const char *s, float2 f) {
5146537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    ALOGD("%s {%f, %f}", s, f.x, f.y);
5156537404d5ad7ec19f0f26533d695d39909782781Stephen Hines}
5166537404d5ad7ec19f0f26533d695d39909782781Stephen Hinesstatic void SC_debugF3(const char *s, float3 f) {
5176537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z);
5186537404d5ad7ec19f0f26533d695d39909782781Stephen Hines}
5196537404d5ad7ec19f0f26533d695d39909782781Stephen Hinesstatic void SC_debugF4(const char *s, float4 f) {
5206537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w);
5216537404d5ad7ec19f0f26533d695d39909782781Stephen Hines}
52287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugD(const char *s, double d) {
5234a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d)));
52487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
52587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM4v4(const char *s, const float *f) {
5264a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
5274a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
5284a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]);
5294a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]);
53087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
53187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM3v3(const char *s, const float *f) {
5324a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]);
5334a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f", s, f[1], f[4], f[7]);
5344a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f}",s, f[2], f[5], f[8]);
53587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
53687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM2v2(const char *s, const float *f) {
5374a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f", s, f[0], f[2]);
5384a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f}",s, f[1], f[3]);
53987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
540a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI8(const char *s, char c) {
541a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hhd  0x%hhx", s, c, (unsigned char)c);
542a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
543a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugC2(const char *s, char2 c) {
544a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhd, %hhd}  0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y);
545a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
546a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugC3(const char *s, char3 c) {
547a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhd, %hhd, %hhd}  0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z);
548a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
549a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugC4(const char *s, char4 c) {
550a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhd, %hhd, %hhd, %hhd}  0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.w, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z, (unsigned char)c.w);
551a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
552a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugU8(const char *s, unsigned char c) {
553a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hhu  0x%hhx", s, c, c);
554a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
555a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUC2(const char *s, uchar2 c) {
556a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhu, %hhu}  0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y);
557a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
558a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUC3(const char *s, uchar3 c) {
559a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhu, %hhu, %hhu}  0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.x, c.y, c.z);
560a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
561a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUC4(const char *s, uchar4 c) {
562a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhu, %hhu, %hhu, %hhu}  0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w);
563a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
564a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI16(const char *s, short c) {
565a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hd  0x%hx", s, c, c);
566a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
567a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugS2(const char *s, short2 c) {
568a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hd, %hd}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
569a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
570a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugS3(const char *s, short3 c) {
571a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hd, %hd, %hd}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z);
572a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
573a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugS4(const char *s, short4 c) {
574a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hd, %hd, %hd, %hd}  0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w);
575a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
576a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugU16(const char *s, unsigned short c) {
577a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hu  0x%hx", s, c, c);
578a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
579a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUS2(const char *s, ushort2 c) {
580a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hu, %hu}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
581a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
582a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUS3(const char *s, ushort3 c) {
583a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hu, %hu, %hu}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z);
584a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
585a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUS4(const char *s, ushort4 c) {
586a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hu, %hu, %hu, %hu}  0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w);
587a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
58887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugI32(const char *s, int32_t i) {
589a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %d  0x%x", s, i, i);
590a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
591a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI2(const char *s, int2 i) {
592a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%d, %d}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
593a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
594a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI3(const char *s, int3 i) {
595a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%d, %d, %d}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
596a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
597a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI4(const char *s, int4 i) {
598a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%d, %d, %d, %d}  0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x, i.y, i.z, i.w);
59987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
60087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugU32(const char *s, uint32_t i) {
6014a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %u  0x%x", s, i, i);
60287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
603a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUI2(const char *s, uint2 i) {
604a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%u, %u}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
605a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
606a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUI3(const char *s, uint3 i) {
607a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%u, %u, %u}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
608a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
609a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUI4(const char *s, uint4 i) {
610a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%u, %u, %u, %u}  0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x, i.y, i.z, i.w);
611a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
61287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugLL64(const char *s, long long ll) {
6134a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %lld  0x%llx", s, ll, ll);
61487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
615a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugL2(const char *s, long2 ll) {
616a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y);
617a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
618a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugL3(const char *s, long3 ll) {
619a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.x, ll.y, ll.z);
620a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
621a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugL4(const char *s, long4 ll) {
622a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.w, ll.x, ll.y, ll.z, ll.w);
623a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
62487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugULL64(const char *s, unsigned long long ll) {
6254a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %llu  0x%llx", s, ll, ll);
62687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
627a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUL2(const char *s, ulong2 ll) {
628a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y);
629a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
630a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUL3(const char *s, ulong3 ll) {
631a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.x, ll.y, ll.z);
632a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
633a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUL4(const char *s, ulong4 ll) {
634a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.w, ll.x, ll.y, ll.z, ll.w);
635a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
63687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugP(const char *s, const void *p) {
6374a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %p", s, p);
63887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
63987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
64087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
64187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
64287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Stub implementation
64387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
64487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
64587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// llvm name mangling ref
64687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//  <builtin-type> ::= v  # void
64787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= b  # bool
64887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= c  # char
64987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= a  # signed char
65087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= h  # unsigned char
65187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= s  # short
65287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= t  # unsigned short
65387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= i  # int
65487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= j  # unsigned int
65587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= l  # long
65687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= m  # unsigned long
65787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= x  # long long, __int64
65887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= y  # unsigned long long, __int64
65987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= f  # float
66087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= d  # double
66187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
66287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic RsdSymbolTable gSyms[] = {
66387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memset", (void *)&memset, true },
66487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memcpy", (void *)&memcpy, true },
66587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
66687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Refcounting
66787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_SetObject, true },
66887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_element", (void *)&SC_ClearObject, true },
66987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_element", (void *)&SC_IsObject, true },
67087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
67187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_SetObject, true },
67287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_type", (void *)&SC_ClearObject, true },
67387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_type", (void *)&SC_IsObject, true },
67487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
67587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_SetObject, true },
67687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP13rs_allocation", (void *)&SC_ClearObject, true },
67787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject13rs_allocation", (void *)&SC_IsObject, true },
67887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
67987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_SetObject, true },
68087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_sampler", (void *)&SC_ClearObject, true },
68187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_sampler", (void *)&SC_IsObject, true },
68287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_SetObject, true },
68487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP9rs_script", (void *)&SC_ClearObject, true },
68587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject9rs_script", (void *)&SC_IsObject, true },
68687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
6879e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z11rsSetObjectP7rs_pathS_", (void *)&SC_SetObject, true },
6889e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z13rsClearObjectP7rs_path", (void *)&SC_ClearObject, true },
6899e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z10rsIsObject7rs_path", (void *)&SC_IsObject, true },
6909e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
69187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_meshS_", (void *)&SC_SetObject, true },
69287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_mesh", (void *)&SC_ClearObject, true },
69387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_mesh", (void *)&SC_IsObject, true },
69487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
69587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP19rs_program_fragmentS_", (void *)&SC_SetObject, true },
69687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP19rs_program_fragment", (void *)&SC_ClearObject, true },
69787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject19rs_program_fragment", (void *)&SC_IsObject, true },
69887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
69987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_vertexS_", (void *)&SC_SetObject, true },
70087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_vertex", (void *)&SC_ClearObject, true },
70187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_vertex", (void *)&SC_IsObject, true },
70287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_rasterS_", (void *)&SC_SetObject, true },
70487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_raster", (void *)&SC_ClearObject, true },
70587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_raster", (void *)&SC_IsObject, true },
70687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP16rs_program_storeS_", (void *)&SC_SetObject, true },
70887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP16rs_program_store", (void *)&SC_ClearObject, true },
70987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject16rs_program_store", (void *)&SC_IsObject, true },
71087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
71187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_fontS_", (void *)&SC_SetObject, true },
71287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_font", (void *)&SC_ClearObject, true },
71387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_font", (void *)&SC_IsObject, true },
71487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
71587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Allocation ops
71687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_AllocationSyncAll, true },
71787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocation", (void *)&SC_AllocationSyncAll, false },
71887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocationj", (void *)&SC_AllocationSyncAll2, false },
71974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z20rsgAllocationSyncAll13rs_allocation24rs_allocation_usage_type", (void *)&SC_AllocationSyncAll2, false },
72087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z15rsGetAllocationPKv", (void *)&SC_GetAllocation, true },
721b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    { "_Z18rsAllocationIoSend13rs_allocation", (void *)&SC_AllocationIoSend, false },
722b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    { "_Z21rsAllocationIoReceive13rs_allocation", (void *)&SC_AllocationIoReceive, false },
72374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy1DRange13rs_allocationjjjS_jj", (void *)&SC_AllocationCopy1DRange, false },
72474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy2DRange13rs_allocationjjj26rs_allocation_cubemap_facejjS_jjjS0_", (void *)&SC_AllocationCopy2DRange, false },
72587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
72687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Messaging
72787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
72887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClienti", (void *)&SC_ToClient, false },
72987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClientiPKvj", (void *)&SC_ToClient2, false },
73087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingi", (void *)&SC_ToClientBlocking, false },
73187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_ToClientBlocking2, false },
73287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
73387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_BindProgramFragment, false },
73487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_BindProgramStore, false },
73587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_BindProgramVertex, false },
73687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_BindProgramRaster, false },
73787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_BindSampler, false },
73887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_BindTexture, false },
739a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    { "_Z15rsgBindConstant19rs_program_fragmentj13rs_allocation", (void *)&SC_BindFragmentConstant, false },
740a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    { "_Z15rsgBindConstant17rs_program_vertexj13rs_allocation", (void *)&SC_BindVertexConstant, false },
74187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
74287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadProjectionMatrix, false },
74387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadModelMatrix, false },
74487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadTextureMatrix, false },
74587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
74687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_VpGetProjectionMatrix, false },
74787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
74887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_PfConstantColor, false },
74987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
75087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgGetWidthv", (void *)&SC_GetWidth, false },
75187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgGetHeightv", (void *)&SC_GetHeight, false },
75287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
75387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
75487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawRectfffff", (void *)&SC_DrawRect, false },
75587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_DrawQuad, false },
75687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_DrawQuadTexCoords, false },
75787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_DrawSpriteScreenspace, false },
75887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
75987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_DrawMesh, false },
76087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_DrawMeshPrimitive, false },
76187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_DrawMeshPrimitiveRange, false },
76287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_MeshComputeBoundingBox, false },
76387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7649e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z11rsgDrawPath7rs_path", (void *)&SC_DrawPath, false },
7659e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
76687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false },
76787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false },
76887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
76987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false },
77087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false },
77187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false },
77287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false },
77387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
77487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false },
77587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false },
77687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
77787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindColorTarget13rs_allocationj", (void *)&SC_BindFrameBufferObjectColorTarget, false },
77887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindDepthTarget13rs_allocation", (void *)&SC_BindFrameBufferObjectDepthTarget, false },
77987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearColorTargetj", (void *)&SC_ClearFrameBufferObjectColorTarget, false },
78087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearDepthTargetv", (void *)&SC_ClearFrameBufferObjectDepthTarget, false },
78187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgClearAllRenderTargetsv", (void *)&SC_ClearFrameBufferObjectTargets, false },
78287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
783aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_", (void *)&SC_ForEach_SAA, true },
784aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach_SAAU, true },
785aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvPK16rs_script_call_t", (void *)&SC_ForEach_SAAUS, true },
786aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvj", (void *)&SC_ForEach_SAAUL, true },
787aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvjPK16rs_script_call_t", (void *)&SC_ForEach_SAAULS, true },
78887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
78987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // time
79087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z6rsTimePi", (void *)&SC_Time, true },
79187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsLocaltimeP5rs_tmPKi", (void *)&SC_LocalTime, true },
79287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsUptimeMillisv", (void*)&SC_UptimeMillis, true },
79387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsUptimeNanosv", (void*)&SC_UptimeNanos, true },
79487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsGetDtv", (void*)&SC_GetDt, false },
79587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
79687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // misc
79787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z5colorffff", (void *)&SC_Color, false },
79887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z9rsgFinishv", (void *)&SC_Finish, false },
79987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
80087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Debug
80187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcf", (void *)&SC_debugF, true },
80287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcff", (void *)&SC_debugFv2, true },
80387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcfff", (void *)&SC_debugFv3, true },
80487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcffff", (void *)&SC_debugFv4, true },
8056537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    { "_Z7rsDebugPKcDv2_f", (void *)&SC_debugF2, true },
8066537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    { "_Z7rsDebugPKcDv3_f", (void *)&SC_debugF3, true },
8076537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    { "_Z7rsDebugPKcDv4_f", (void *)&SC_debugF4, true },
80887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcd", (void *)&SC_debugD, true },
80987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix4x4", (void *)&SC_debugFM4v4, true },
81087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix3x3", (void *)&SC_debugFM3v3, true },
81187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix2x2", (void *)&SC_debugFM2v2, true },
812a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcc", (void *)&SC_debugI8, true },
813a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_c", (void *)&SC_debugC2, true },
814a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_c", (void *)&SC_debugC3, true },
815a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_c", (void *)&SC_debugC4, true },
816a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKch", (void *)&SC_debugU8, true },
817a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_h", (void *)&SC_debugUC2, true },
818a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_h", (void *)&SC_debugUC3, true },
819a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_h", (void *)&SC_debugUC4, true },
820a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcs", (void *)&SC_debugI16, true },
821a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_s", (void *)&SC_debugS2, true },
822a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_s", (void *)&SC_debugS3, true },
823a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_s", (void *)&SC_debugS4, true },
824a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKct", (void *)&SC_debugU16, true },
825a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_t", (void *)&SC_debugUS2, true },
826a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_t", (void *)&SC_debugUS3, true },
827a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_t", (void *)&SC_debugUS4, true },
82887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKci", (void *)&SC_debugI32, true },
829a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_i", (void *)&SC_debugI2, true },
830a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_i", (void *)&SC_debugI3, true },
831a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_i", (void *)&SC_debugI4, true },
83287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcj", (void *)&SC_debugU32, true },
833a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_j", (void *)&SC_debugUI2, true },
834a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_j", (void *)&SC_debugUI3, true },
835a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_j", (void *)&SC_debugUI4, true },
83687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Both "long" and "unsigned long" need to be redirected to their
83787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // 64-bit counterparts, since we have hacked Slang to use 64-bit
83887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // for "long" on Arm (to be similar to Java).
83987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcl", (void *)&SC_debugLL64, true },
840a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_l", (void *)&SC_debugL2, true },
841a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_l", (void *)&SC_debugL3, true },
842a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_l", (void *)&SC_debugL4, true },
84387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcm", (void *)&SC_debugULL64, true },
844a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_m", (void *)&SC_debugUL2, true },
845a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_m", (void *)&SC_debugUL3, true },
846a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_m", (void *)&SC_debugUL4, true },
84787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcx", (void *)&SC_debugLL64, true },
848a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_x", (void *)&SC_debugL2, true },
849a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_x", (void *)&SC_debugL3, true },
850a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_x", (void *)&SC_debugL4, true },
85187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcy", (void *)&SC_debugULL64, true },
852a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_y", (void *)&SC_debugUL2, true },
853a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_y", (void *)&SC_debugUL3, true },
854a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_y", (void *)&SC_debugUL4, true },
85587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPKv", (void *)&SC_debugP, true },
85687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
85787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { NULL, NULL, false }
85887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams};
85987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
86087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
86187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid* rsdLookupRuntimeStub(void* pContext, char const* name) {
86287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC *s = (ScriptC *)pContext;
86387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    RsdSymbolTable *syms = gSyms;
86487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    const RsdSymbolTable *sym = rsdLookupSymbolMath(name);
86587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
86687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (!sym) {
86787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        while (syms->mPtr) {
86887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            if (!strcmp(syms->mName, name)) {
86987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                sym = syms;
87087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            }
87187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            syms++;
87287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        }
87387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
87487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
87587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (sym) {
87687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        s->mHal.info.isThreadable &= sym->threadable;
87787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        return sym->mPtr;
87887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
879af12ac6a08651464f8d823add667c706f993b587Steve Block    ALOGE("ScriptC sym lookup failed for %s", name);
88087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return NULL;
88187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
88287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
88387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
884