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