rsdRuntimeStubs.cpp revision dda5cb5b59ae02ec03001ea12c374413714f3d38
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////////////////////////////////////////////////////////////////////////////// 13766d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic#if defined(__i386__) || (defined(__mips__) && __mips==32) 13866d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic// i386 and MIPS32 have 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 15366d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic#ifndef __LP64__ // ARMv7 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////////////////////////////////////////////////////////////////////////////// 436dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Nivoid rsForEachInternal(int slot, 437dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rs_script_call *call, 438dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni int hasOutput, 439dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni int numIn, 440dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni ...) { 44112398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni Context *rsc = RsdCpuReference::getTlsContext(); 44212398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni Script *s = const_cast<Script*>(RsdCpuReference::getTlsScript()); 443dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni std::unique_ptr<Allocation*> inputs(numIn > 0 ? new Allocation*[numIn] : nullptr); 444dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni if (numIn > 0 && inputs == nullptr) { 445dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni ALOGE("rsForEachInternal: out of memory for %u inputs.", numIn); 446dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni return; 447dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 448dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni Allocation* out = nullptr; 449dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni va_list argp; 450dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni va_start(argp, numIn); 451dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni for (int i = 0; i < numIn; i++) { 452dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni ::rs_allocation alloc = va_arg(argp, ::rs_allocation); 453dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni inputs.get()[i] = reinterpret_cast<Allocation*>(const_cast<int*>(alloc.p)); 454dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 455dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni if (hasOutput) { 456dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni ::rs_allocation outAlloc = va_arg(argp, ::rs_allocation); 457dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni out = reinterpret_cast<Allocation*>(const_cast<int*>(outAlloc.p)); 458dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 459dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni va_end(argp); 460dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, s, slot, numIn, inputs.get(), out, nullptr, 0, (RsScriptCall*)call); 46112398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni} 46212398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni 463174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 464174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 465174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 466174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 467174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const rs_script_call *call) { 468709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 469dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 4709479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar (Allocation *)out.p, usr, 0, (RsScriptCall *)call); 47187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 47287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 473174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 474174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 475174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 476174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr) { 477709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 478dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 4799479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, 0, nullptr); 48087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 48187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 482174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 483174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 484174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out) { 485709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 486dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 4879479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar nullptr, 0, nullptr); 48887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 48987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 490174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// These functions are only supported in 32-bit. 491174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 492174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 493174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 494174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 495174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 496174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t usrLen) { 497709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 498dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 4999479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, usrLen, nullptr); 50087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 50187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 502174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 503174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 504174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 505174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 506174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t usrLen, 507174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const rs_script_call *call) { 508709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 509dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 5109479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, usrLen, (RsScriptCall *)call); 51187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 512174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 51387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 51487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 515174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Message routines 51687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 517174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID) { 518709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 519174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClient(rsc, cmdID, (const void *)nullptr, 0); 52087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 52187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 522174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID, const void *data, uint32_t len) { 523709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 524174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClient(rsc, cmdID, data, len); 52587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 52687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 527174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID) { 528709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 529174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClientBlocking(rsc, cmdID, (const void *)nullptr, 0); 53087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 53187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 532174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID, const void *data, uint32_t len) { 533709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 534174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClientBlocking(rsc, cmdID, data, len); 53587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 53687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 537174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 538174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Time routines 539174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 54087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 541174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// time_t is int in 32-bit RenderScript. time_t is long in bionic. rsTime and 542174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// rsLocaltime are set to explicitly take 'const int *' so we generate the 543174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// correct mangled names. 544174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 545174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint rsTime(int *timer) { 546174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 547174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentime_t rsTime(time_t * timer) { 548174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 549709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 550174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrTime(rsc, (time_t *)timer); 55187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 55287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 553174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 554174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const int *timer) { 555174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 556174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const time_t *timer) { 557174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 558709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 559174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return (rs_tm*)rsrLocalTime(rsc, (tm*)local, (time_t *)timer); 56087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 56187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 562174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeMillis() { 563709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 564174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrUptimeMillis(rsc); 56587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 56687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 567174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeNanos() { 568709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 569174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrUptimeNanos(rsc); 57087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 57187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 572174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenfloat rsGetDt() { 573709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 574174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Script *sc = RsdCpuReference::getTlsScript(); 575174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetDt(rsc, sc); 57687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 57787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 57887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 579174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Graphics routines 58087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 581174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef RS_COMPATIBILITY_LIB 582174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 583174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, float u2, float v2, 584174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, float u3, float v3, 585174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4, float u4, float v4) { 5861aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 587dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 588174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (!rsc->setupCheck()) { 589174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return; 590174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 59187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 592174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdHal *dc = (RsdHal *)rsc->mHal.drv; 593174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (!dc->gl.shaderCache->setup(rsc)) { 594174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return; 595174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 596444bd208b4f129bd8e4c0cce4cf6d709c8900891Yong Chen 597174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("Quad"); 598174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1); 599174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2); 600174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3); 601174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4); 602127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 603174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4}; 604174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4}; 605127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 606174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdVertexArray::Attrib attribs[2]; 607174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen attribs[0].set(GL_FLOAT, 3, 12, false, (size_t)vtx, "ATTRIB_position"); 608174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen attribs[1].set(GL_FLOAT, 2, 8, false, (size_t)tex, "ATTRIB_texture0"); 609240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray 610174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdVertexArray va(attribs, 2); 611174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen va.setup(rsc); 612240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray 613174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RSD_CALL_GL(glDrawArrays, GL_TRIANGLE_FAN, 0, 4); 614240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray} 615174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 616174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuad(float x1, float y1, float z1, 617174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, 618174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, 619174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4) { 620174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuadTexCoords(x1, y1, z1, 0, 1, 621174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, 1, 1, 622174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, 1, 0, 623174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4, 0, 0); 62447211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray} 625174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 626174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) { 62747211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray Context *rsc = RsdCpuReference::getTlsContext(); 62887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 629174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ObjectBaseRef<const ProgramVertex> tmp(rsc->getProgramVertex()); 630174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setProgramVertex(rsc->getDefaultProgramVertex()); 631174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //rsc->setupCheck(); 632174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 633174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //GLint crop[4] = {0, h, w, -h}; 634dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 635174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float sh = rsc->getHeight(); 636c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams 637174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x, sh - y, z, 638174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x+w, sh - y, z, 639174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x+w, sh - (y+h), z, 640174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x, sh - (y+h), z); 641174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setProgramVertex((ProgramVertex *)tmp.get()); 64287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 64387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 644174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsAllocationMarkDirty(::rs_allocation a) { 645447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 646174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT); 647447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 64887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 649174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a) { 650447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 651174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT); 652447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 653dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 654174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a, 655174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen unsigned int usage) { 656447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 657174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)usage); 658447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 65987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 66087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 661174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a, 662174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rs_allocation_usage_type source) { 663709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 664174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)source.val); 66587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 666174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 667174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramFragment(::rs_program_fragment pf) { 668174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 669174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramFragment(rsc, (ProgramFragment *)pf.p); 6700b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 671174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 672174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramStore(::rs_program_store ps) { 673174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 674174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramStore(rsc, (ProgramStore *)ps.p); 6750b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 676174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 677174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramVertex(::rs_program_vertex pv) { 678174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 679174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramVertex(rsc, (ProgramVertex *)pv.p); 6800b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 681174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 682174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramRaster(::rs_program_raster pr) { 683174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 684174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramRaster(rsc, (ProgramRaster *)pr.p); 6850b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 686174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 687174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindSampler(::rs_program_fragment pf, 688174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_sampler s) { 689174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 690174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindSampler(rsc, (ProgramFragment *)pf.p, slot, (Sampler *)s.p); 6910b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 692174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 693174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindTexture(::rs_program_fragment pf, 694174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 695174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 696174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindTexture(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p); 6970b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 698174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 699174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_fragment pf, 700174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 701174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 702174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindConstant(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p); 7030b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 704174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 705174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_vertex pv, 706174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 707174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 708174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindConstant(rsc, (ProgramVertex *)pv.p, slot, (Allocation *)a.p); 7090b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 710174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 711174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *m) { 712174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 713174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadProjectionMatrix(rsc, (const rsc_Matrix *)m); 7140b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 715174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 716174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *m) { 717174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 718174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadModelMatrix(rsc, (const rsc_Matrix *)m); 7190b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 720174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 721174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *m) { 722174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 723174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadTextureMatrix(rsc, (const rsc_Matrix *)m); 7240b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 725174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 726174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *m) { 727174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 728174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpGetProjectionMatrix(rsc, (rsc_Matrix *)m); 7290b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 730174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 731174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramFragmentConstantColor(::rs_program_fragment pf, 732174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float r, float g, float b, float a) { 733174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 734174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPfConstantColor(rsc, (ProgramFragment *)pf.p, r, g, b, a); 7350b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 736174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 737174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetWidth(void) { 738174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 739174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetWidth(rsc); 7400b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 741174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 742174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetHeight(void) { 743174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 744174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetHeight(rsc); 7450b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 746174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 747174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawRect(float x1, float y1, float x2, float y2, float z) { 748174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x1, y2, z, 749174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z, 750174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y1, z, 751174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x1, y1, z); 7520b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 753174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 754174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuad(float x1, float y1, float z1, 755174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, 756174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, 757174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4) { 758174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x1, y1, z1, 759174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, 760174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, 761174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4); 7620b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 763174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 764174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 765174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, float u2, float v2, 766174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, float u3, float v3, 767174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4, float u4, float v4) { 768174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuadTexCoords(x1, y1, z1, u1, v1, 769174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, u2, v2, 770174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, u3, v3, 771174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4, u4, v4); 7720b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 773174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 774174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h) { 775174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawSpriteScreenspace(x, y, z, w, h); 7760b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 777174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 778174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism) { 779174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 780174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMesh(rsc, (Mesh *)ism.p); 7810b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 782174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 783174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex) { 784174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 785174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMeshPrimitive(rsc, (Mesh *)ism.p, primitiveIndex); 7860b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 787174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 788174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex, uint start, uint len) { 789174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 790174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMeshPrimitiveRange(rsc, (Mesh *)ism.p, primitiveIndex, start, len); 7910b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 792174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 793174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeshComputeBoundingBox(::rs_mesh mesh, 794174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *minX, float *minY, float *minZ, 795174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *maxX, float *maxY, float *maxZ) { 796174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 797174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeshComputeBoundingBox(rsc, (Mesh *)mesh.p, minX, minY, minZ, maxX, maxY, maxZ); 7980b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 799174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 800174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColor(float r, float g, float b, float a) { 801174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 802174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPrepareClear(rsc); 803174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLClearColor(rsc, r, g, b, a); 8040b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 805174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 806174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepth(float value) { 807174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 808174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPrepareClear(rsc); 809174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLClearDepth(rsc, value); 8100b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 811174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 812174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(const char *text, int x, int y) { 813174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 814174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawText(rsc, text, x, y); 8150b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 816127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 817174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(::rs_allocation a, int x, int y) { 818174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 819174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawTextAlloc(rsc, (Allocation *)a.p, x, y); 820127d51c1193f4055795da967d47a13bedd3cb951Miao Wang} 821127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 822174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(const char *text, int *left, int *right, 823174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int *top, int *bottom) { 824174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 825174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeasureText(rsc, text, left, right, top, bottom); 826127d51c1193f4055795da967d47a13bedd3cb951Miao Wang} 827127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 828174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(::rs_allocation a, int *left, int *right, 829174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int *top, int *bottom) { 830174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 831174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeasureTextAlloc(rsc, (Allocation *)a.p, left, right, top, bottom); 832dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar} 833dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 834174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindFont(::rs_font font) { 835174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 836174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFont(rsc, (Font *)font.p); 8370b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 838174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 839174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFontColor(float r, float g, float b, float a) { 840174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 841174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrFontColor(rsc, r, g, b, a); 8420b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 843174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 844174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindColorTarget(::rs_allocation a, uint slot) { 845174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 846174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFrameBufferObjectColorTarget(rsc, (Allocation *)a.p, slot); 8470b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 848174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 849174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindDepthTarget(::rs_allocation a) { 850174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 851174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFrameBufferObjectDepthTarget(rsc, (Allocation *)a.p); 8520b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 853174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 854174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColorTarget(uint slot) { 855174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 856174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectColorTarget(rsc, slot); 8570b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 858174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 859174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepthTarget(void) { 860174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 861174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectDepthTarget(rsc); 8620b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 863174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 864174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearAllRenderTargets(void) { 865174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 866174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectTargets(rsc); 8670b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 868127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 869174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid color(float r, float g, float b, float a) { 870174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 871174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrColor(rsc, r, g, b, a); 8720b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 8730b575de8ed0b628d84d256f5846500b0385979bdTim Murray 874174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFinish(void) { 875174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 876174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLFinish(rsc); 877174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 878174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 8790b575de8ed0b628d84d256f5846500b0385979bdTim Murray 880174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 881174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Debug routines 882174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 8830b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f) { 884174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f))); 8850b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 8860b575de8ed0b628d84d256f5846500b0385979bdTim Murray 8870b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2) { 888174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, f1, f2); 8890b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 8900b575de8ed0b628d84d256f5846500b0385979bdTim Murray 8910b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3) { 892174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, f1, f2, f3); 8930b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 8940b575de8ed0b628d84d256f5846500b0385979bdTim Murray 8950b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3, float f4) { 896174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4); 8970b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 8980b575de8ed0b628d84d256f5846500b0385979bdTim Murray 899174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float2 *f2) { 900174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float2 f = *f2; 901174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, f.x, f.y); 9020b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9030b575de8ed0b628d84d256f5846500b0385979bdTim Murray 904174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float3 *f3) { 905174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float3 f = *f3; 906174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z); 9070b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9080b575de8ed0b628d84d256f5846500b0385979bdTim Murray 909174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float4 *f4) { 910174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float4 f = *f4; 911174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w); 9120b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9130b575de8ed0b628d84d256f5846500b0385979bdTim Murray 9140b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, double d) { 915174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d))); 9160b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9170b575de8ed0b628d84d256f5846500b0385979bdTim Murray 918174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double2 *d2) { 919174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double2 d = *d2; 920174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, d.x, d.y); 9216ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 9226ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 923174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double3 *d3) { 924174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double3 d = *d3; 925174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, d.x, d.y, d.z); 9266ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 9276ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 928174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double4 *d4) { 929174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double4 d = *d4; 930174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, d.x, d.y, d.z, d.w); 9316ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 9326ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 933b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix4x4 *m) { 934174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 935174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]); 936174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]); 937174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]); 938174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]); 9390b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9400b575de8ed0b628d84d256f5846500b0385979bdTim Murray 941b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix3x3 *m) { 942174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 943174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]); 944174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f", s, f[1], f[4], f[7]); 945174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f}",s, f[2], f[5], f[8]); 9460b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9470b575de8ed0b628d84d256f5846500b0385979bdTim Murray 948b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix2x2 *m) { 949174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 950174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f", s, f[0], f[2]); 951174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f}",s, f[1], f[3]); 9520b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9530b575de8ed0b628d84d256f5846500b0385979bdTim Murray 9540b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, char c) { 955174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hhd 0x%hhx", s, c, (unsigned char)c); 9560b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9570b575de8ed0b628d84d256f5846500b0385979bdTim Murray 958174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char2 *c2) { 959174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char2 c = *c2; 960174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hhd, %hhd} 0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y); 9610b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9620b575de8ed0b628d84d256f5846500b0385979bdTim Murray 963174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char3 *c3) { 964174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char3 c = *c3; 965174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 9660b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9670b575de8ed0b628d84d256f5846500b0385979bdTim Murray 968174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char4 *c4) { 969174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char4 c = *c4; 970174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 9710b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9720b575de8ed0b628d84d256f5846500b0385979bdTim Murray 9730b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned char c) { 974174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hhu 0x%hhx", s, c, c); 9750b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9760b575de8ed0b628d84d256f5846500b0385979bdTim Murray 977174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar2 *c2) { 978174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar2 c = *c2; 979174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hhu, %hhu} 0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y); 9800b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9810b575de8ed0b628d84d256f5846500b0385979bdTim Murray 982174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar3 *c3) { 983174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar3 c = *c3; 984174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 9850b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9860b575de8ed0b628d84d256f5846500b0385979bdTim Murray 987174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar4 *c4) { 988174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar4 c = *c4; 989174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 9900b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9910b575de8ed0b628d84d256f5846500b0385979bdTim Murray 9920b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, short c) { 993174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hd 0x%hx", s, c, c); 9940b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 9950b575de8ed0b628d84d256f5846500b0385979bdTim Murray 996174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short2 *c2) { 997174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short2 c = *c2; 998174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hd, %hd} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 9990b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10000b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1001174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short3 *c3) { 1002174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short3 c = *c3; 1003174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 10040b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10050b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1006174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short4 *c4) { 1007174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short4 c = *c4; 1008174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 10090b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10100b575de8ed0b628d84d256f5846500b0385979bdTim Murray 10110b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned short c) { 1012174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hu 0x%hx", s, c, c); 1013174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1014174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1015174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort2 *c2) { 1016174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort2 c = *c2; 1017174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hu, %hu} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 10180b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10190b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1020174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort3 *c3) { 1021174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort3 c = *c3; 1022174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 1023174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1024174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1025174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort4 *c4) { 1026174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort4 c = *c4; 1027174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 10280b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10290b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1030174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, int i) { 1031174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %d 0x%x", s, i, i); 10320b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10330b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1034174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int2 *i2) { 1035174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int2 i = *i2; 1036174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%d, %d} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 10370b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10380b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1039174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int3 *i3) { 1040174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int3 i = *i3; 1041174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 10420b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10430b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1044174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int4 *i4) { 1045174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int4 i = *i4; 1046174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 10470b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10480b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1049174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned int i) { 1050174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %u 0x%x", s, i, i); 10510b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10520b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1053174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint2 *i2) { 1054174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint2 i = *i2; 1055174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%u, %u} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 10560b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10570b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1058174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint3 *i3) { 1059174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint3 i = *i3; 1060174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 10610b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10620b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1063174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint4 *i4) { 1064174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint4 i = *i4; 1065174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 10660b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10670b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1068174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T> 1069174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline long long LL(const T &x) { 1070174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return static_cast<long long>(x); 10710b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10720b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1073174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T> 1074174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline unsigned long long LLu(const T &x) { 1075174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return static_cast<unsigned long long>(x); 10760b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10770b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1078174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long l) { 1079174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %lld 0x%llx", s, LL(l), LL(l)); 10800b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10810b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1082174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long long ll) { 1083174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %lld 0x%llx", s, LL(ll), LL(ll)); 10840b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10850b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1086b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long2 *c) { 1087174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long2 ll = *c; 1088174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 10890b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10900b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1091b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long3 *c) { 1092174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long3 ll = *c; 1093174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 10940b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10950b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1096b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long4 *c) { 1097174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long4 ll = *c; 1098174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 10990b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11000b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1101174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long l) { 1102174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen unsigned long long ll = l; 1103174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %llu 0x%llx", s, ll, ll); 11040b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11050b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1106174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long long ll) { 1107174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %llu 0x%llx", s, ll, ll); 11080b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11090b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1110b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong2 *c) { 1111174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong2 ll = *c; 1112174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 11130b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11140b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1115b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong3 *c) { 1116174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong3 ll = *c; 1117174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 11180b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11190b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1120b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong4 *c) { 1121174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong4 ll = *c; 1122174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 11230b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11240b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1125a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// FIXME: We need to export these function signatures for the compatibility 1126a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// library. The C++ name mangling that LLVM uses for ext_vector_type requires 1127a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// different versions for "long" vs. "long long". Note that the called 1128a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// functions are still using the appropriate 64-bit sizes. 1129127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1130127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#ifndef __LP64__ 1131a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l2 __attribute__((ext_vector_type(2))); 1132a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l3 __attribute__((ext_vector_type(3))); 1133a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l4 __attribute__((ext_vector_type(4))); 1134a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul2 __attribute__((ext_vector_type(2))); 1135a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul3 __attribute__((ext_vector_type(3))); 1136a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul4 __attribute__((ext_vector_type(4))); 1137a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1138a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l2 *c) { 1139174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long2 ll = *(const long2 *)c; 1140174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 1141a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1142a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1143a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l3 *c) { 1144174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long3 ll = *(const long3 *)c; 1145174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1146a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1147a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1148a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l4 *c) { 1149174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long4 ll = *(const long4 *)c; 1150174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1151a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1152a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1153a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul2 *c) { 1154174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong2 ll = *(const ulong2 *)c; 1155174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 1156a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1157a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1158a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul3 *c) { 1159174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong3 ll = *(const ulong3 *)c; 1160174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1161a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1162a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1163a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul4 *c) { 1164174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong4 ll = *(const ulong4 *)c; 1165174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1166a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1167127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#endif 1168a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1169174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long2 ll) { 1170174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 11719f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 11729f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1173174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long3 ll) { 1174174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 11759f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 11769f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1177174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long4 ll) { 1178174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 11799f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 11809f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1181174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong2 ll) { 1182174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 11839f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 11849f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1185174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong3 ll) { 1186174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 11879f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 11889f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1189174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong4 ll) { 1190174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 11919f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 11929f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 11930b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, const void *p) { 1194174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %p", s, p); 11950b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 119687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 1197709a0978ae141198018ca9769f8d96292a8928e6Jason Samsextern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name) { 1198174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// TODO: remove 119944bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 120087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 1201