rsdRuntimeStubs.cpp revision 6b387c1e466b507007f0b388da8b037362154e9a
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" 186b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#include "rsElement.h" 1987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsScriptC.h" 2087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix4x4.h" 2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix3x3.h" 2287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix2x2.h" 2387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsRuntime.h" 246b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#include "rsType.h" 2587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 2687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsdCore.h" 27807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams#include "rsdBcc.h" 2887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 29b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams#include "rsdAllocation.h" 30414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#include "rsdShaderCache.h" 31414a46166126da6864258bd25ff183f9a3c6261dStephen Hines#include "rsdVertexArray.h" 3287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 3387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <time.h> 3487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 3587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android; 3687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android::renderscript; 3787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 38a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float2 __attribute__((ext_vector_type(2))); 39a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float3 __attribute__((ext_vector_type(3))); 40a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float4 __attribute__((ext_vector_type(4))); 415261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double2 __attribute__((ext_vector_type(2))); 425261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double3 __attribute__((ext_vector_type(3))); 435261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double4 __attribute__((ext_vector_type(4))); 44a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char2 __attribute__((ext_vector_type(2))); 45a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char3 __attribute__((ext_vector_type(3))); 46a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char4 __attribute__((ext_vector_type(4))); 47a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar2 __attribute__((ext_vector_type(2))); 48a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar3 __attribute__((ext_vector_type(3))); 49a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar4 __attribute__((ext_vector_type(4))); 50d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short2 __attribute__((ext_vector_type(2))); 51d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short3 __attribute__((ext_vector_type(3))); 52d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short4 __attribute__((ext_vector_type(4))); 53d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort2 __attribute__((ext_vector_type(2))); 54d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort3 __attribute__((ext_vector_type(3))); 55d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort4 __attribute__((ext_vector_type(4))); 56a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int2 __attribute__((ext_vector_type(2))); 57a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int3 __attribute__((ext_vector_type(3))); 58a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int4 __attribute__((ext_vector_type(4))); 59a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint2 __attribute__((ext_vector_type(2))); 60a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint3 __attribute__((ext_vector_type(3))); 61a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint4 __attribute__((ext_vector_type(4))); 62d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long2 __attribute__((ext_vector_type(2))); 63d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long3 __attribute__((ext_vector_type(3))); 64d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long4 __attribute__((ext_vector_type(4))); 65d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong2 __attribute__((ext_vector_type(2))); 66d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong3 __attribute__((ext_vector_type(3))); 67d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong4 __attribute__((ext_vector_type(4))); 6887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 695261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint8_t uchar; 705261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint16_t ushort; 715261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint32_t uint; 720b575de8ed0b628d84d256f5846500b0385979bdTim Murray#ifndef RS_SERVER 735261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint64_t ulong; 740b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif 7587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 76127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#ifndef __LP64__ 77d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#define OPAQUETYPE(t) \ 78d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray typedef struct { const int* const p; } __attribute__((packed, aligned(4))) t; 79127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#else 80127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#define OPAQUETYPE(t) \ 81127d51c1193f4055795da967d47a13bedd3cb951Miao Wang typedef struct { const void* p; const void* r; const void* v1; const void* v2; } t; 82127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#endif 83d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 84d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_element) 85d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_type) 86d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_allocation) 87d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_sampler) 88d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_script) 89d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_script_call) 902544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga Nainar 912544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_fragment); 922544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_store); 932544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_vertex); 942544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_raster); 952544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_mesh); 962544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_font); 972544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga Nainar 98d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#undef OPAQUETYPE 99d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 1007a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hinestypedef enum { 1017a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines // Empty to avoid conflicting definitions with RsAllocationCubemapFace 1027a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines} rs_allocation_cubemap_face; 1037a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines 1046b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainartypedef enum { 1056b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // Empty to avoid conflicting definitions with RsYuvFormat 1066b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} rs_yuv_format; 1076b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 1086b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainartypedef enum { 1096b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // Empty to avoid conflicting definitions with RsAllocationMipmapControl 1106b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} rs_allocation_mipmap_control; 1116b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 112174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef struct { unsigned int val; } rs_allocation_usage_type; 113174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 114d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murraytypedef struct { 115d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_sec; ///< seconds 116d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_min; ///< minutes 117d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_hour; ///< hours 118d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_mday; ///< day of the month 119d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_mon; ///< month 120d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_year; ///< year 121d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_wday; ///< day of the week 122d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_yday; ///< day of the year 123d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_isdst; ///< daylight savings time 124d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray} rs_tm; 125d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 1267153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// Some RS functions are not threadsafe but can be called from an invoke 1277153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// function. Instead of summarily marking scripts that call these functions as 1287153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// not-threadable we detect calls to them in the driver and sends a fatal error 1297153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// message. 1307153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainarstatic bool failIfInKernel(Context *rsc, const char *funcName) { 1317153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar RsdHal *dc = (RsdHal *)rsc->mHal.drv; 1327153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar RsdCpuReference *impl = (RsdCpuReference *) dc->mCpuRef; 1337153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 1347153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (impl->getInForEach()) { 1357153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar char buf[256]; 1367153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar sprintf(buf, "Error: Call to unsupported function %s " 1377153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar "in kernel", funcName); 1387153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar rsc->setError(RS_ERROR_FATAL_DRIVER, buf); 1397153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return true; 1407153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar } 1417153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return false; 1427153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar} 1437153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 14487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 145174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Allocation routines 14687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 14766d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic#if defined(__i386__) || (defined(__mips__) && __mips==32) 14866d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic// i386 and MIPS32 have different struct return passing to ARM; emulate with a pointer 149174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst Allocation * rsGetAllocation(const void *ptr) { 150709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 151174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Script *sc = RsdCpuReference::getTlsScript(); 152174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Allocation* alloc = rsdScriptGetAllocationForPointer(rsc, sc, ptr); 153174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen android::renderscript::rs_allocation obj = {0}; 154174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen alloc->callUpdateCacheObject(rsc, &obj); 155174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return (Allocation *)obj.p; 15674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} 157174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 158174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst android::renderscript::rs_allocation rsGetAllocation(const void *ptr) { 159709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 160174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Script *sc = RsdCpuReference::getTlsScript(); 161174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Allocation* alloc = rsdScriptGetAllocationForPointer(rsc, sc, ptr); 1627153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 16366d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic#ifndef __LP64__ // ARMv7 164174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen android::renderscript::rs_allocation obj = {0}; 165174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else // AArch64/x86_64/MIPS64 166174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen android::renderscript::rs_allocation obj = {0, 0, 0, 0}; 167174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 168174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen alloc->callUpdateCacheObject(rsc, &obj); 169174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return obj; 17074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} 171174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 17274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 173174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationIoSend(::rs_allocation a) { 1741aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 1757153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationIoSend")) 1767153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 177174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationIoSend(rsc, (Allocation *)a.p); 1781aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 1791aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 180174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationIoReceive(::rs_allocation a) { 1811aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 1827153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationIoReceive")) 1837153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 184174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationIoReceive(rsc, (Allocation *)a.p); 1851aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 1861aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 187174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationCopy1DRange( 188174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation dstAlloc, 189174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t dstOff, uint32_t dstMip, uint32_t count, 190174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation srcAlloc, 191174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t srcOff, uint32_t srcMip) { 1921aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 1937153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationCopy1DRange")) 1947153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 195174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationCopy1DRange(rsc, (Allocation *)dstAlloc.p, dstOff, dstMip, 196174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen count, (Allocation *)srcAlloc.p, srcOff, srcMip); 1971aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 1981aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 199174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationCopy2DRange( 200174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation dstAlloc, 201174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t dstXoff, uint32_t dstYoff, 202174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t dstMip, rs_allocation_cubemap_face dstFace, 203174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t width, uint32_t height, 204174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation srcAlloc, 205174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t srcXoff, uint32_t srcYoff, 206174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t srcMip, rs_allocation_cubemap_face srcFace) { 2071aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 2087153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationCopy2DRange")) 2097153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 210174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationCopy2DRange(rsc, (Allocation *)dstAlloc.p, 2111aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray dstXoff, dstYoff, dstMip, dstFace, 212174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen width, height, (Allocation *)srcAlloc.p, 2131aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray srcXoff, srcYoff, srcMip, srcFace); 2141aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 2151aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 2166b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarstatic android::renderscript::rs_element CreateElement(RsDataType dt, 2176b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RsDataKind dk, 2186b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool isNormalized, 2196b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t vecSize) { 2206b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 2216b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2226b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // No need for validation here. The rsCreateElement overload below is not 2236b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // exposed to the Script. The Element-creation APIs call this function in a 2246b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // consistent manner and rsComponent.cpp asserts on any inconsistency. 2256b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Element *element = (Element *) rsrElementCreate(rsc, dt, dk, isNormalized, 2266b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar vecSize); 2276b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_element obj = {}; 2286b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (element == nullptr) 2296b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2306b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar element->callUpdateCacheObject(rsc, &obj); 2316b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2326b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 2336b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2346b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarstatic android::renderscript::rs_type CreateType(RsElement element, 2356b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimX, uint32_t dimY, 2366b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimZ, bool mipmaps, 2376b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool faces, 2386b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t yuv_format) { 2396b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2406b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 2416b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_type obj = {}; 2426b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2436b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (element == nullptr) { 2446b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Invalid element"); 2456b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2466b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2476b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2486b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // validate yuv_format 2496b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RsYuvFormat yuv = (RsYuvFormat) yuv_format; 2506b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (yuv != RS_YUV_NONE && 2516b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv != RS_YUV_YV12 && 2526b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv != RS_YUV_NV21 && 2536b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv != RS_YUV_420_888) { 2546b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2556b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Invalid yuv_format %d\n", yuv_format); 2566b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2576b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2586b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2596b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // validate consistency of shape parameters 2606b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimZ > 0) { 2616b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimX < 1 || dimY < 1) { 2626b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Both X and Y dimension required " 2636b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar "when Z is present."); 2646b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2656b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2666b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (mipmaps) { 2676b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: mipmap control requires 2D types"); 2686b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2696b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2706b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (faces) { 2716b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Cube maps require 2D types"); 2726b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2736b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2746b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2756b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimY > 0 && dimX < 1) { 2766b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: X dimension required when Y is " 2776b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar "present."); 2786b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2796b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2806b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (mipmaps && dimY < 1) { 2816b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: mipmap control require 2D Types."); 2826b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2836b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2846b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (faces && dimY < 1) { 2856b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Cube maps require 2D Types."); 2866b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2876b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2886b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (yuv_format != RS_YUV_NONE) { 2896b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimZ != 0 || dimY == 0 || faces || mipmaps) { 2906b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: YUV only supports basic 2D."); 2916b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2926b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2936b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2946b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2956b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Type *type = (Type *) rsrTypeCreate(rsc, element, dimX, dimY, dimZ, mipmaps, 2966b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar faces, yuv_format); 2976b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (type == nullptr) 2986b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2996b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar type->callUpdateCacheObject(rsc, &obj); 3006b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3016b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3026b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3036b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarstatic android::renderscript::rs_allocation CreateAllocation( 3046b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RsType type, RsAllocationMipmapControl mipmaps, uint32_t usages, 3056b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar void *ptr) { 3066b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3076b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 3086b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_allocation obj = {}; 3096b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3106b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (type == nullptr) { 3116b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_allocation creation error: Invalid type"); 3126b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3136b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 3146b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3156b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t validUsages = RS_ALLOCATION_USAGE_SCRIPT | \ 3166b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE; 3176b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (usages & ~validUsages) { 3186b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_allocation creation error: Invalid usage flag"); 3196b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3206b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 3216b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3226b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Allocation *alloc = (Allocation *) rsrAllocationCreateTyped(rsc, type, 3236b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar mipmaps, usages, 3246b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (uintptr_t) ptr); 3256b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (alloc == nullptr) 3266b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3276b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar alloc->callUpdateCacheObject(rsc, &obj); 3286b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3296b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3306b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3316b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3326b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// Define rsCreateElement, rsCreateType and rsCreateAllocation entry points 3336b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// differently for 32-bit x86 and Mips. The definitions for ARM32 and all 3346b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// 64-bit architectures is further below. 3356b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#if defined(__i386__) || (defined(__mips__) && __mips==32) 3366b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3376b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// The calling convention for the driver on 32-bit x86 and Mips returns 3386b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// rs_element etc. as a stack-return parameter. The Script uses ARM32 calling 3396b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// conventions that return the structs in a register. To match this convention, 3406b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// emulate the return value using a pointer. 3416b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga NainarElement *rsCreateElement(int32_t dt, int32_t dk, bool isNormalized, 3426b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t vecSize) { 3436b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3446b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_element obj = CreateElement((RsDataType) dt, 3456b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (RsDataKind) dk, 3466b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar isNormalized, 3476b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar vecSize); 3486b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return (Element *) obj.p; 3496b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3506b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3516b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga NainarType *rsCreateType(::rs_element element, uint32_t dimX, uint32_t dimY, 3526b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimZ, bool mipmaps, bool faces, 3536b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar rs_yuv_format yuv_format) { 3546b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_type obj = CreateType((RsElement) element.p, dimX, 3556b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar dimY, dimZ, mipmaps, faces, 3566b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (RsYuvFormat) yuv_format); 3576b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return (Type *) obj.p; 3586b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3596b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3606b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga NainarAllocation *rsCreateAllocation(::rs_type type, 3616b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar rs_allocation_mipmap_control mipmaps, 3626b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t usages, void *ptr) { 3636b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3646b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_allocation obj; 3656b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar obj = CreateAllocation((RsType) type.p, (RsAllocationMipmapControl) mipmaps, 3666b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar usages, ptr); 3676b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return (Allocation *) obj.p; 3686b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3696b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3706b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#else 3716b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarandroid::renderscript::rs_element rsCreateElement(int32_t dt, int32_t dk, 3726b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool isNormalized, 3736b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t vecSize) { 3746b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3756b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return CreateElement((RsDataType) dt, (RsDataKind) dk, isNormalized, 3766b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar vecSize); 3776b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3786b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3796b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarandroid::renderscript::rs_type rsCreateType(::rs_element element, uint32_t dimX, 3806b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimY, uint32_t dimZ, 3816b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool mipmaps, bool faces, 3826b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar rs_yuv_format yuv_format) { 3836b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return CreateType((RsElement) element.p, dimX, dimY, dimZ, mipmaps, faces, 3846b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv_format); 3856b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3866b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3876b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarandroid::renderscript::rs_allocation rsCreateAllocation( 3886b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ::rs_type type, rs_allocation_mipmap_control mipmaps, uint32_t usages, 3896b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar void *ptr) { 3906b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3916b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return CreateAllocation((RsType) type.p, 3926b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (RsAllocationMipmapControl) mipmaps, 3936b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar usages, ptr); 3946b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3956b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#endif 3966b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 397174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 398174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Object routines 399174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 400174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define IS_CLEAR_SET_OBJ(t) \ 401174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen bool rsIsObject(t src) { \ 402174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return src.p != nullptr; \ 403174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 404174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void __attribute__((overloadable)) rsClearObject(t *dst) { \ 405174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); \ 406174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearObject(rsc, reinterpret_cast<rs_object_base *>(dst)); \ 407174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 408174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void __attribute__((overloadable)) rsSetObject(t *dst, t src) { \ 409174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); \ 410174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrSetObject(rsc, reinterpret_cast<rs_object_base *>(dst), (ObjectBase*)src.p); \ 411174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 4127153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 413174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_element) 414174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_type) 415174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_allocation) 416174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_sampler) 417174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_script) 418b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams 419174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_mesh) 420174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_fragment) 421174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_vertex) 422174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_raster) 423174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_store) 424174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_font) 4251aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 426174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef IS_CLEAR_SET_OBJ 42774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 42887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 429174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Element routines 43087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 431174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void * ElementAt(Allocation *a, RsDataType dt, uint32_t vecSize, 432174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t x, uint32_t y, uint32_t z) { 433709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 434174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Type *t = a->getType(); 435174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Element *e = t->getElement(); 436a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 437174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char buf[256]; 438174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (x && (x >= t->getLODDimX(0))) { 439174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen sprintf(buf, "Out range ElementAt X %i of %i", x, t->getLODDimX(0)); 440174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 441174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 442174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 443a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 444174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (y && (y >= t->getLODDimY(0))) { 445174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen sprintf(buf, "Out range ElementAt Y %i of %i", y, t->getLODDimY(0)); 446174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 447174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 448174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 44987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 450174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (z && (z >= t->getLODDimZ(0))) { 451174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen sprintf(buf, "Out range ElementAt Z %i of %i", z, t->getLODDimZ(0)); 452174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 453174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 454174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 45587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 456174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (vecSize > 0) { 457174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (vecSize != e->getVectorSize()) { 458174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen sprintf(buf, "Vector size mismatch for ElementAt %i of %i", vecSize, e->getVectorSize()); 459174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 460174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 461174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 46287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 463174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (dt != e->getType()) { 464174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen sprintf(buf, "Data type mismatch for ElementAt %i of %i", dt, e->getType()); 465174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 466174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 467174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 468174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 46987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 470174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr; 471174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const uint32_t eSize = e->getSizeBytes(); 472174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const uint32_t stride = a->mHal.drvState.lod[0].stride; 473174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const uint32_t dimY = a->mHal.drvState.lod[0].dimY; 474174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return &p[(x * eSize) + (y * stride) + (z * stride * dimY)]; 47587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 47687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 477174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y, uint32_t z) { 478174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Type *t = const_cast<Allocation*>((Allocation*)a.p)->getType(); 479174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Element *e = t->getElement(); 480174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void *tmp = ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 481174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (tmp != nullptr) 482174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen memcpy(tmp, ptr, e->getSizeBytes()); 48387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 48487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 485174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y) { 486174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt(a, ptr, x, y, 0); 48787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 48887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 489174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x) { 490174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt(a, ptr, x, 0, 0); 49187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 49287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 493174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { 494174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 49587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 49687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 497174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y) { 498174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsGetElementAt(a, x, y ,0); 49987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 50087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 501174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x) { 502174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsGetElementAt(a, x, 0, 0); 50387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 50487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 505174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define ELEMENT_AT(T, DT, VS) \ 506174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, uint32_t y, uint32_t z) { \ 507174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \ 508174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (r != nullptr) ((T *)r)[0] = *val; \ 509174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 510174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 511174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, uint32_t y) { \ 512174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, val, x, y, 0); \ 513174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 514174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x) { \ 515174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, val, x, 0, 0); \ 516174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 517174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y, uint32_t z) { \ 518174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \ 519174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (r != nullptr) *val = ((T *)r)[0]; \ 520174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 521174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 522174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y) { \ 523174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, val, x, y, 0); \ 524174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 525174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x) { \ 526174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, val, x, 0, 0); \ 527174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 52887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 529174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char, RS_TYPE_SIGNED_8, 1) 530174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char2, RS_TYPE_SIGNED_8, 2) 531174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char3, RS_TYPE_SIGNED_8, 3) 532174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char4, RS_TYPE_SIGNED_8, 4) 533174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar, RS_TYPE_UNSIGNED_8, 1) 534174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar2, RS_TYPE_UNSIGNED_8, 2) 535174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar3, RS_TYPE_UNSIGNED_8, 3) 536174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar4, RS_TYPE_UNSIGNED_8, 4) 537174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short, RS_TYPE_SIGNED_16, 1) 538174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short2, RS_TYPE_SIGNED_16, 2) 539174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short3, RS_TYPE_SIGNED_16, 3) 540174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short4, RS_TYPE_SIGNED_16, 4) 541174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort, RS_TYPE_UNSIGNED_16, 1) 542174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort2, RS_TYPE_UNSIGNED_16, 2) 543174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort3, RS_TYPE_UNSIGNED_16, 3) 544174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort4, RS_TYPE_UNSIGNED_16, 4) 545174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int, RS_TYPE_SIGNED_32, 1) 546174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int2, RS_TYPE_SIGNED_32, 2) 547174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int3, RS_TYPE_SIGNED_32, 3) 548174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int4, RS_TYPE_SIGNED_32, 4) 549174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint, RS_TYPE_UNSIGNED_32, 1) 550174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint2, RS_TYPE_UNSIGNED_32, 2) 551174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint3, RS_TYPE_UNSIGNED_32, 3) 552174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint4, RS_TYPE_UNSIGNED_32, 4) 553174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long, RS_TYPE_SIGNED_64, 1) 554174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long2, RS_TYPE_SIGNED_64, 2) 555174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long3, RS_TYPE_SIGNED_64, 3) 556174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long4, RS_TYPE_SIGNED_64, 4) 557174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong, RS_TYPE_UNSIGNED_64, 1) 558174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong2, RS_TYPE_UNSIGNED_64, 2) 559174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong3, RS_TYPE_UNSIGNED_64, 3) 560174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong4, RS_TYPE_UNSIGNED_64, 4) 561174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float, RS_TYPE_FLOAT_32, 1) 562174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float2, RS_TYPE_FLOAT_32, 2) 563174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float3, RS_TYPE_FLOAT_32, 3) 564174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float4, RS_TYPE_FLOAT_32, 4) 565174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double, RS_TYPE_FLOAT_64, 1) 566174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double2, RS_TYPE_FLOAT_64, 2) 567174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double3, RS_TYPE_FLOAT_64, 3) 568174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double4, RS_TYPE_FLOAT_64, 4) 56987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 570174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef ELEMENT_AT 57187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 572174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 573174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen/* 574174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * We miss some symbols for rs{Get,Set}Element_long,ulong variants because 64 575174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * bit integer values are 'long' in RS-land but might be 'long long' in the 576174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * driver. Define native_long* and native_ulong* types to be vectors of 577174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * 'long' as seen by the driver and define overloaded versions of 578174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * rsSetElementAt_* and rsGetElementAt_*. This should get us the correct 579174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * mangled names in the driver. 580174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen */ 58187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 582174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long2 __attribute__((ext_vector_type(2))); 583174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long3 __attribute__((ext_vector_type(3))); 584174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long4 __attribute__((ext_vector_type(4))); 585174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong2 __attribute__((ext_vector_type(2))); 586174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong3 __attribute__((ext_vector_type(3))); 587174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong4 __attribute__((ext_vector_type(4))); 58887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 589174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define ELEMENT_AT_OVERLOADS(T, U) \ 590174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, uint32_t y, uint32_t z) { \ 591174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, (T *) val, x, y, z); \ 592174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 593174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, uint32_t y) { \ 594174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, (T *) val, x, y, 0); \ 595174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 596174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x) { \ 597174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, (T *) val, x, 0, 0); \ 598174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 599174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y, uint32_t z) { \ 600174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, (T *) val, x, y, z); \ 601174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 602174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y) { \ 603174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, (T *) val, x, y, 0); \ 604174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 605174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x) { \ 606174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, (T *) val, x, 0, 0); \ 607174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 60887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 609174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long2, native_long2) 610174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long3, native_long3) 611174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long4, native_long4) 612174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong, unsigned long) 613174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong2, native_ulong2) 614174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong3, native_ulong3) 615174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong4, native_ulong4) 616414a46166126da6864258bd25ff183f9a3c6261dStephen Hines 617174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// We also need variants of rs{Get,Set}ElementAt_long that take 'long long *' as 618174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// we might have this overloaded variant in old APKs. 619174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long, long long) 62087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 621174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef ELEMENT_AT_OVERLOADS 622174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 62387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 624174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 625174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// ForEach routines 626174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 627dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Nivoid rsForEachInternal(int slot, 628dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rs_script_call *call, 629dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni int hasOutput, 630dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni int numIn, 631dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni ...) { 63212398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni Context *rsc = RsdCpuReference::getTlsContext(); 63312398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni Script *s = const_cast<Script*>(RsdCpuReference::getTlsScript()); 634b0dabd1c86ddc67507bae00093002b54e86383f0Yang Ni if (numIn > 100) { 635b0dabd1c86ddc67507bae00093002b54e86383f0Yang Ni ALOGE("rsForEachInternal: too many inputs to a kernel."); 636dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni return; 637dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 638b0dabd1c86ddc67507bae00093002b54e86383f0Yang Ni Allocation* inputs[100]; 639dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni Allocation* out = nullptr; 640dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni va_list argp; 641dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni va_start(argp, numIn); 642dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni for (int i = 0; i < numIn; i++) { 643dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni ::rs_allocation alloc = va_arg(argp, ::rs_allocation); 644b0dabd1c86ddc67507bae00093002b54e86383f0Yang Ni inputs[i] = (Allocation*)alloc.p; 645dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 646dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni if (hasOutput) { 647dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni ::rs_allocation outAlloc = va_arg(argp, ::rs_allocation); 648b0dabd1c86ddc67507bae00093002b54e86383f0Yang Ni out = (Allocation*)outAlloc.p; 649dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 650dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni va_end(argp); 651b0dabd1c86ddc67507bae00093002b54e86383f0Yang Ni rsrForEach(rsc, s, slot, numIn, numIn > 0 ? inputs : nullptr, out, nullptr, 0, (RsScriptCall*)call); 65212398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni} 65312398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni 654174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 655174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 656174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 657174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 658174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const rs_script_call *call) { 659709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 660dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 6619479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar (Allocation *)out.p, usr, 0, (RsScriptCall *)call); 66287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 66387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 664174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 665174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 666174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 667174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr) { 668709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 669dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 6709479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, 0, nullptr); 67187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 67287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 673174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 674174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 675174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out) { 676709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 677dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 6789479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar nullptr, 0, nullptr); 67987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 68087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 681174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// These functions are only supported in 32-bit. 682174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 683174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 684174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 685174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 686174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 687174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t usrLen) { 688709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 689dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 6909479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, usrLen, nullptr); 69187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 69287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 693174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 694174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 695174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 696174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 697174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t usrLen, 698174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const rs_script_call *call) { 699709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 700dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 7019479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, usrLen, (RsScriptCall *)call); 70287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 703174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 70487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 70587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 706174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Message routines 70787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 708174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID) { 709709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 710174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClient(rsc, cmdID, (const void *)nullptr, 0); 71187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 71287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 713174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID, const void *data, uint32_t len) { 714709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 715174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClient(rsc, cmdID, data, len); 71687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 71787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 718174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID) { 719709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 720174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClientBlocking(rsc, cmdID, (const void *)nullptr, 0); 72187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 72287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 723174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID, const void *data, uint32_t len) { 724709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 725174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClientBlocking(rsc, cmdID, data, len); 72687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 72787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 728174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 729174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Time routines 730174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 73187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 732174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// time_t is int in 32-bit RenderScript. time_t is long in bionic. rsTime and 733174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// rsLocaltime are set to explicitly take 'const int *' so we generate the 734174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// correct mangled names. 735174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 736174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint rsTime(int *timer) { 737174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 738174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentime_t rsTime(time_t * timer) { 739174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 740709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 741174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrTime(rsc, (time_t *)timer); 74287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 74387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 744174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 745174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const int *timer) { 746174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 747174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const time_t *timer) { 748174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 749709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 750174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return (rs_tm*)rsrLocalTime(rsc, (tm*)local, (time_t *)timer); 75187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 75287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 753174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeMillis() { 754709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 755174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrUptimeMillis(rsc); 75687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 75787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 758174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeNanos() { 759709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 760174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrUptimeNanos(rsc); 76187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 76287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 763174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenfloat rsGetDt() { 764709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 765174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Script *sc = RsdCpuReference::getTlsScript(); 766174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetDt(rsc, sc); 76787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 76887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 76987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 770174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Graphics routines 77187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 772174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef RS_COMPATIBILITY_LIB 773174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 774174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, float u2, float v2, 775174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, float u3, float v3, 776174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4, float u4, float v4) { 7771aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 778dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 779174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (!rsc->setupCheck()) { 780174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return; 781174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 78287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 783174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdHal *dc = (RsdHal *)rsc->mHal.drv; 784174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (!dc->gl.shaderCache->setup(rsc)) { 785174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return; 786174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 787444bd208b4f129bd8e4c0cce4cf6d709c8900891Yong Chen 788174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("Quad"); 789174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1); 790174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2); 791174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3); 792174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4); 793127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 794174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4}; 795174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4}; 796127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 797174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdVertexArray::Attrib attribs[2]; 798174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen attribs[0].set(GL_FLOAT, 3, 12, false, (size_t)vtx, "ATTRIB_position"); 799174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen attribs[1].set(GL_FLOAT, 2, 8, false, (size_t)tex, "ATTRIB_texture0"); 800240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray 801174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdVertexArray va(attribs, 2); 802174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen va.setup(rsc); 803240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray 804174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RSD_CALL_GL(glDrawArrays, GL_TRIANGLE_FAN, 0, 4); 805240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray} 806174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 807174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuad(float x1, float y1, float z1, 808174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, 809174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, 810174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4) { 811174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuadTexCoords(x1, y1, z1, 0, 1, 812174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, 1, 1, 813174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, 1, 0, 814174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4, 0, 0); 81547211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray} 816174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 817174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) { 81847211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray Context *rsc = RsdCpuReference::getTlsContext(); 81987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 820174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ObjectBaseRef<const ProgramVertex> tmp(rsc->getProgramVertex()); 821174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setProgramVertex(rsc->getDefaultProgramVertex()); 822174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //rsc->setupCheck(); 823174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 824174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //GLint crop[4] = {0, h, w, -h}; 825dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 826174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float sh = rsc->getHeight(); 827c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams 828174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x, sh - y, z, 829174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x+w, sh - y, z, 830174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x+w, sh - (y+h), z, 831174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x, sh - (y+h), z); 832174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setProgramVertex((ProgramVertex *)tmp.get()); 83387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 83487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 835174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsAllocationMarkDirty(::rs_allocation a) { 836447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 837174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT); 838447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 83987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 840174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a) { 841447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 842174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT); 843447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 844dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 845174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a, 846174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen unsigned int usage) { 847447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 848174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)usage); 849447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 85087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 85187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 852174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a, 853174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rs_allocation_usage_type source) { 854709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 855174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)source.val); 85687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 857174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 858174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramFragment(::rs_program_fragment pf) { 859174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 860174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramFragment(rsc, (ProgramFragment *)pf.p); 8610b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 862174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 863174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramStore(::rs_program_store ps) { 864174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 865174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramStore(rsc, (ProgramStore *)ps.p); 8660b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 867174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 868174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramVertex(::rs_program_vertex pv) { 869174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 870174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramVertex(rsc, (ProgramVertex *)pv.p); 8710b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 872174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 873174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramRaster(::rs_program_raster pr) { 874174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 875174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramRaster(rsc, (ProgramRaster *)pr.p); 8760b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 877174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 878174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindSampler(::rs_program_fragment pf, 879174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_sampler s) { 880174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 881174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindSampler(rsc, (ProgramFragment *)pf.p, slot, (Sampler *)s.p); 8820b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 883174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 884174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindTexture(::rs_program_fragment pf, 885174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 886174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 887174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindTexture(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p); 8880b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 889174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 890174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_fragment pf, 891174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 892174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 893174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindConstant(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p); 8940b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 895174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 896174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_vertex pv, 897174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 898174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 899174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindConstant(rsc, (ProgramVertex *)pv.p, slot, (Allocation *)a.p); 9000b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 901174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 902174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *m) { 903174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 904174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadProjectionMatrix(rsc, (const rsc_Matrix *)m); 9050b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 906174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 907174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *m) { 908174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 909174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadModelMatrix(rsc, (const rsc_Matrix *)m); 9100b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 911174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 912174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *m) { 913174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 914174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadTextureMatrix(rsc, (const rsc_Matrix *)m); 9150b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 916174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 917174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *m) { 918174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 919174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpGetProjectionMatrix(rsc, (rsc_Matrix *)m); 9200b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 921174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 922174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramFragmentConstantColor(::rs_program_fragment pf, 923174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float r, float g, float b, float a) { 924174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 925174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPfConstantColor(rsc, (ProgramFragment *)pf.p, r, g, b, a); 9260b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 927174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 928174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetWidth(void) { 929174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 930174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetWidth(rsc); 9310b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 932174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 933174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetHeight(void) { 934174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 935174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetHeight(rsc); 9360b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 937174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 938174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawRect(float x1, float y1, float x2, float y2, float z) { 939174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x1, y2, z, 940174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z, 941174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y1, z, 942174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x1, y1, z); 9430b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 944174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 945174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuad(float x1, float y1, float z1, 946174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, 947174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, 948174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4) { 949174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x1, y1, z1, 950174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, 951174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, 952174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4); 9530b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 954174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 955174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 956174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, float u2, float v2, 957174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, float u3, float v3, 958174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4, float u4, float v4) { 959174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuadTexCoords(x1, y1, z1, u1, v1, 960174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, u2, v2, 961174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, u3, v3, 962174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4, u4, v4); 9630b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 964174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 965174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h) { 966174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawSpriteScreenspace(x, y, z, w, h); 9670b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 968174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 969174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism) { 970174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 971174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMesh(rsc, (Mesh *)ism.p); 9720b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 973174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 974174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex) { 975174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 976174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMeshPrimitive(rsc, (Mesh *)ism.p, primitiveIndex); 9770b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 978174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 979174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex, uint start, uint len) { 980174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 981174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMeshPrimitiveRange(rsc, (Mesh *)ism.p, primitiveIndex, start, len); 9820b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 983174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 984174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeshComputeBoundingBox(::rs_mesh mesh, 985174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *minX, float *minY, float *minZ, 986174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *maxX, float *maxY, float *maxZ) { 987174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 988174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeshComputeBoundingBox(rsc, (Mesh *)mesh.p, minX, minY, minZ, maxX, maxY, maxZ); 9890b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 990174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 991174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColor(float r, float g, float b, float a) { 992174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 993174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPrepareClear(rsc); 994174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLClearColor(rsc, r, g, b, a); 9950b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 996174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 997174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepth(float value) { 998174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 999174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPrepareClear(rsc); 1000174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLClearDepth(rsc, value); 10010b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1002174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1003174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(const char *text, int x, int y) { 1004174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1005174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawText(rsc, text, x, y); 10060b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1007127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1008174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(::rs_allocation a, int x, int y) { 1009174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1010174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawTextAlloc(rsc, (Allocation *)a.p, x, y); 1011127d51c1193f4055795da967d47a13bedd3cb951Miao Wang} 1012127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1013174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(const char *text, int *left, int *right, 1014174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int *top, int *bottom) { 1015174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1016174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeasureText(rsc, text, left, right, top, bottom); 1017127d51c1193f4055795da967d47a13bedd3cb951Miao Wang} 1018127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1019174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(::rs_allocation a, int *left, int *right, 1020174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int *top, int *bottom) { 1021174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1022174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeasureTextAlloc(rsc, (Allocation *)a.p, left, right, top, bottom); 1023dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar} 1024dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 1025174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindFont(::rs_font font) { 1026174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1027174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFont(rsc, (Font *)font.p); 10280b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1029174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1030174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFontColor(float r, float g, float b, float a) { 1031174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1032174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrFontColor(rsc, r, g, b, a); 10330b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1034174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1035174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindColorTarget(::rs_allocation a, uint slot) { 1036174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1037174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFrameBufferObjectColorTarget(rsc, (Allocation *)a.p, slot); 10380b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1039174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1040174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindDepthTarget(::rs_allocation a) { 1041174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1042174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFrameBufferObjectDepthTarget(rsc, (Allocation *)a.p); 10430b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1044174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1045174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColorTarget(uint slot) { 1046174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1047174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectColorTarget(rsc, slot); 10480b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1049174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1050174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepthTarget(void) { 1051174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1052174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectDepthTarget(rsc); 10530b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1054174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1055174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearAllRenderTargets(void) { 1056174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1057174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectTargets(rsc); 10580b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1059127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1060174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid color(float r, float g, float b, float a) { 1061174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1062174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrColor(rsc, r, g, b, a); 10630b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10640b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1065174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFinish(void) { 1066174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1067174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLFinish(rsc); 1068174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1069174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 10700b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1071174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 1072174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Debug routines 1073174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 10740b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f) { 1075174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f))); 10760b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10770b575de8ed0b628d84d256f5846500b0385979bdTim Murray 10780b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2) { 1079174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, f1, f2); 10800b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10810b575de8ed0b628d84d256f5846500b0385979bdTim Murray 10820b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3) { 1083174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, f1, f2, f3); 10840b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10850b575de8ed0b628d84d256f5846500b0385979bdTim Murray 10860b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3, float f4) { 1087174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4); 10880b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10890b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1090174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float2 *f2) { 1091174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float2 f = *f2; 1092174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, f.x, f.y); 10930b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10940b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1095174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float3 *f3) { 1096174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float3 f = *f3; 1097174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z); 10980b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10990b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1100174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float4 *f4) { 1101174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float4 f = *f4; 1102174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w); 11030b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11040b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11050b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, double d) { 1106174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d))); 11070b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11080b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1109174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double2 *d2) { 1110174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double2 d = *d2; 1111174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, d.x, d.y); 11126ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 11136ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 1114174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double3 *d3) { 1115174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double3 d = *d3; 1116174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, d.x, d.y, d.z); 11176ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 11186ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 1119174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double4 *d4) { 1120174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double4 d = *d4; 1121174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, d.x, d.y, d.z, d.w); 11226ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 11236ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 1124b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix4x4 *m) { 1125174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 1126174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]); 1127174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]); 1128174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]); 1129174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]); 11300b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11310b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1132b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix3x3 *m) { 1133174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 1134174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]); 1135174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f", s, f[1], f[4], f[7]); 1136174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f}",s, f[2], f[5], f[8]); 11370b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11380b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1139b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix2x2 *m) { 1140174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 1141174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f", s, f[0], f[2]); 1142174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f}",s, f[1], f[3]); 11430b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11440b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11450b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, char c) { 1146174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hhd 0x%hhx", s, c, (unsigned char)c); 11470b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11480b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1149174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char2 *c2) { 1150174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char2 c = *c2; 1151174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hhd, %hhd} 0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y); 11520b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11530b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1154174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char3 *c3) { 1155174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char3 c = *c3; 1156174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11570b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11580b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1159174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char4 *c4) { 1160174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char4 c = *c4; 1161174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11620b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11630b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11640b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned char c) { 1165174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hhu 0x%hhx", s, c, c); 11660b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11670b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1168174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar2 *c2) { 1169174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar2 c = *c2; 1170174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hhu, %hhu} 0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y); 11710b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11720b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1173174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar3 *c3) { 1174174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar3 c = *c3; 1175174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11760b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11770b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1178174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar4 *c4) { 1179174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar4 c = *c4; 1180174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11810b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11820b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11830b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, short c) { 1184174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hd 0x%hx", s, c, c); 11850b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11860b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1187174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short2 *c2) { 1188174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short2 c = *c2; 1189174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hd, %hd} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 11900b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11910b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1192174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short3 *c3) { 1193174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short3 c = *c3; 1194174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11950b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11960b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1197174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short4 *c4) { 1198174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short4 c = *c4; 1199174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12000b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12010b575de8ed0b628d84d256f5846500b0385979bdTim Murray 12020b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned short c) { 1203174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hu 0x%hx", s, c, c); 1204174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1205174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1206174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort2 *c2) { 1207174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort2 c = *c2; 1208174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hu, %hu} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 12090b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12100b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1211174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort3 *c3) { 1212174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort3 c = *c3; 1213174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 1214174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1215174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1216174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort4 *c4) { 1217174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort4 c = *c4; 1218174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12190b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12200b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1221174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, int i) { 1222174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %d 0x%x", s, i, i); 12230b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12240b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1225174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int2 *i2) { 1226174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int2 i = *i2; 1227174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%d, %d} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 12280b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12290b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1230174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int3 *i3) { 1231174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int3 i = *i3; 1232174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12330b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12340b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1235174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int4 *i4) { 1236174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int4 i = *i4; 1237174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12380b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12390b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1240174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned int i) { 1241174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %u 0x%x", s, i, i); 12420b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12430b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1244174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint2 *i2) { 1245174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint2 i = *i2; 1246174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%u, %u} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 12470b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12480b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1249174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint3 *i3) { 1250174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint3 i = *i3; 1251174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12520b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12530b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1254174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint4 *i4) { 1255174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint4 i = *i4; 1256174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12570b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12580b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1259174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T> 1260174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline long long LL(const T &x) { 1261174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return static_cast<long long>(x); 12620b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12630b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1264174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T> 1265174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline unsigned long long LLu(const T &x) { 1266174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return static_cast<unsigned long long>(x); 12670b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12680b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1269174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long l) { 1270174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %lld 0x%llx", s, LL(l), LL(l)); 12710b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12720b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1273174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long long ll) { 1274174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %lld 0x%llx", s, LL(ll), LL(ll)); 12750b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12760b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1277b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long2 *c) { 1278174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long2 ll = *c; 1279174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 12800b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12810b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1282b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long3 *c) { 1283174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long3 ll = *c; 1284174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 12850b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12860b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1287b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long4 *c) { 1288174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long4 ll = *c; 1289174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 12900b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12910b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1292174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long l) { 1293174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen unsigned long long ll = l; 1294174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %llu 0x%llx", s, ll, ll); 12950b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12960b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1297174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long long ll) { 1298174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %llu 0x%llx", s, ll, ll); 12990b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13000b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1301b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong2 *c) { 1302174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong2 ll = *c; 1303174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 13040b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13050b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1306b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong3 *c) { 1307174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong3 ll = *c; 1308174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13090b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13100b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1311b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong4 *c) { 1312174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong4 ll = *c; 1313174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13140b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13150b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1316a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// FIXME: We need to export these function signatures for the compatibility 1317a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// library. The C++ name mangling that LLVM uses for ext_vector_type requires 1318a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// different versions for "long" vs. "long long". Note that the called 1319a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// functions are still using the appropriate 64-bit sizes. 1320127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1321127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#ifndef __LP64__ 1322a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l2 __attribute__((ext_vector_type(2))); 1323a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l3 __attribute__((ext_vector_type(3))); 1324a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l4 __attribute__((ext_vector_type(4))); 1325a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul2 __attribute__((ext_vector_type(2))); 1326a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul3 __attribute__((ext_vector_type(3))); 1327a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul4 __attribute__((ext_vector_type(4))); 1328a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1329a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l2 *c) { 1330174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long2 ll = *(const long2 *)c; 1331174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 1332a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1333a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1334a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l3 *c) { 1335174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long3 ll = *(const long3 *)c; 1336174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1337a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1338a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1339a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l4 *c) { 1340174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long4 ll = *(const long4 *)c; 1341174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1342a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1343a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1344a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul2 *c) { 1345174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong2 ll = *(const ulong2 *)c; 1346174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 1347a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1348a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1349a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul3 *c) { 1350174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong3 ll = *(const ulong3 *)c; 1351174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1352a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1353a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1354a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul4 *c) { 1355174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong4 ll = *(const ulong4 *)c; 1356174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1357a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1358127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#endif 1359a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1360174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long2 ll) { 1361174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 13629f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13639f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1364174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long3 ll) { 1365174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13669f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13679f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1368174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long4 ll) { 1369174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13709f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13719f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1372174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong2 ll) { 1373174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 13749f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13759f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1376174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong3 ll) { 1377174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13789f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13799f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1380174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong4 ll) { 1381174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13829f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13839f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 13840b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, const void *p) { 1385174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %p", s, p); 13860b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 138787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 1388709a0978ae141198018ca9769f8d96292a8928e6Jason Samsextern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name) { 1389174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// TODO: remove 139044bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 139187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 1392