rsdRuntimeStubs.cpp revision 174ebc44658bffa27f97c85ae0265ad3cb48ae85
187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams/*
2709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * Copyright (C) 2011-2012 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 "rsdCore.h"
25807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams#include "rsdBcc.h"
2687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
27b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams#include "rsdAllocation.h"
28414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#include "rsdShaderCache.h"
29414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#include "rsdVertexArray.h"
3087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <time.h>
3287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android;
3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android::renderscript;
3587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
36a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float2 __attribute__((ext_vector_type(2)));
37a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float3 __attribute__((ext_vector_type(3)));
38a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float4 __attribute__((ext_vector_type(4)));
395261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double2 __attribute__((ext_vector_type(2)));
405261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double3 __attribute__((ext_vector_type(3)));
415261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double4 __attribute__((ext_vector_type(4)));
42a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char2 __attribute__((ext_vector_type(2)));
43a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char3 __attribute__((ext_vector_type(3)));
44a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char4 __attribute__((ext_vector_type(4)));
45a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar2 __attribute__((ext_vector_type(2)));
46a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar3 __attribute__((ext_vector_type(3)));
47a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar4 __attribute__((ext_vector_type(4)));
48d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short2 __attribute__((ext_vector_type(2)));
49d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short3 __attribute__((ext_vector_type(3)));
50d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short4 __attribute__((ext_vector_type(4)));
51d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort2 __attribute__((ext_vector_type(2)));
52d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort3 __attribute__((ext_vector_type(3)));
53d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort4 __attribute__((ext_vector_type(4)));
54a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int2 __attribute__((ext_vector_type(2)));
55a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int3 __attribute__((ext_vector_type(3)));
56a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int4 __attribute__((ext_vector_type(4)));
57a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint2 __attribute__((ext_vector_type(2)));
58a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint3 __attribute__((ext_vector_type(3)));
59a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint4 __attribute__((ext_vector_type(4)));
60d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long2 __attribute__((ext_vector_type(2)));
61d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long3 __attribute__((ext_vector_type(3)));
62d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long4 __attribute__((ext_vector_type(4)));
63d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong2 __attribute__((ext_vector_type(2)));
64d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong3 __attribute__((ext_vector_type(3)));
65d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong4 __attribute__((ext_vector_type(4)));
6687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
675261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint8_t uchar;
685261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint16_t ushort;
695261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint32_t uint;
700b575de8ed0b628d84d256f5846500b0385979bdTim Murray#ifndef RS_SERVER
715261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint64_t ulong;
720b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif
7387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
74127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#ifndef __LP64__
75d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#define OPAQUETYPE(t) \
76d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    typedef struct { const int* const p; } __attribute__((packed, aligned(4))) t;
77127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#else
78127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#define OPAQUETYPE(t) \
79127d51c1193f4055795da967d47a13bedd3cb951Miao Wang    typedef struct { const void* p; const void* r; const void* v1; const void* v2; } t;
80127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#endif
81d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray
82d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_element)
83d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_type)
84d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_allocation)
85d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_sampler)
86d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_script)
87d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_script_call)
882544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga Nainar
892544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_fragment);
902544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_store);
912544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_vertex);
922544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_raster);
932544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_mesh);
942544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_font);
952544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga Nainar
96d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#undef OPAQUETYPE
97d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray
987a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hinestypedef enum {
997a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines    // Empty to avoid conflicting definitions with RsAllocationCubemapFace
1007a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines} rs_allocation_cubemap_face;
1017a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines
102174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef struct { unsigned int val; } rs_allocation_usage_type;
103174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
104d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murraytypedef struct {
105d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_sec;     ///< seconds
106d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_min;     ///< minutes
107d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_hour;    ///< hours
108d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_mday;    ///< day of the month
109d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_mon;     ///< month
110d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_year;    ///< year
111d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_wday;    ///< day of the week
112d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_yday;    ///< day of the year
113d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray    int tm_isdst;   ///< daylight savings time
114d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray} rs_tm;
115d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray
1167153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// Some RS functions are not threadsafe but can be called from an invoke
1177153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// function.  Instead of summarily marking scripts that call these functions as
1187153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// not-threadable we detect calls to them in the driver and sends a fatal error
1197153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// message.
1207153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainarstatic bool failIfInKernel(Context *rsc, const char *funcName) {
1217153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    RsdHal *dc = (RsdHal *)rsc->mHal.drv;
1227153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    RsdCpuReference *impl = (RsdCpuReference *) dc->mCpuRef;
1237153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar
1247153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    if (impl->getInForEach()) {
1257153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        char buf[256];
1267153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        sprintf(buf, "Error: Call to unsupported function %s "
1277153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar                         "in kernel", funcName);
1287153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        rsc->setError(RS_ERROR_FATAL_DRIVER, buf);
1297153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        return true;
1307153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    }
1317153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    return false;
1327153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar}
1337153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar
13487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
135174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Allocation routines
13687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
137174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifdef __i386__
138174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// i386 has different struct return passing to ARM; emulate with a pointer
139174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst Allocation * rsGetAllocation(const void *ptr) {
140709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
141174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const Script *sc = RsdCpuReference::getTlsScript();
142174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Allocation* alloc = rsdScriptGetAllocationForPointer(rsc, sc, ptr);
143174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    android::renderscript::rs_allocation obj = {0};
144174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    alloc->callUpdateCacheObject(rsc, &obj);
145174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return (Allocation *)obj.p;
14674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
147174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else
148174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst android::renderscript::rs_allocation rsGetAllocation(const void *ptr) {
149709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
150174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const Script *sc = RsdCpuReference::getTlsScript();
151174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Allocation* alloc = rsdScriptGetAllocationForPointer(rsc, sc, ptr);
1527153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar
153174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ // ARMv7/MIPS
154174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    android::renderscript::rs_allocation obj = {0};
155174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else // AArch64/x86_64/MIPS64
156174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    android::renderscript::rs_allocation obj = {0, 0, 0, 0};
157174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif
158174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    alloc->callUpdateCacheObject(rsc, &obj);
159174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return obj;
16074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk}
161174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif
16274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
163174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationIoSend(::rs_allocation a) {
1641aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray    Context *rsc = RsdCpuReference::getTlsContext();
1657153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    if (failIfInKernel(rsc, "rsAllocationIoSend"))
1667153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        return;
167174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationIoSend(rsc, (Allocation *)a.p);
1681aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray}
1691aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray
170174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationIoReceive(::rs_allocation a) {
1711aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray    Context *rsc = RsdCpuReference::getTlsContext();
1727153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    if (failIfInKernel(rsc, "rsAllocationIoReceive"))
1737153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        return;
174174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationIoReceive(rsc, (Allocation *)a.p);
1751aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray}
1761aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray
177174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationCopy1DRange(
178174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        ::rs_allocation dstAlloc,
179174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        uint32_t dstOff, uint32_t dstMip, uint32_t count,
180174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        ::rs_allocation srcAlloc,
181174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        uint32_t srcOff, uint32_t srcMip) {
1821aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray    Context *rsc = RsdCpuReference::getTlsContext();
1837153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    if (failIfInKernel(rsc, "rsAllocationCopy1DRange"))
1847153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        return;
185174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationCopy1DRange(rsc, (Allocation *)dstAlloc.p, dstOff, dstMip,
186174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                             count, (Allocation *)srcAlloc.p, srcOff, srcMip);
1871aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray}
1881aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray
189174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationCopy2DRange(
190174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        ::rs_allocation dstAlloc,
191174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        uint32_t dstXoff, uint32_t dstYoff,
192174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        uint32_t dstMip, rs_allocation_cubemap_face dstFace,
193174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        uint32_t width, uint32_t height,
194174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        ::rs_allocation srcAlloc,
195174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        uint32_t srcXoff, uint32_t srcYoff,
196174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        uint32_t srcMip, rs_allocation_cubemap_face srcFace) {
1971aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray    Context *rsc = RsdCpuReference::getTlsContext();
1987153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar    if (failIfInKernel(rsc, "rsAllocationCopy2DRange"))
1997153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar        return;
200174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationCopy2DRange(rsc, (Allocation *)dstAlloc.p,
2011aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray                             dstXoff, dstYoff, dstMip, dstFace,
202174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                             width, height, (Allocation *)srcAlloc.p,
2031aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray                             srcXoff, srcYoff, srcMip, srcFace);
2041aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray}
2051aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray
206174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
207174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Object routines
208174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
209174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define IS_CLEAR_SET_OBJ(t) \
210174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    bool rsIsObject(t src) { \
211174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        return src.p != nullptr; \
212174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
213174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void __attribute__((overloadable)) rsClearObject(t *dst) { \
214174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        Context *rsc = RsdCpuReference::getTlsContext(); \
215174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsrClearObject(rsc, reinterpret_cast<rs_object_base *>(dst)); \
216174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
217174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void __attribute__((overloadable)) rsSetObject(t *dst, t src) { \
218174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        Context *rsc = RsdCpuReference::getTlsContext(); \
219174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsrSetObject(rsc, reinterpret_cast<rs_object_base *>(dst), (ObjectBase*)src.p); \
220174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
2217153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar
222174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_element)
223174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_type)
224174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_allocation)
225174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_sampler)
226174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_script)
227b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams
228174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_mesh)
229174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_fragment)
230174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_vertex)
231174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_raster)
232174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_store)
233174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_font)
2341aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray
235174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef IS_CLEAR_SET_OBJ
23674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
23787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
238174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Element routines
23987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
240174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void * ElementAt(Allocation *a, RsDataType dt, uint32_t vecSize,
241174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                        uint32_t x, uint32_t y, uint32_t z) {
242709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
243174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const Type *t = a->getType();
244174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const Element *e = t->getElement();
245a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
246174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    char buf[256];
247174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    if (x && (x >= t->getLODDimX(0))) {
248174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        sprintf(buf, "Out range ElementAt X %i of %i", x, t->getLODDimX(0));
249174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
250174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        return nullptr;
251174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
252a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk
253174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    if (y && (y >= t->getLODDimY(0))) {
254174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        sprintf(buf, "Out range ElementAt Y %i of %i", y, t->getLODDimY(0));
255174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
256174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        return nullptr;
257174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
25887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
259174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    if (z && (z >= t->getLODDimZ(0))) {
260174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        sprintf(buf, "Out range ElementAt Z %i of %i", z, t->getLODDimZ(0));
261174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
262174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        return nullptr;
263174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
26487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
265174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    if (vecSize > 0) {
266174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        if (vecSize != e->getVectorSize()) {
267174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen            sprintf(buf, "Vector size mismatch for ElementAt %i of %i", vecSize, e->getVectorSize());
268174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen            rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
269174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen            return nullptr;
270174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        }
27187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
272174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        if (dt != e->getType()) {
273174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen            sprintf(buf, "Data type mismatch for ElementAt %i of %i", dt, e->getType());
274174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen            rsc->setError(RS_ERROR_FATAL_DEBUG, buf);
275174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen            return nullptr;
276174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        }
277174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
27887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
279174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr;
280174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const uint32_t eSize = e->getSizeBytes();
281174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const uint32_t stride = a->mHal.drvState.lod[0].stride;
282174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const uint32_t dimY = a->mHal.drvState.lod[0].dimY;
283174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return &p[(x * eSize) + (y * stride) + (z * stride * dimY)];
28487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
28587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
286174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y, uint32_t z) {
287174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const Type *t = const_cast<Allocation*>((Allocation*)a.p)->getType();
288174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const Element *e = t->getElement();
289174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void *tmp = ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z);
290174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    if (tmp != nullptr)
291174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        memcpy(tmp, ptr, e->getSizeBytes());
29287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
294174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y) {
295174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsSetElementAt(a, ptr, x, y, 0);
29687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
29787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
298174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x) {
299174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsSetElementAt(a, ptr, x, 0, 0);
30087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
302174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y, uint32_t z) {
303174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z);
30487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
306174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y) {
307174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsGetElementAt(a, x, y ,0);
30887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
30987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
310174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x) {
311174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsGetElementAt(a, x, 0, 0);
31287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
31387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
314174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define ELEMENT_AT(T, DT, VS) \
315174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, uint32_t y, uint32_t z) { \
316174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \
317174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        if (r != nullptr) ((T *)r)[0] = *val; \
318174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        else ALOGE("Error from %s", __PRETTY_FUNCTION__); \
319174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
320174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, uint32_t y) { \
321174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsSetElementAt_##T(a, val, x, y, 0); \
322174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
323174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x) { \
324174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsSetElementAt_##T(a, val, x, 0, 0); \
325174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
326174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y, uint32_t z) { \
327174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \
328174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        if (r != nullptr) *val = ((T *)r)[0]; \
329174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        else ALOGE("Error from %s", __PRETTY_FUNCTION__); \
330174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
331174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y) { \
332174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsGetElementAt_##T(a, val, x, y, 0); \
333174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
334174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x) { \
335174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsGetElementAt_##T(a, val, x, 0, 0); \
336174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
33787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
338174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char, RS_TYPE_SIGNED_8, 1)
339174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char2, RS_TYPE_SIGNED_8, 2)
340174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char3, RS_TYPE_SIGNED_8, 3)
341174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char4, RS_TYPE_SIGNED_8, 4)
342174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar, RS_TYPE_UNSIGNED_8, 1)
343174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar2, RS_TYPE_UNSIGNED_8, 2)
344174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar3, RS_TYPE_UNSIGNED_8, 3)
345174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar4, RS_TYPE_UNSIGNED_8, 4)
346174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short, RS_TYPE_SIGNED_16, 1)
347174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short2, RS_TYPE_SIGNED_16, 2)
348174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short3, RS_TYPE_SIGNED_16, 3)
349174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short4, RS_TYPE_SIGNED_16, 4)
350174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort, RS_TYPE_UNSIGNED_16, 1)
351174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort2, RS_TYPE_UNSIGNED_16, 2)
352174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort3, RS_TYPE_UNSIGNED_16, 3)
353174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort4, RS_TYPE_UNSIGNED_16, 4)
354174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int, RS_TYPE_SIGNED_32, 1)
355174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int2, RS_TYPE_SIGNED_32, 2)
356174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int3, RS_TYPE_SIGNED_32, 3)
357174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int4, RS_TYPE_SIGNED_32, 4)
358174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint, RS_TYPE_UNSIGNED_32, 1)
359174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint2, RS_TYPE_UNSIGNED_32, 2)
360174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint3, RS_TYPE_UNSIGNED_32, 3)
361174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint4, RS_TYPE_UNSIGNED_32, 4)
362174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long, RS_TYPE_SIGNED_64, 1)
363174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long2, RS_TYPE_SIGNED_64, 2)
364174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long3, RS_TYPE_SIGNED_64, 3)
365174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long4, RS_TYPE_SIGNED_64, 4)
366174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong, RS_TYPE_UNSIGNED_64, 1)
367174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong2, RS_TYPE_UNSIGNED_64, 2)
368174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong3, RS_TYPE_UNSIGNED_64, 3)
369174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong4, RS_TYPE_UNSIGNED_64, 4)
370174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float, RS_TYPE_FLOAT_32, 1)
371174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float2, RS_TYPE_FLOAT_32, 2)
372174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float3, RS_TYPE_FLOAT_32, 3)
373174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float4, RS_TYPE_FLOAT_32, 4)
374174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double, RS_TYPE_FLOAT_64, 1)
375174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double2, RS_TYPE_FLOAT_64, 2)
376174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double3, RS_TYPE_FLOAT_64, 3)
377174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double4, RS_TYPE_FLOAT_64, 4)
37887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
379174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef ELEMENT_AT
38087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
381174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__
382174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen/*
383174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * We miss some symbols for rs{Get,Set}Element_long,ulong variants because 64
384174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * bit integer values are 'long' in RS-land but might be 'long long' in the
385174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * driver.  Define native_long* and native_ulong* types to be vectors of
386174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * 'long' as seen by the driver and define overloaded versions of
387174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * rsSetElementAt_* and rsGetElementAt_*.  This should get us the correct
388174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * mangled names in the driver.
389174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen */
39087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
391174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long2 __attribute__((ext_vector_type(2)));
392174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long3 __attribute__((ext_vector_type(3)));
393174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long4 __attribute__((ext_vector_type(4)));
394174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong2 __attribute__((ext_vector_type(2)));
395174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong3 __attribute__((ext_vector_type(3)));
396174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong4 __attribute__((ext_vector_type(4)));
39787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
398174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define ELEMENT_AT_OVERLOADS(T, U) \
399174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, uint32_t y, uint32_t z) { \
400174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsSetElementAt_##T(a, (T *) val, x, y, z); \
401174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
402174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, uint32_t y) { \
403174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsSetElementAt_##T(a, (T *) val, x, y, 0); \
404174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
405174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x) { \
406174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsSetElementAt_##T(a, (T *) val, x, 0, 0); \
407174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
408174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y, uint32_t z) { \
409174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsGetElementAt_##T(a, (T *) val, x, y, z); \
410174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
411174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y) { \
412174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsGetElementAt_##T(a, (T *) val, x, y, 0); \
413174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
414174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x) { \
415174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        rsGetElementAt_##T(a, (T *) val, x, 0, 0); \
416174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    } \
41787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
418174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long2, native_long2)
419174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long3, native_long3)
420174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long4, native_long4)
421174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong, unsigned long)
422174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong2, native_ulong2)
423174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong3, native_ulong3)
424174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong4, native_ulong4)
425414a46166126da6864258bd25ff183f9a3c6261dStephen Hines
426174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// We also need variants of rs{Get,Set}ElementAt_long that take 'long long *' as
427174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// we might have this overloaded variant in old APKs.
428174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long, long long)
42987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
430174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef ELEMENT_AT_OVERLOADS
431174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif
43287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
433174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
434174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// ForEach routines
435174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
436174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script,
437174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation in,
438174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation out,
439174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             const void *usr,
440174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             const rs_script_call *call) {
441709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
442174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrForEach(rsc, (Script *)script.p, (Allocation *)in.p,
443174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen               (Allocation *)out.p, usr, 0, (RsScriptCall *)call);
44487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
44587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
446174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script,
447174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation in,
448174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation out,
449174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             const void *usr) {
450709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
451174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrForEach(rsc, (Script *)script.p, (Allocation *)in.p, (Allocation *)out.p,
452174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen               usr, 0, nullptr);
45387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
45487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
455174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script,
456174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation in,
457174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation out) {
458709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
459174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrForEach(rsc, (Script *)script.p, (Allocation *)in.p, (Allocation *)out.p,
460174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen               nullptr, 0, nullptr);
46187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
46287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
463174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// These functions are only supported in 32-bit.
464174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__
465174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script,
466174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation in,
467174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation out,
468174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             const void *usr,
469174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             uint32_t usrLen) {
470709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
471174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrForEach(rsc, (Script *)script.p, (Allocation *)in.p, (Allocation *)out.p,
472174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen               usr, usrLen, nullptr);
47387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
47487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
475174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script,
476174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation in,
477174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             ::rs_allocation out,
478174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             const void *usr,
479174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             uint32_t usrLen,
480174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                             const rs_script_call *call) {
481709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
482174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrForEach(rsc, (Script *)script.p, (Allocation *)in.p, (Allocation *)out.p,
483174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen               usr, usrLen, (RsScriptCall *)call);
48487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
485174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif
48687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
48787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
488174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Message routines
48987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
490174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID) {
491709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
492174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrToClient(rsc, cmdID, (const void *)nullptr, 0);
49387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
495174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID, const void *data, uint32_t len) {
496709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
497174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrToClient(rsc, cmdID, data, len);
49887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
49987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
500174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID) {
501709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
502174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrToClientBlocking(rsc, cmdID, (const void *)nullptr, 0);
50387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
505174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID, const void *data, uint32_t len) {
506709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
507174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrToClientBlocking(rsc, cmdID, data, len);
50887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
50987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
510174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
511174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Time routines
512174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
51387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
514174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// time_t is int in 32-bit RenderScript.  time_t is long in bionic.  rsTime and
515174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// rsLocaltime are set to explicitly take 'const int *' so we generate the
516174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// correct mangled names.
517174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__
518174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint rsTime(int *timer) {
519174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else
520174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentime_t rsTime(time_t * timer) {
521174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif
522709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
523174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrTime(rsc, (time_t *)timer);
52487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
52587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
526174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__
527174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const int *timer) {
528174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else
529174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const time_t *timer) {
530174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif
531709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
532174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return (rs_tm*)rsrLocalTime(rsc, (tm*)local, (time_t *)timer);
53387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
53487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
535174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeMillis() {
536709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
537174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrUptimeMillis(rsc);
53887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
53987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
540174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeNanos() {
541709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
542174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrUptimeNanos(rsc);
54387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
54487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
545174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenfloat rsGetDt() {
546709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
547174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const Script *sc = RsdCpuReference::getTlsScript();
548174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrGetDt(rsc, sc);
54987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
55087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
55187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
552174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Graphics routines
55387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams//////////////////////////////////////////////////////////////////////////////
554174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef RS_COMPATIBILITY_LIB
555174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
556174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                 float x2, float y2, float z2, float u2, float v2,
557174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                 float x3, float y3, float z3, float u3, float v3,
558174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                 float x4, float y4, float z4, float u4, float v4) {
5591aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray    Context *rsc = RsdCpuReference::getTlsContext();
560dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar
561174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    if (!rsc->setupCheck()) {
562174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        return;
563174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
56487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
565174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    RsdHal *dc = (RsdHal *)rsc->mHal.drv;
566174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    if (!dc->gl.shaderCache->setup(rsc)) {
567174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen        return;
568174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    }
569444bd208b4f129bd8e4c0cce4cf6d709c8900891Yong Chen
570174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    //ALOGE("Quad");
571174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    //ALOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1);
572174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    //ALOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2);
573174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    //ALOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3);
574174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    //ALOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4);
575127d51c1193f4055795da967d47a13bedd3cb951Miao Wang
576174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4};
577174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4};
578127d51c1193f4055795da967d47a13bedd3cb951Miao Wang
579174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    RsdVertexArray::Attrib attribs[2];
580174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    attribs[0].set(GL_FLOAT, 3, 12, false, (size_t)vtx, "ATTRIB_position");
581174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    attribs[1].set(GL_FLOAT, 2, 8, false, (size_t)tex, "ATTRIB_texture0");
582240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray
583174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    RsdVertexArray va(attribs, 2);
584174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    va.setup(rsc);
585240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray
586174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    RSD_CALL_GL(glDrawArrays, GL_TRIANGLE_FAN, 0, 4);
587240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray}
588174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
589174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuad(float x1, float y1, float z1,
590174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                        float x2, float y2, float z2,
591174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                        float x3, float y3, float z3,
592174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                        float x4, float y4, float z4) {
593174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    SC_DrawQuadTexCoords(x1, y1, z1, 0, 1,
594174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                         x2, y2, z2, 1, 1,
595174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                         x3, y3, z3, 1, 0,
596174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                         x4, y4, z4, 0, 0);
59747211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray}
598174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
599174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) {
60047211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray    Context *rsc = RsdCpuReference::getTlsContext();
60187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
602174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ObjectBaseRef<const ProgramVertex> tmp(rsc->getProgramVertex());
603174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsc->setProgramVertex(rsc->getDefaultProgramVertex());
604174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    //rsc->setupCheck();
605174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
606174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    //GLint crop[4] = {0, h, w, -h};
607dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar
608174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float sh = rsc->getHeight();
609c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
610174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    SC_DrawQuad(x,   sh - y,     z,
611174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x+w, sh - y,     z,
612174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x+w, sh - (y+h), z,
613174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x,   sh - (y+h), z);
614174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsc->setProgramVertex((ProgramVertex *)tmp.get());
61587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
61687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
617174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsAllocationMarkDirty(::rs_allocation a) {
618447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar    Context *rsc = RsdCpuReference::getTlsContext();
619174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT);
620447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar}
62187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
622174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a) {
623447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar    Context *rsc = RsdCpuReference::getTlsContext();
624174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT);
625447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar}
626dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar
627174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a,
628174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                          unsigned int usage) {
629447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar    Context *rsc = RsdCpuReference::getTlsContext();
630174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)usage);
631447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar}
63287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
63387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
634174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a,
635174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                          rs_allocation_usage_type source) {
636709a0978ae141198018ca9769f8d96292a8928e6Jason Sams    Context *rsc = RsdCpuReference::getTlsContext();
637174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)source.val);
63887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
639174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
640174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramFragment(::rs_program_fragment pf) {
641174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
642174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindProgramFragment(rsc, (ProgramFragment *)pf.p);
6430b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
644174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
645174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramStore(::rs_program_store ps) {
646174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
647174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindProgramStore(rsc, (ProgramStore *)ps.p);
6480b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
649174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
650174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramVertex(::rs_program_vertex pv) {
651174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
652174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindProgramVertex(rsc, (ProgramVertex *)pv.p);
6530b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
654174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
655174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramRaster(::rs_program_raster pr) {
656174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
657174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindProgramRaster(rsc, (ProgramRaster *)pr.p);
6580b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
659174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
660174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindSampler(::rs_program_fragment pf,
661174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                    uint32_t slot, ::rs_sampler s) {
662174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
663174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindSampler(rsc, (ProgramFragment *)pf.p, slot, (Sampler *)s.p);
6640b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
665174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
666174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindTexture(::rs_program_fragment pf,
667174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                    uint32_t slot, ::rs_allocation a) {
668174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
669174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindTexture(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p);
6700b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
671174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
672174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_fragment pf,
673174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                     uint32_t slot, ::rs_allocation a) {
674174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
675174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindConstant(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p);
6760b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
677174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
678174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_vertex pv,
679174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                     uint32_t slot, ::rs_allocation a) {
680174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
681174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindConstant(rsc, (ProgramVertex *)pv.p, slot, (Allocation *)a.p);
6820b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
683174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
684174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *m) {
685174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
686174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrVpLoadProjectionMatrix(rsc, (const rsc_Matrix *)m);
6870b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
688174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
689174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *m) {
690174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
691174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrVpLoadModelMatrix(rsc, (const rsc_Matrix *)m);
6920b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
693174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
694174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *m) {
695174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
696174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrVpLoadTextureMatrix(rsc, (const rsc_Matrix *)m);
6970b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
698174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
699174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *m) {
700174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
701174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrVpGetProjectionMatrix(rsc, (rsc_Matrix *)m);
7020b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
703174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
704174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramFragmentConstantColor(::rs_program_fragment pf,
705174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                     float r, float g, float b, float a) {
706174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
707174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrPfConstantColor(rsc, (ProgramFragment *)pf.p, r, g, b, a);
7080b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
709174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
710174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetWidth(void) {
711174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
712174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrGetWidth(rsc);
7130b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
714174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
715174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetHeight(void) {
716174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
717174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return rsrGetHeight(rsc);
7180b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
719174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
720174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawRect(float x1, float y1, float x2, float y2, float z) {
721174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    SC_DrawQuad(x1, y2, z,
722174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x2, y2, z,
723174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x2, y1, z,
724174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x1, y1, z);
7250b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
726174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
727174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuad(float x1, float y1, float z1,
728174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                 float x2, float y2, float z2,
729174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                 float x3, float y3, float z3,
730174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                 float x4, float y4, float z4) {
731174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    SC_DrawQuad(x1, y1, z1,
732174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x2, y2, z2,
733174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x3, y3, z3,
734174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                x4, y4, z4);
7350b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
736174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
737174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
738174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                          float x2, float y2, float z2, float u2, float v2,
739174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                          float x3, float y3, float z3, float u3, float v3,
740174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                          float x4, float y4, float z4, float u4, float v4) {
741174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    SC_DrawQuadTexCoords(x1, y1, z1, u1, v1,
742174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                         x2, y2, z2, u2, v2,
743174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                         x3, y3, z3, u3, v3,
744174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                         x4, y4, z4, u4, v4);
7450b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
746174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
747174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h) {
748174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    SC_DrawSpriteScreenspace(x, y, z, w, h);
7490b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
750174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
751174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism) {
752174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
753174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrDrawMesh(rsc, (Mesh *)ism.p);
7540b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
755174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
756174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex) {
757174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
758174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrDrawMeshPrimitive(rsc, (Mesh *)ism.p, primitiveIndex);
7590b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
760174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
761174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex, uint start, uint len) {
762174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
763174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrDrawMeshPrimitiveRange(rsc, (Mesh *)ism.p, primitiveIndex, start, len);
7640b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
765174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
766174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid  rsgMeshComputeBoundingBox(::rs_mesh mesh,
767174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                float *minX, float *minY, float *minZ,
768174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                                float *maxX, float *maxY, float *maxZ) {
769174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
770174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrMeshComputeBoundingBox(rsc, (Mesh *)mesh.p, minX, minY, minZ, maxX, maxY, maxZ);
7710b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
772174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
773174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColor(float r, float g, float b, float a) {
774174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
775174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrPrepareClear(rsc);
776174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsdGLClearColor(rsc, r, g, b, a);
7770b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
778174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
779174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepth(float value) {
780174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
781174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrPrepareClear(rsc);
782174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsdGLClearDepth(rsc, value);
7830b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
784174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
785174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(const char *text, int x, int y) {
786174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
787174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrDrawText(rsc, text, x, y);
7880b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
789127d51c1193f4055795da967d47a13bedd3cb951Miao Wang
790174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(::rs_allocation a, int x, int y) {
791174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
792174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrDrawTextAlloc(rsc, (Allocation *)a.p, x, y);
793127d51c1193f4055795da967d47a13bedd3cb951Miao Wang}
794127d51c1193f4055795da967d47a13bedd3cb951Miao Wang
795174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(const char *text, int *left, int *right,
796174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                    int *top, int *bottom) {
797174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
798174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrMeasureText(rsc, text, left, right, top, bottom);
799127d51c1193f4055795da967d47a13bedd3cb951Miao Wang}
800127d51c1193f4055795da967d47a13bedd3cb951Miao Wang
801174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(::rs_allocation a, int *left, int *right,
802174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen                    int *top, int *bottom) {
803174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
804174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrMeasureTextAlloc(rsc, (Allocation *)a.p, left, right, top, bottom);
805dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar}
806dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar
807174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindFont(::rs_font font) {
808174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
809174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindFont(rsc, (Font *)font.p);
8100b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
811174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
812174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFontColor(float r, float g, float b, float a) {
813174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
814174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrFontColor(rsc, r, g, b, a);
8150b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
816174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
817174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindColorTarget(::rs_allocation a, uint slot) {
818174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
819174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindFrameBufferObjectColorTarget(rsc, (Allocation *)a.p, slot);
8200b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
821174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
822174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindDepthTarget(::rs_allocation a) {
823174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
824174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrBindFrameBufferObjectDepthTarget(rsc, (Allocation *)a.p);
8250b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
826174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
827174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColorTarget(uint slot) {
828174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
829174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrClearFrameBufferObjectColorTarget(rsc, slot);
8300b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
831174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
832174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepthTarget(void) {
833174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
834174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrClearFrameBufferObjectDepthTarget(rsc);
8350b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
836174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
837174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearAllRenderTargets(void) {
838174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
839174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrClearFrameBufferObjectTargets(rsc);
8400b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
841127d51c1193f4055795da967d47a13bedd3cb951Miao Wang
842174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid color(float r, float g, float b, float a) {
843174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
844174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsrColor(rsc, r, g, b, a);
8450b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8460b575de8ed0b628d84d256f5846500b0385979bdTim Murray
847174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFinish(void) {
848174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    Context *rsc = RsdCpuReference::getTlsContext();
849174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    rsdGLFinish(rsc);
850174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen}
851174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif
8520b575de8ed0b628d84d256f5846500b0385979bdTim Murray
853174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
854174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Debug routines
855174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen//////////////////////////////////////////////////////////////////////////////
8560b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f) {
857174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f)));
8580b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8590b575de8ed0b628d84d256f5846500b0385979bdTim Murray
8600b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2) {
861174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f}", s, f1, f2);
8620b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8630b575de8ed0b628d84d256f5846500b0385979bdTim Murray
8640b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3) {
865174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f}", s, f1, f2, f3);
8660b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8670b575de8ed0b628d84d256f5846500b0385979bdTim Murray
8680b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3, float f4) {
869174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
8700b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8710b575de8ed0b628d84d256f5846500b0385979bdTim Murray
872174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float2 *f2) {
873174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float2 f = *f2;
874174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f}", s, f.x, f.y);
8750b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8760b575de8ed0b628d84d256f5846500b0385979bdTim Murray
877174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float3 *f3) {
878174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float3 f = *f3;
879174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z);
8800b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8810b575de8ed0b628d84d256f5846500b0385979bdTim Murray
882174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float4 *f4) {
883174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float4 f = *f4;
884174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w);
8850b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8860b575de8ed0b628d84d256f5846500b0385979bdTim Murray
8870b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, double d) {
888174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d)));
8890b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
8900b575de8ed0b628d84d256f5846500b0385979bdTim Murray
891174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double2 *d2) {
892174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    double2 d = *d2;
893174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f}", s, d.x, d.y);
8946ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet}
8956ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet
896174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double3 *d3) {
897174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    double3 d = *d3;
898174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f}", s, d.x, d.y, d.z);
8996ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet}
9006ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet
901174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double4 *d4) {
902174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    double4 d = *d4;
903174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f, %f}", s, d.x, d.y, d.z, d.w);
9046ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet}
9056ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet
906b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix4x4 *m) {
907174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float *f = (float *)m;
908174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
909174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s  %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
910174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s  %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]);
911174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s  %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]);
9120b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9130b575de8ed0b628d84d256f5846500b0385979bdTim Murray
914b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix3x3 *m) {
915174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float *f = (float *)m;
916174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]);
917174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s  %f, %f, %f", s, f[1], f[4], f[7]);
918174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s  %f, %f, %f}",s, f[2], f[5], f[8]);
9190b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9200b575de8ed0b628d84d256f5846500b0385979bdTim Murray
921b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix2x2 *m) {
922174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    float *f = (float *)m;
923174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%f, %f", s, f[0], f[2]);
924174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s  %f, %f}",s, f[1], f[3]);
9250b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9260b575de8ed0b628d84d256f5846500b0385979bdTim Murray
9270b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, char c) {
928174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %hhd  0x%hhx", s, c, (unsigned char)c);
9290b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9300b575de8ed0b628d84d256f5846500b0385979bdTim Murray
931174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char2 *c2) {
932174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    char2 c = *c2;
933174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%hhd, %hhd}  0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y);
9340b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9350b575de8ed0b628d84d256f5846500b0385979bdTim Murray
936174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char3 *c3) {
937174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    char3 c = *c3;
938174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    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);
9390b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9400b575de8ed0b628d84d256f5846500b0385979bdTim Murray
941174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char4 *c4) {
942174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    char4 c = *c4;
943174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    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);
9440b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9450b575de8ed0b628d84d256f5846500b0385979bdTim Murray
9460b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned char c) {
947174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %hhu  0x%hhx", s, c, c);
9480b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9490b575de8ed0b628d84d256f5846500b0385979bdTim Murray
950174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar2 *c2) {
951174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    uchar2 c = *c2;
952174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%hhu, %hhu}  0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y);
9530b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9540b575de8ed0b628d84d256f5846500b0385979bdTim Murray
955174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar3 *c3) {
956174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    uchar3 c = *c3;
957174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%hhu, %hhu, %hhu}  0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.x, c.y, c.z);
9580b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9590b575de8ed0b628d84d256f5846500b0385979bdTim Murray
960174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar4 *c4) {
961174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    uchar4 c = *c4;
962174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    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);
9630b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9640b575de8ed0b628d84d256f5846500b0385979bdTim Murray
9650b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, short c) {
966174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %hd  0x%hx", s, c, c);
9670b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9680b575de8ed0b628d84d256f5846500b0385979bdTim Murray
969174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short2 *c2) {
970174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    short2 c = *c2;
971174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%hd, %hd}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
9720b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9730b575de8ed0b628d84d256f5846500b0385979bdTim Murray
974174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short3 *c3) {
975174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    short3 c = *c3;
976174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%hd, %hd, %hd}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z);
9770b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9780b575de8ed0b628d84d256f5846500b0385979bdTim Murray
979174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short4 *c4) {
980174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    short4 c = *c4;
981174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    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);
9820b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9830b575de8ed0b628d84d256f5846500b0385979bdTim Murray
9840b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned short c) {
985174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %hu  0x%hx", s, c, c);
986174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen}
987174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
988174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort2 *c2) {
989174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ushort2 c = *c2;
990174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%hu, %hu}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
9910b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
9920b575de8ed0b628d84d256f5846500b0385979bdTim Murray
993174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort3 *c3) {
994174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ushort3 c = *c3;
995174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%hu, %hu, %hu}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z);
996174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen}
997174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen
998174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort4 *c4) {
999174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ushort4 c = *c4;
1000174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    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);
10010b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10020b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1003174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, int i) {
1004174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %d  0x%x", s, i, i);
10050b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10060b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1007174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int2 *i2) {
1008174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    int2 i = *i2;
1009174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%d, %d}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
10100b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10110b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1012174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int3 *i3) {
1013174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    int3 i = *i3;
1014174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%d, %d, %d}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
10150b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10160b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1017174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int4 *i4) {
1018174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    int4 i = *i4;
1019174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    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);
10200b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10210b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1022174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned int i) {
1023174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %u  0x%x", s, i, i);
10240b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10250b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1026174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint2 *i2) {
1027174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    uint2 i = *i2;
1028174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%u, %u}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
10290b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10300b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1031174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint3 *i3) {
1032174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    uint3 i = *i3;
1033174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%u, %u, %u}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
10340b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10350b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1036174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint4 *i4) {
1037174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    uint4 i = *i4;
1038174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    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);
10390b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10400b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1041174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T>
1042174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline long long LL(const T &x) {
1043174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return static_cast<long long>(x);
10440b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10450b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1046174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T>
1047174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline unsigned long long LLu(const T &x) {
1048174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    return static_cast<unsigned long long>(x);
10490b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10500b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1051174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long l) {
1052174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %lld  0x%llx", s, LL(l), LL(l));
10530b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10540b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1055174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long long ll) {
1056174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %lld  0x%llx", s, LL(ll), LL(ll));
10570b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10580b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1059b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long2 *c) {
1060174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    long2 ll = *c;
1061174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y));
10620b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10630b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1064b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long3 *c) {
1065174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    long3 ll = *c;
1066174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z));
10670b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10680b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1069b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long4 *c) {
1070174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    long4 ll = *c;
1071174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w));
10720b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10730b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1074174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long l) {
1075174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    unsigned long long ll = l;
1076174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %llu  0x%llx", s, ll, ll);
10770b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10780b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1079174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long long ll) {
1080174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %llu  0x%llx", s, ll, ll);
10810b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10820b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1083b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong2 *c) {
1084174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ulong2 ll = *c;
1085174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y));
10860b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10870b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1088b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong3 *c) {
1089174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ulong3 ll = *c;
1090174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z));
10910b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10920b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1093b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong4 *c) {
1094174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ulong4 ll = *c;
1095174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w));
10960b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
10970b575de8ed0b628d84d256f5846500b0385979bdTim Murray
1098a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// FIXME: We need to export these function signatures for the compatibility
1099a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// library. The C++ name mangling that LLVM uses for ext_vector_type requires
1100a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// different versions for "long" vs. "long long". Note that the called
1101a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// functions are still using the appropriate 64-bit sizes.
1102127d51c1193f4055795da967d47a13bedd3cb951Miao Wang
1103127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#ifndef __LP64__
1104a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l2 __attribute__((ext_vector_type(2)));
1105a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l3 __attribute__((ext_vector_type(3)));
1106a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l4 __attribute__((ext_vector_type(4)));
1107a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul2 __attribute__((ext_vector_type(2)));
1108a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul3 __attribute__((ext_vector_type(3)));
1109a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul4 __attribute__((ext_vector_type(4)));
1110a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines
1111a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l2 *c) {
1112174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    long2 ll = *(const long2 *)c;
1113174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y));
1114a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines}
1115a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines
1116a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l3 *c) {
1117174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    long3 ll = *(const long3 *)c;
1118174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z));
1119a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines}
1120a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines
1121a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l4 *c) {
1122174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    long4 ll = *(const long4 *)c;
1123174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w));
1124a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines}
1125a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines
1126a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul2 *c) {
1127174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ulong2 ll = *(const ulong2 *)c;
1128174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y));
1129a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines}
1130a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines
1131a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul3 *c) {
1132174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ulong3 ll = *(const ulong3 *)c;
1133174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z));
1134a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines}
1135a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines
1136a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul4 *c) {
1137174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ulong4 ll = *(const ulong4 *)c;
1138174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w));
1139a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines}
1140127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#endif
1141a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines
1142174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long2 ll) {
1143174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y));
11449f39aaf0145e9607200141e4716b73319055e6d7Tim Murray}
11459f39aaf0145e9607200141e4716b73319055e6d7Tim Murray
1146174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long3 ll) {
1147174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z));
11489f39aaf0145e9607200141e4716b73319055e6d7Tim Murray}
11499f39aaf0145e9607200141e4716b73319055e6d7Tim Murray
1150174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long4 ll) {
1151174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w));
11529f39aaf0145e9607200141e4716b73319055e6d7Tim Murray}
11539f39aaf0145e9607200141e4716b73319055e6d7Tim Murray
1154174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong2 ll) {
1155174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y));
11569f39aaf0145e9607200141e4716b73319055e6d7Tim Murray}
11579f39aaf0145e9607200141e4716b73319055e6d7Tim Murray
1158174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong3 ll) {
1159174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z));
11609f39aaf0145e9607200141e4716b73319055e6d7Tim Murray}
11619f39aaf0145e9607200141e4716b73319055e6d7Tim Murray
1162174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong4 ll) {
1163174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w));
11649f39aaf0145e9607200141e4716b73319055e6d7Tim Murray}
11659f39aaf0145e9607200141e4716b73319055e6d7Tim Murray
11660b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, const void *p) {
1167174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen    ALOGD("%s %p", s, p);
11680b575de8ed0b628d84d256f5846500b0385979bdTim Murray}
116987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams
1170709a0978ae141198018ca9769f8d96292a8928e6Jason Samsextern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name) {
1171174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// TODO: remove
117244bef6fba6244292b751387f3d6c31cca96c28adChris Wailes    return nullptr;
117387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams}
1174