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