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"
31414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#include "rsdShaderCache.h"
32414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#include "rsdVertexArray.h"
3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <time.h>
3587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android;
3787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android::renderscript;
3887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#define GET_TLS()  ScriptTLSStruct * tls = \
4083c451a4ef4388e002482e383d488ca9b7b7600dJason Sams    (ScriptTLSStruct *)pthread_getspecific(rsdgThreadTLSKey); \
4187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    Context * rsc = tls->mContext; \
4287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC * sc = (ScriptC *) tls->mScript
4387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
44a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float2 __attribute__((ext_vector_type(2)));
45a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float3 __attribute__((ext_vector_type(3)));
46a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float4 __attribute__((ext_vector_type(4)));
47a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char2 __attribute__((ext_vector_type(2)));
48a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char3 __attribute__((ext_vector_type(3)));
49a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char4 __attribute__((ext_vector_type(4)));
50a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar2 __attribute__((ext_vector_type(2)));
51a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar3 __attribute__((ext_vector_type(3)));
52a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar4 __attribute__((ext_vector_type(4)));
53a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef short short2 __attribute__((ext_vector_type(2)));
54a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef short short3 __attribute__((ext_vector_type(3)));
55a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef short short4 __attribute__((ext_vector_type(4)));
56a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned short ushort2 __attribute__((ext_vector_type(2)));
57a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned short ushort3 __attribute__((ext_vector_type(3)));
58a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned short ushort4 __attribute__((ext_vector_type(4)));
59a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int2 __attribute__((ext_vector_type(2)));
60a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int3 __attribute__((ext_vector_type(3)));
61a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int4 __attribute__((ext_vector_type(4)));
62a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint2 __attribute__((ext_vector_type(2)));
63a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint3 __attribute__((ext_vector_type(3)));
64a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint4 __attribute__((ext_vector_type(4)));
65a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef long long long2 __attribute__((ext_vector_type(2)));
66a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef long long long3 __attribute__((ext_vector_type(3)));
67a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef long long long4 __attribute__((ext_vector_type(4)));
68a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned long long ulong2 __attribute__((ext_vector_type(2)));
69a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned long long ulong3 __attribute__((ext_vector_type(3)));
70a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned long long ulong4 __attribute__((ext_vector_type(4)));
7187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
7487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Allocation
7587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
7687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll2(Allocation *a, RsAllocationUsageType source) {
7987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
8087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, source);
8187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
8287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
8387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_AllocationSyncAll(Allocation *a) {
8487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
8587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrAllocationSyncAll(rsc, sc, a, RS_ALLOCATION_USAGE_SCRIPT);
8687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
8787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
8874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy1DRange(Allocation *dstAlloc,
8974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstOff,
9074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip,
9174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t count,
9274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
9374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcOff, uint32_t srcMip) {
9474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
95a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    rsrAllocationCopy1DRange(rsc, dstAlloc, dstOff, dstMip, count,
96a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcAlloc, srcOff, srcMip);
9774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
9874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
9974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukstatic void SC_AllocationCopy2DRange(Allocation *dstAlloc,
10074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstXoff, uint32_t dstYoff,
10174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t dstMip, uint32_t dstFace,
10274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t width, uint32_t height,
10374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     Allocation *srcAlloc,
10474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcXoff, uint32_t srcYoff,
10574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                                     uint32_t srcMip, uint32_t srcFace) {
10674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    GET_TLS();
107a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    rsrAllocationCopy2DRange(rsc, dstAlloc,
108a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             dstXoff, dstYoff, dstMip, dstFace,
109a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             width, height,
110a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcAlloc,
111a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk                             srcXoff, srcYoff, srcMip, srcFace);
11274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
11374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
114b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsstatic void SC_AllocationIoSend(Allocation *alloc) {
115b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    GET_TLS();
116b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    rsdAllocationIoSend(rsc, alloc);
117b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams}
118b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
119b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
120b322033c13487a174bb9c26466e9684d1ff4de8dJason Samsstatic void SC_AllocationIoReceive(Allocation *alloc) {
121b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    GET_TLS();
122b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    rsdAllocationIoReceive(rsc, alloc);
123b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams}
124b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
125b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
12674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
12787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
12887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Context
12987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
13087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
13187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindTexture(ProgramFragment *pf, uint32_t slot, Allocation *a) {
13287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
13387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindTexture(rsc, sc, pf, slot, a);
13487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
13587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
136a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukstatic void SC_BindVertexConstant(ProgramVertex *pv, uint32_t slot, Allocation *a) {
137a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    GET_TLS();
138a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    rsrBindConstant(rsc, sc, pv, slot, a);
139a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk}
140a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
141a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukstatic void SC_BindFragmentConstant(ProgramFragment *pf, uint32_t slot, Allocation *a) {
142a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    GET_TLS();
143a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    rsrBindConstant(rsc, sc, pf, slot, a);
144a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk}
145a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
14687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindSampler(ProgramFragment *pf, uint32_t slot, Sampler *s) {
14787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
14887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindSampler(rsc, sc, pf, slot, s);
14987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramStore(ProgramStore *ps) {
15287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramStore(rsc, sc, ps);
15487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
15587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
15687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramFragment(ProgramFragment *pf) {
15787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
15887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramFragment(rsc, sc, pf);
15987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramVertex(ProgramVertex *pv) {
16287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
16387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramVertex(rsc, sc, pv);
16487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
16587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
16687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindProgramRaster(ProgramRaster *pr) {
16787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
16887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindProgramRaster(rsc, sc, pr);
16987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
17087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectColorTarget(Allocation *a, uint32_t slot) {
17287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
17387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectColorTarget(rsc, sc, a, slot);
17487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
17587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
17687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFrameBufferObjectDepthTarget(Allocation *a) {
17787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
17887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFrameBufferObjectDepthTarget(rsc, sc, a);
17987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
18087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectColorTarget(uint32_t slot) {
18287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectColorTarget(rsc, sc, slot);
18487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
18587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
18687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectDepthTarget(Context *, Script *) {
18787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
18887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectDepthTarget(rsc, sc);
18987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
19087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearFrameBufferObjectTargets(Context *, Script *) {
19287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
19387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearFrameBufferObjectTargets(rsc, sc);
19487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
19587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
19787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
19887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// VP
19987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
20087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadProjectionMatrix(const rsc_Matrix *m) {
20287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
20387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadProjectionMatrix(rsc, sc, m);
20487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
20587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
20687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadModelMatrix(const rsc_Matrix *m) {
20787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
20887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadModelMatrix(rsc, sc, m);
20987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
21087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpLoadTextureMatrix(const rsc_Matrix *m) {
21287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
21387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpLoadTextureMatrix(rsc, sc, m);
21487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
21587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
21687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_PfConstantColor(ProgramFragment *pf, float r, float g, float b, float a) {
21787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
21887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrPfConstantColor(rsc, sc, pf, r, g, b, a);
21987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
22087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_VpGetProjectionMatrix(rsc_Matrix *m) {
22287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
22387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrVpGetProjectionMatrix(rsc, sc, m);
22487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
22587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
22787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
22887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Drawing
22987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
23087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
23187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
23287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x2, float y2, float z2, float u2, float v2,
23387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x3, float y3, float z3, float u3, float v3,
23487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                                 float x4, float y4, float z4, float u4, float v4) {
23587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
236414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
237414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    if (!rsc->setupCheck()) {
238414a46166126da6864258bd25ff183f9a3c6261dStephen Hines        return;
239414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    }
240414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
241414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    RsdHal *dc = (RsdHal *)rsc->mHal.drv;
242414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    if (!dc->gl.shaderCache->setup(rsc)) {
243414a46166126da6864258bd25ff183f9a3c6261dStephen Hines        return;
244414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    }
245414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
246414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    //ALOGE("Quad");
247414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    //ALOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1);
248414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    //ALOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2);
249414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    //ALOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3);
250414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    //ALOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4);
251414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
252414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4};
253414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4};
254414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
255414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    RsdVertexArray::Attrib attribs[2];
256414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    attribs[0].set(GL_FLOAT, 3, 12, false, (uint32_t)vtx, "ATTRIB_position");
257414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    attribs[1].set(GL_FLOAT, 2, 8, false, (uint32_t)tex, "ATTRIB_texture0");
258414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
259414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    RsdVertexArray va(attribs, 2);
260414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    va.setup(rsc);
261414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
262414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    RSD_CALL_GL(glDrawArrays, GL_TRIANGLE_FAN, 0, 4);
26387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
26487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
26587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawQuad(float x1, float y1, float z1,
26687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x2, float y2, float z2,
26787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x3, float y3, float z3,
26887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                        float x4, float y4, float z4) {
26987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
270414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    SC_DrawQuadTexCoords(x1, y1, z1, 0, 1,
271414a46166126da6864258bd25ff183f9a3c6261dStephen Hines                         x2, y2, z2, 1, 1,
272414a46166126da6864258bd25ff183f9a3c6261dStephen Hines                         x3, y3, z3, 1, 0,
273414a46166126da6864258bd25ff183f9a3c6261dStephen Hines                         x4, y4, z4, 0, 0);
27487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
27587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) {
27787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
278414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
279414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    ObjectBaseRef<const ProgramVertex> tmp(rsc->getProgramVertex());
280414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    rsc->setProgramVertex(rsc->getDefaultProgramVertex());
281414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    //rsc->setupCheck();
282414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
283414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    //GLint crop[4] = {0, h, w, -h};
284414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
285414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    float sh = rsc->getHeight();
286414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
287414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    SC_DrawQuad(x,   sh - y,     z,
288414a46166126da6864258bd25ff183f9a3c6261dStephen Hines                x+w, sh - y,     z,
289414a46166126da6864258bd25ff183f9a3c6261dStephen Hines                x+w, sh - (y+h), z,
290414a46166126da6864258bd25ff183f9a3c6261dStephen Hines                x,   sh - (y+h), z);
291414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    rsc->setProgramVertex((ProgramVertex *)tmp.get());
29287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
29487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawRect(float x1, float y1, float x2, float y2, float z) {
29587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
296414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
297414a46166126da6864258bd25ff183f9a3c6261dStephen Hines    SC_DrawQuad(x1, y2, z, x2, y2, z, x2, y1, z, x1, y1, z);
298414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
29987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3019e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsstatic void SC_DrawPath(Path *p) {
3029e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    GET_TLS();
3039e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    //rsrDrawPath(rsc, sc, p);
3049e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    rsdPathDraw(rsc, p);
3059e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams}
3069e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
30787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMesh(Mesh *m) {
30887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
30987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMesh(rsc, sc, m);
31087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
31187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
31287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitive(Mesh *m, uint32_t primIndex) {
31387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
31487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitive(rsc, sc, m, primIndex);
31587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
31687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
31787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawMeshPrimitiveRange(Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len) {
31887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
31987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawMeshPrimitiveRange(rsc, sc, m, primIndex, start, len);
32087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeshComputeBoundingBox(Mesh *m,
32387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *minX, float *minY, float *minZ,
32487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                               float *maxX, float *maxY, float *maxZ) {
32587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
32687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeshComputeBoundingBox(rsc, sc, m, minX, minY, minZ, maxX, maxY, maxZ);
32787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
32887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
32987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
33287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
33387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
33487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
33687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Color(float r, float g, float b, float a) {
33787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
33887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrColor(rsc, sc, r, g, b, a);
33987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_Finish() {
34287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
343653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLFinish(rsc);
34487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
34587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
34687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearColor(float r, float g, float b, float a) {
34787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
348653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsrPrepareClear(rsc, sc);
349653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLClearColor(rsc, r, g, b, a);
35087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
35187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearDepth(float v) {
35387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
354653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsrPrepareClear(rsc, sc);
355653b53ebcd2bedc94ac486080d2e82e1920232e3Alex Sakhartchouk    rsdGLClearDepth(rsc, v);
35687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
35787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
35887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetWidth() {
35987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
36087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetWidth(rsc, sc);
36187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
36287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
36387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_GetHeight() {
36487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
36587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetHeight(rsc, sc);
36687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
36787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
36887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawTextAlloc(Allocation *a, int x, int y) {
36987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
37087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawTextAlloc(rsc, sc, a, x, y);
37187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
37287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
37387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_DrawText(const char *text, int x, int y) {
37487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
37587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrDrawText(rsc, sc, text, x, y);
37687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
37787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
37887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureTextAlloc(Allocation *a,
37987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                         int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
38087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
38187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureTextAlloc(rsc, sc, a, left, right, top, bottom);
38287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
38387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
38487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MeasureText(const char *text,
38587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                    int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) {
38687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
38787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrMeasureText(rsc, sc, text, left, right, top, bottom);
38887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
38987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
39087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_BindFont(Font *f) {
39187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
39287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrBindFont(rsc, sc, f);
39387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
39487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
39587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_FontColor(float r, float g, float b, float a) {
39687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
39787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrFontColor(rsc, sc, r, g, b, a);
39887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
39987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
40387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//
40487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
40587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
40687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_SetObject(ObjectBase **dst, ObjectBase * src) {
40787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
40887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrSetObject(rsc, sc, dst, src);
40987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
41087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
41187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_ClearObject(ObjectBase **dst) {
41287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
41387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrClearObject(rsc, sc, dst);
41487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
41587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
41687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic bool SC_IsObject(const ObjectBase *src) {
41787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
41887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrIsObject(rsc, sc, src);
41987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
42087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
42487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic const Allocation * SC_GetAllocation(const void *ptr) {
42587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
426807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams    return rsdScriptGetAllocationForPointer(rsc, sc, ptr);
42787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
42887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
429c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAA(Script *target,
430c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *in,
431c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *out) {
432c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
433c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, NULL, 0, NULL);
434c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
435c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
436c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAU(Script *target,
437c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *in,
438c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            Allocation *out,
439c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                            const void *usr) {
44087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
44187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, NULL);
44287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
444c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAUS(Script *target,
445c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *in,
446c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *out,
447c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const void *usr,
448c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const RsScriptCall *call) {
44987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
45087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, 0, call);
45187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
453c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAUL(Script *target,
454c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *in,
455c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             Allocation *out,
456c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             const void *usr,
457c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                             uint32_t usrLen) {
458c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
459c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, usrLen, NULL);
460c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
461c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
462c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsstatic void SC_ForEach_SAAULS(Script *target,
463c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              Allocation *in,
464c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              Allocation *out,
465c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              const void *usr,
466c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              uint32_t usrLen,
467c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams                              const RsScriptCall *call) {
468c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    GET_TLS();
469c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams    rsrForEach(rsc, sc, target, in, out, usr, usrLen, call);
470c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams}
471c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
47287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
47387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
47487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
47587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Time routines
47687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
47787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
47887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic float SC_GetDt() {
47987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
48087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrGetDt(rsc, sc);
48187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
48387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstime_t SC_Time(time_t *timer) {
48487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
48587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrTime(rsc, sc, timer);
48687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
48787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
48887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samstm* SC_LocalTime(tm *local, time_t *timer) {
48987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
49087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrLocalTime(rsc, sc, local, timer);
49187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
49387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeMillis() {
49487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
49587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeMillis(rsc, sc);
49687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
49887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint64_t SC_UptimeNanos() {
49987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
50087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrUptimeNanos(rsc, sc);
50187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
50387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
50487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Message routines
50587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
50687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
50787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient2(int cmdID, void *data, int len) {
50887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
50987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, data, len);
51087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
51187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
51287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClient(int cmdID) {
51387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
51487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClient(rsc, sc, cmdID, NULL, 0);
51587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
51687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
51787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking2(int cmdID, void *data, int len) {
51887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
51987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, data, len);
52087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
52187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
52287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic uint32_t SC_ToClientBlocking(int cmdID) {
52387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    GET_TLS();
52487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return rsrToClientBlocking(rsc, sc, cmdID, NULL, 0);
52587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
52687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
52787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_divsi3(int a, int b) {
52887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
52987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
53087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
53187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsint SC_modsi3(int a, int b) {
53287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
53387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
53487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
53587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_udivsi3(unsigned int a, unsigned int b) {
53687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a / b;
53787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
53887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
53987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsunsigned int SC_umodsi3(unsigned int a, unsigned int b) {
54087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return a % b;
54187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
54287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
54387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugF(const char *s, float f) {
5444a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f)));
54587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
54687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv2(const char *s, float f1, float f2) {
5474a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f}", s, f1, f2);
54887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
54987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv3(const char *s, float f1, float f2, float f3) {
5504a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f}", s, f1, f2, f3);
55187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
55287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) {
5534a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
55487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
5556537404d5ad7ec19f0f26533d695d39909782781Stephen Hinesstatic void SC_debugF2(const char *s, float2 f) {
5566537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    ALOGD("%s {%f, %f}", s, f.x, f.y);
5576537404d5ad7ec19f0f26533d695d39909782781Stephen Hines}
5586537404d5ad7ec19f0f26533d695d39909782781Stephen Hinesstatic void SC_debugF3(const char *s, float3 f) {
5596537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z);
5606537404d5ad7ec19f0f26533d695d39909782781Stephen Hines}
5616537404d5ad7ec19f0f26533d695d39909782781Stephen Hinesstatic void SC_debugF4(const char *s, float4 f) {
5626537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w);
5636537404d5ad7ec19f0f26533d695d39909782781Stephen Hines}
56487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugD(const char *s, double d) {
5654a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d)));
56687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
56787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM4v4(const char *s, const float *f) {
5684a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
5694a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
5704a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]);
5714a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]);
57287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
57387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM3v3(const char *s, const float *f) {
5744a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]);
5754a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f", s, f[1], f[4], f[7]);
5764a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f, %f}",s, f[2], f[5], f[8]);
57787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
57887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugFM2v2(const char *s, const float *f) {
5794a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s {%f, %f", s, f[0], f[2]);
5804a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s  %f, %f}",s, f[1], f[3]);
58187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
582a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI8(const char *s, char c) {
583a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hhd  0x%hhx", s, c, (unsigned char)c);
584a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
585a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugC2(const char *s, char2 c) {
586a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhd, %hhd}  0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y);
587a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
588a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugC3(const char *s, char3 c) {
589a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
590a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
591a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugC4(const char *s, char4 c) {
592a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
593a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
594a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugU8(const char *s, unsigned char c) {
595a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hhu  0x%hhx", s, c, c);
596a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
597a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUC2(const char *s, uchar2 c) {
598a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hhu, %hhu}  0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y);
599a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
600a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUC3(const char *s, uchar3 c) {
601a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
602a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
603a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUC4(const char *s, uchar4 c) {
604a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
605a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
606a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI16(const char *s, short c) {
607a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hd  0x%hx", s, c, c);
608a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
609a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugS2(const char *s, short2 c) {
610a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hd, %hd}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
611a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
612a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugS3(const char *s, short3 c) {
613a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
614a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
615a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugS4(const char *s, short4 c) {
616a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
617a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
618a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugU16(const char *s, unsigned short c) {
619a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %hu  0x%hx", s, c, c);
620a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
621a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUS2(const char *s, ushort2 c) {
622a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%hu, %hu}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
623a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
624a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUS3(const char *s, ushort3 c) {
625a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
626a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
627a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUS4(const char *s, ushort4 c) {
628a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
629a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
63087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugI32(const char *s, int32_t i) {
631a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s %d  0x%x", s, i, i);
632a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
633a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI2(const char *s, int2 i) {
634a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%d, %d}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
635a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
636a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI3(const char *s, int3 i) {
637a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
638a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
639a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugI4(const char *s, int4 i) {
640a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
64187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
64287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugU32(const char *s, uint32_t i) {
6434a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %u  0x%x", s, i, i);
64487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
645a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUI2(const char *s, uint2 i) {
646a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%u, %u}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
647a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
648a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUI3(const char *s, uint3 i) {
649a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
650a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
651a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUI4(const char *s, uint4 i) {
652a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
653a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
65487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugLL64(const char *s, long long ll) {
6554a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %lld  0x%llx", s, ll, ll);
65687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
657a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugL2(const char *s, long2 ll) {
658a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y);
659a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
660a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugL3(const char *s, long3 ll) {
661a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
662a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
663a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugL4(const char *s, long4 ll) {
664a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
665a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
66687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugULL64(const char *s, unsigned long long ll) {
6674a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %llu  0x%llx", s, ll, ll);
66887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
669a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUL2(const char *s, ulong2 ll) {
670a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y);
671a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
672a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUL3(const char *s, ulong3 ll) {
673a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
674a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
675a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmastatic void SC_debugUL4(const char *s, ulong4 ll) {
676a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev 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);
677a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma}
67887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_debugP(const char *s, const void *p) {
6794a48244edc93b50bb9af35f7ec03825c8f7471c9Steve Block    ALOGD("%s %p", s, p);
68087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
68187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
68487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Stub implementation
68587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
68687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
68787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// llvm name mangling ref
68887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//  <builtin-type> ::= v  # void
68987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= b  # bool
69087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= c  # char
69187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= a  # signed char
69287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= h  # unsigned char
69387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= s  # short
69487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= t  # unsigned short
69587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= i  # int
69687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= j  # unsigned int
69787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= l  # long
69887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= m  # unsigned long
69987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= x  # long long, __int64
70087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= y  # unsigned long long, __int64
70187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= f  # float
70287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//                 ::= d  # double
70387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic RsdSymbolTable gSyms[] = {
70587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memset", (void *)&memset, true },
70687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "memcpy", (void *)&memcpy, true },
70787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
70887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Refcounting
70987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_SetObject, true },
71087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_element", (void *)&SC_ClearObject, true },
71187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_element", (void *)&SC_IsObject, true },
71287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
71387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_SetObject, true },
71487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_type", (void *)&SC_ClearObject, true },
71587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_type", (void *)&SC_IsObject, true },
71687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
71787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_SetObject, true },
71887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP13rs_allocation", (void *)&SC_ClearObject, true },
71987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject13rs_allocation", (void *)&SC_IsObject, true },
72087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
72187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_SetObject, true },
72287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP10rs_sampler", (void *)&SC_ClearObject, true },
72387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject10rs_sampler", (void *)&SC_IsObject, true },
72487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
72587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_SetObject, true },
72687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP9rs_script", (void *)&SC_ClearObject, true },
72787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject9rs_script", (void *)&SC_IsObject, true },
72887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
7299e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z11rsSetObjectP7rs_pathS_", (void *)&SC_SetObject, true },
7309e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z13rsClearObjectP7rs_path", (void *)&SC_ClearObject, true },
7319e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z10rsIsObject7rs_path", (void *)&SC_IsObject, true },
7329e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
73387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_meshS_", (void *)&SC_SetObject, true },
73487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_mesh", (void *)&SC_ClearObject, true },
73587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_mesh", (void *)&SC_IsObject, true },
73687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
73787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP19rs_program_fragmentS_", (void *)&SC_SetObject, true },
73887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP19rs_program_fragment", (void *)&SC_ClearObject, true },
73987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject19rs_program_fragment", (void *)&SC_IsObject, true },
74087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
74187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_vertexS_", (void *)&SC_SetObject, true },
74287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_vertex", (void *)&SC_ClearObject, true },
74387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_vertex", (void *)&SC_IsObject, true },
74487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
74587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP17rs_program_rasterS_", (void *)&SC_SetObject, true },
74687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP17rs_program_raster", (void *)&SC_ClearObject, true },
74787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject17rs_program_raster", (void *)&SC_IsObject, true },
74887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
74987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP16rs_program_storeS_", (void *)&SC_SetObject, true },
75087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP16rs_program_store", (void *)&SC_ClearObject, true },
75187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject16rs_program_store", (void *)&SC_IsObject, true },
75287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
75387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsSetObjectP7rs_fontS_", (void *)&SC_SetObject, true },
75487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsClearObjectP7rs_font", (void *)&SC_ClearObject, true },
75587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z10rsIsObject7rs_font", (void *)&SC_IsObject, true },
75687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
75787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Allocation ops
75887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_AllocationSyncAll, true },
75987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocation", (void *)&SC_AllocationSyncAll, false },
76087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgAllocationSyncAll13rs_allocationj", (void *)&SC_AllocationSyncAll2, false },
76174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z20rsgAllocationSyncAll13rs_allocation24rs_allocation_usage_type", (void *)&SC_AllocationSyncAll2, false },
76287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z15rsGetAllocationPKv", (void *)&SC_GetAllocation, true },
763b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    { "_Z18rsAllocationIoSend13rs_allocation", (void *)&SC_AllocationIoSend, false },
764b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    { "_Z21rsAllocationIoReceive13rs_allocation", (void *)&SC_AllocationIoReceive, false },
76574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy1DRange13rs_allocationjjjS_jj", (void *)&SC_AllocationCopy1DRange, false },
76674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    { "_Z23rsAllocationCopy2DRange13rs_allocationjjj26rs_allocation_cubemap_facejjS_jjjS0_", (void *)&SC_AllocationCopy2DRange, false },
76787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
76887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Messaging
76987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
77087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClienti", (void *)&SC_ToClient, false },
77187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsSendToClientiPKvj", (void *)&SC_ToClient2, false },
77287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingi", (void *)&SC_ToClientBlocking, false },
77387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_ToClientBlocking2, false },
77487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
77587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_BindProgramFragment, false },
77687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_BindProgramStore, false },
77787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_BindProgramVertex, false },
77887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_BindProgramRaster, false },
77987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_BindSampler, false },
78087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_BindTexture, false },
781a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    { "_Z15rsgBindConstant19rs_program_fragmentj13rs_allocation", (void *)&SC_BindFragmentConstant, false },
782a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk    { "_Z15rsgBindConstant17rs_program_vertexj13rs_allocation", (void *)&SC_BindVertexConstant, false },
78387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
78487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadProjectionMatrix, false },
78587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadModelMatrix, false },
78687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadTextureMatrix, false },
78787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
78887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_VpGetProjectionMatrix, false },
78987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
79087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_PfConstantColor, false },
79187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
79287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgGetWidthv", (void *)&SC_GetWidth, false },
79387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgGetHeightv", (void *)&SC_GetHeight, false },
79487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
79587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
79687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawRectfffff", (void *)&SC_DrawRect, false },
79787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_DrawQuad, false },
79887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_DrawQuadTexCoords, false },
79987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_DrawSpriteScreenspace, false },
80087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
80187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_DrawMesh, false },
80287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_DrawMeshPrimitive, false },
80387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_DrawMeshPrimitiveRange, false },
80487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_MeshComputeBoundingBox, false },
80587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
8069e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams    { "_Z11rsgDrawPath7rs_path", (void *)&SC_DrawPath, false },
8079e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams
80887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false },
80987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false },
81087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
81187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false },
81287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false },
81387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false },
81487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false },
81587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
81687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false },
81787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false },
81887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
81987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindColorTarget13rs_allocationj", (void *)&SC_BindFrameBufferObjectColorTarget, false },
82087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z18rsgBindDepthTarget13rs_allocation", (void *)&SC_BindFrameBufferObjectDepthTarget, false },
82187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearColorTargetj", (void *)&SC_ClearFrameBufferObjectColorTarget, false },
82287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z19rsgClearDepthTargetv", (void *)&SC_ClearFrameBufferObjectDepthTarget, false },
82387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z24rsgClearAllRenderTargetsv", (void *)&SC_ClearFrameBufferObjectTargets, false },
82487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
825aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_", (void *)&SC_ForEach_SAA, true },
826aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach_SAAU, true },
827f598811a60088236222bb1879503842094ca378bStephen Hines    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvPK14rs_script_call", (void *)&SC_ForEach_SAAUS, true },
828aa152101cc4d04597d9aefc3e5a1454eaf39d2ccJason Sams    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvj", (void *)&SC_ForEach_SAAUL, true },
829f598811a60088236222bb1879503842094ca378bStephen Hines    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvjPK14rs_script_call", (void *)&SC_ForEach_SAAULS, true },
83087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
83187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // time
83287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z6rsTimePi", (void *)&SC_Time, true },
83387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z11rsLocaltimeP5rs_tmPKi", (void *)&SC_LocalTime, true },
83487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z14rsUptimeMillisv", (void*)&SC_UptimeMillis, true },
83587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z13rsUptimeNanosv", (void*)&SC_UptimeNanos, true },
83687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsGetDtv", (void*)&SC_GetDt, false },
83787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
83887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // misc
83987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z5colorffff", (void *)&SC_Color, false },
84087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z9rsgFinishv", (void *)&SC_Finish, false },
84187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
84287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Debug
84387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcf", (void *)&SC_debugF, true },
84487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcff", (void *)&SC_debugFv2, true },
84587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcfff", (void *)&SC_debugFv3, true },
84687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcffff", (void *)&SC_debugFv4, true },
8476537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    { "_Z7rsDebugPKcDv2_f", (void *)&SC_debugF2, true },
8486537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    { "_Z7rsDebugPKcDv3_f", (void *)&SC_debugF3, true },
8496537404d5ad7ec19f0f26533d695d39909782781Stephen Hines    { "_Z7rsDebugPKcDv4_f", (void *)&SC_debugF4, true },
85087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcd", (void *)&SC_debugD, true },
85187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix4x4", (void *)&SC_debugFM4v4, true },
85287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix3x3", (void *)&SC_debugFM3v3, true },
85387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPK12rs_matrix2x2", (void *)&SC_debugFM2v2, true },
854a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcc", (void *)&SC_debugI8, true },
855a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_c", (void *)&SC_debugC2, true },
856a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_c", (void *)&SC_debugC3, true },
857a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_c", (void *)&SC_debugC4, true },
858a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKch", (void *)&SC_debugU8, true },
859a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_h", (void *)&SC_debugUC2, true },
860a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_h", (void *)&SC_debugUC3, true },
861a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_h", (void *)&SC_debugUC4, true },
862a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcs", (void *)&SC_debugI16, true },
863a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_s", (void *)&SC_debugS2, true },
864a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_s", (void *)&SC_debugS3, true },
865a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_s", (void *)&SC_debugS4, true },
866a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKct", (void *)&SC_debugU16, true },
867a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_t", (void *)&SC_debugUS2, true },
868a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_t", (void *)&SC_debugUS3, true },
869a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_t", (void *)&SC_debugUS4, true },
87087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKci", (void *)&SC_debugI32, true },
871a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_i", (void *)&SC_debugI2, true },
872a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_i", (void *)&SC_debugI3, true },
873a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_i", (void *)&SC_debugI4, true },
87487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcj", (void *)&SC_debugU32, true },
875a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_j", (void *)&SC_debugUI2, true },
876a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_j", (void *)&SC_debugUI3, true },
877a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_j", (void *)&SC_debugUI4, true },
87887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // Both "long" and "unsigned long" need to be redirected to their
87987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // 64-bit counterparts, since we have hacked Slang to use 64-bit
88087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    // for "long" on Arm (to be similar to Java).
88187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcl", (void *)&SC_debugLL64, true },
882a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_l", (void *)&SC_debugL2, true },
883a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_l", (void *)&SC_debugL3, true },
884a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_l", (void *)&SC_debugL4, true },
88587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcm", (void *)&SC_debugULL64, true },
886a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_m", (void *)&SC_debugUL2, true },
887a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_m", (void *)&SC_debugUL3, true },
888a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_m", (void *)&SC_debugUL4, true },
88987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcx", (void *)&SC_debugLL64, true },
890a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_x", (void *)&SC_debugL2, true },
891a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_x", (void *)&SC_debugL3, true },
892a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_x", (void *)&SC_debugL4, true },
89387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcy", (void *)&SC_debugULL64, true },
894a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv2_y", (void *)&SC_debugUL2, true },
895a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv3_y", (void *)&SC_debugUL3, true },
896a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharma    { "_Z7rsDebugPKcDv4_y", (void *)&SC_debugUL4, true },
89787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { "_Z7rsDebugPKcPKv", (void *)&SC_debugP, true },
89887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
89987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    { NULL, NULL, false }
90087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams};
90187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
90287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
90387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsvoid* rsdLookupRuntimeStub(void* pContext, char const* name) {
90487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    ScriptC *s = (ScriptC *)pContext;
90587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    RsdSymbolTable *syms = gSyms;
90687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    const RsdSymbolTable *sym = rsdLookupSymbolMath(name);
90787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
90887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (!sym) {
90987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        while (syms->mPtr) {
91087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            if (!strcmp(syms->mName, name)) {
91187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams                sym = syms;
91287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            }
91387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams            syms++;
91487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        }
91587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
91687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
91787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    if (sym) {
91887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        s->mHal.info.isThreadable &= sym->threadable;
91987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams        return sym->mPtr;
92087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    }
921af12ac6a08651464f8d823add667c706f993b587Steve Block    ALOGE("ScriptC sym lookup failed for %s", name);
92287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams    return NULL;
92387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
92487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
92587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
926