rsdRuntimeStubs.cpp revision 10adb0c2029f112b5738228617d5645f6ecea0c5
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 3863bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga Nainartypedef __fp16 half; 3963bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga Nainartypedef half half2 __attribute__((ext_vector_type(2))); 4063bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga Nainartypedef half half3 __attribute__((ext_vector_type(3))); 4163bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga Nainartypedef half half4 __attribute__((ext_vector_type(4))); 4263bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga Nainar 43a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float2 __attribute__((ext_vector_type(2))); 44a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float3 __attribute__((ext_vector_type(3))); 45a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef float float4 __attribute__((ext_vector_type(4))); 465261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double2 __attribute__((ext_vector_type(2))); 475261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double3 __attribute__((ext_vector_type(3))); 485261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef double double4 __attribute__((ext_vector_type(4))); 49a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char2 __attribute__((ext_vector_type(2))); 50a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char3 __attribute__((ext_vector_type(3))); 51a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef char char4 __attribute__((ext_vector_type(4))); 52a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar2 __attribute__((ext_vector_type(2))); 53a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar3 __attribute__((ext_vector_type(3))); 54a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef unsigned char uchar4 __attribute__((ext_vector_type(4))); 55d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short2 __attribute__((ext_vector_type(2))); 56d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short3 __attribute__((ext_vector_type(3))); 57d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int16_t short4 __attribute__((ext_vector_type(4))); 58d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort2 __attribute__((ext_vector_type(2))); 59d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort3 __attribute__((ext_vector_type(3))); 60d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint16_t ushort4 __attribute__((ext_vector_type(4))); 61a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int2 __attribute__((ext_vector_type(2))); 62a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int3 __attribute__((ext_vector_type(3))); 63a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef int32_t int4 __attribute__((ext_vector_type(4))); 64a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint2 __attribute__((ext_vector_type(2))); 65a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint3 __attribute__((ext_vector_type(3))); 66a1dd74c5ce4db0991020a4836be24fc35af4f301Rajeev Sharmatypedef uint32_t uint4 __attribute__((ext_vector_type(4))); 67d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long2 __attribute__((ext_vector_type(2))); 68d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long3 __attribute__((ext_vector_type(3))); 69d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef int64_t long4 __attribute__((ext_vector_type(4))); 70d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong2 __attribute__((ext_vector_type(2))); 71d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong3 __attribute__((ext_vector_type(3))); 72d8b8f8a16415496acc9844a89599ce7f377bd04dJason Samstypedef uint64_t ulong4 __attribute__((ext_vector_type(4))); 7387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 745261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint8_t uchar; 755261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint16_t ushort; 765261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint32_t uint; 770b575de8ed0b628d84d256f5846500b0385979bdTim Murray#ifndef RS_SERVER 785261a5ea546ff358edd5aac7602fc4132434f481Jason Samstypedef uint64_t ulong; 790b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif 8087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 81127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#ifndef __LP64__ 82d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#define OPAQUETYPE(t) \ 83d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray typedef struct { const int* const p; } __attribute__((packed, aligned(4))) t; 84127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#else 85127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#define OPAQUETYPE(t) \ 86127d51c1193f4055795da967d47a13bedd3cb951Miao Wang typedef struct { const void* p; const void* r; const void* v1; const void* v2; } t; 87127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#endif 88d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 89d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_element) 90d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_type) 91d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_allocation) 92d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_sampler) 93d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_script) 94d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayOPAQUETYPE(rs_script_call) 952544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga Nainar 962544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_fragment); 972544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_store); 982544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_vertex); 992544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_program_raster); 1002544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_mesh); 1012544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga NainarOPAQUETYPE(rs_font); 1022544371624a3dd21ae2355e8fea870e29009332aPirama Arumuga Nainar 103d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#undef OPAQUETYPE 104d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 1057a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hinestypedef enum { 1067a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines // Empty to avoid conflicting definitions with RsAllocationCubemapFace 1077a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines} rs_allocation_cubemap_face; 1087a01126d25c081f5b613eea80e5ff7e6c75c940fStephen Hines 1096b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainartypedef enum { 1106b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // Empty to avoid conflicting definitions with RsYuvFormat 1116b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} rs_yuv_format; 1126b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 1136b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainartypedef enum { 1146b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // Empty to avoid conflicting definitions with RsAllocationMipmapControl 1156b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} rs_allocation_mipmap_control; 1166b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 117174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef struct { unsigned int val; } rs_allocation_usage_type; 118174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 119d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murraytypedef struct { 120d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_sec; ///< seconds 121d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_min; ///< minutes 122d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_hour; ///< hours 123d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_mday; ///< day of the month 124d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_mon; ///< month 125d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_year; ///< year 126d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_wday; ///< day of the week 127d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_yday; ///< day of the year 128d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray int tm_isdst; ///< daylight savings time 129d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray} rs_tm; 130d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 1317153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// Some RS functions are not threadsafe but can be called from an invoke 1327153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// function. Instead of summarily marking scripts that call these functions as 1337153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// not-threadable we detect calls to them in the driver and sends a fatal error 1347153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar// message. 1357153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainarstatic bool failIfInKernel(Context *rsc, const char *funcName) { 1367153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar RsdHal *dc = (RsdHal *)rsc->mHal.drv; 1377153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar RsdCpuReference *impl = (RsdCpuReference *) dc->mCpuRef; 1387153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 13910adb0c2029f112b5738228617d5645f6ecea0c5David Gross if (impl->getInKernel()) { 1407153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar char buf[256]; 141838c2d0dc0b8b07d4aa8de4360765738c6d2770eMiao Wang snprintf(buf, sizeof(buf), "Error: Call to unsupported function %s " 1427153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar "in kernel", funcName); 1437153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar rsc->setError(RS_ERROR_FATAL_DRIVER, buf); 1447153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return true; 1457153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar } 1467153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return false; 1477153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar} 1487153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 14987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 150174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Allocation routines 15187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 15266d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic#if defined(__i386__) || (defined(__mips__) && __mips==32) 15366d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic// i386 and MIPS32 have different struct return passing to ARM; emulate with a pointer 154174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst Allocation * rsGetAllocation(const void *ptr) { 155709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 156174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Script *sc = RsdCpuReference::getTlsScript(); 157174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Allocation* alloc = rsdScriptGetAllocationForPointer(rsc, sc, ptr); 158174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen android::renderscript::rs_allocation obj = {0}; 159174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen alloc->callUpdateCacheObject(rsc, &obj); 160174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return (Allocation *)obj.p; 16174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} 162174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 163174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst android::renderscript::rs_allocation rsGetAllocation(const void *ptr) { 164709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 165174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Script *sc = RsdCpuReference::getTlsScript(); 166174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Allocation* alloc = rsdScriptGetAllocationForPointer(rsc, sc, ptr); 1677153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 16866d9447a14af787b812b1014ec3eb242994dbc10Petar Jovanovic#ifndef __LP64__ // ARMv7 169174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen android::renderscript::rs_allocation obj = {0}; 170174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else // AArch64/x86_64/MIPS64 171174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen android::renderscript::rs_allocation obj = {0, 0, 0, 0}; 172174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 173174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen alloc->callUpdateCacheObject(rsc, &obj); 174174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return obj; 17574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} 176174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 17774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 178174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationIoSend(::rs_allocation a) { 1791aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 1807153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationIoSend")) 1817153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 182174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationIoSend(rsc, (Allocation *)a.p); 1831aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 1841aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 185174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationIoReceive(::rs_allocation a) { 1861aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 1877153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationIoReceive")) 1887153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 189174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationIoReceive(rsc, (Allocation *)a.p); 1901aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 1911aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 192174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationCopy1DRange( 193174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation dstAlloc, 194174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t dstOff, uint32_t dstMip, uint32_t count, 195174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation srcAlloc, 196174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t srcOff, uint32_t srcMip) { 1971aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 1987153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationCopy1DRange")) 1997153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 200174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationCopy1DRange(rsc, (Allocation *)dstAlloc.p, dstOff, dstMip, 201174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen count, (Allocation *)srcAlloc.p, srcOff, srcMip); 2021aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 2031aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 204174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsAllocationCopy2DRange( 205174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation dstAlloc, 206174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t dstXoff, uint32_t dstYoff, 207174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t dstMip, rs_allocation_cubemap_face dstFace, 208174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t width, uint32_t height, 209174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation srcAlloc, 210174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t srcXoff, uint32_t srcYoff, 211174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t srcMip, rs_allocation_cubemap_face srcFace) { 2121aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 2137153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar if (failIfInKernel(rsc, "rsAllocationCopy2DRange")) 2147153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar return; 215174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationCopy2DRange(rsc, (Allocation *)dstAlloc.p, 2161aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray dstXoff, dstYoff, dstMip, dstFace, 217174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen width, height, (Allocation *)srcAlloc.p, 2181aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray srcXoff, srcYoff, srcMip, srcFace); 2191aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray} 2201aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 2216b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarstatic android::renderscript::rs_element CreateElement(RsDataType dt, 2226b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RsDataKind dk, 2236b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool isNormalized, 2246b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t vecSize) { 2256b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 2266b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2276b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // No need for validation here. The rsCreateElement overload below is not 2286b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // exposed to the Script. The Element-creation APIs call this function in a 2296b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // consistent manner and rsComponent.cpp asserts on any inconsistency. 2306b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Element *element = (Element *) rsrElementCreate(rsc, dt, dk, isNormalized, 2316b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar vecSize); 2326b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_element obj = {}; 2336b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (element == nullptr) 2346b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2356b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar element->callUpdateCacheObject(rsc, &obj); 2366b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2376b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 2386b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2396b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarstatic android::renderscript::rs_type CreateType(RsElement element, 2406b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimX, uint32_t dimY, 2416b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimZ, bool mipmaps, 2426b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool faces, 2436b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t yuv_format) { 2446b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2456b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 2466b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_type obj = {}; 2476b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2486b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (element == nullptr) { 2496b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Invalid element"); 2506b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2516b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2526b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2536b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // validate yuv_format 2546b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RsYuvFormat yuv = (RsYuvFormat) yuv_format; 2556b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (yuv != RS_YUV_NONE && 2566b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv != RS_YUV_YV12 && 2576b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv != RS_YUV_NV21 && 2586b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv != RS_YUV_420_888) { 2596b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2606b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Invalid yuv_format %d\n", yuv_format); 2616b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2626b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2636b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 2646b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar // validate consistency of shape parameters 2656b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimZ > 0) { 2666b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimX < 1 || dimY < 1) { 2676b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Both X and Y dimension required " 2686b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar "when Z is present."); 2696b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2706b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2716b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (mipmaps) { 2726b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: mipmap control requires 2D types"); 2736b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2746b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2756b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (faces) { 2766b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Cube maps require 2D types"); 2776b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2786b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2796b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2806b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimY > 0 && dimX < 1) { 2816b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: X dimension required when Y is " 2826b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar "present."); 2836b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2846b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2856b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (mipmaps && dimY < 1) { 2866b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: mipmap control require 2D Types."); 2876b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2886b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2896b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (faces && dimY < 1) { 2906b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: Cube maps require 2D Types."); 2916b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2926b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2936b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (yuv_format != RS_YUV_NONE) { 2946b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (dimZ != 0 || dimY == 0 || faces || mipmaps) { 2956b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_type creation error: YUV only supports basic 2D."); 2966b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 2976b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2986b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 2996b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3006b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Type *type = (Type *) rsrTypeCreate(rsc, element, dimX, dimY, dimZ, mipmaps, 3016b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar faces, yuv_format); 3026b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (type == nullptr) 3036b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3046b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar type->callUpdateCacheObject(rsc, &obj); 3056b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3066b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3076b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3086b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarstatic android::renderscript::rs_allocation CreateAllocation( 3096b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RsType type, RsAllocationMipmapControl mipmaps, uint32_t usages, 3106b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar void *ptr) { 3116b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3126b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 3136b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_allocation obj = {}; 3146b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3156b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (type == nullptr) { 3166b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_allocation creation error: Invalid type"); 3176b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3186b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 3196b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3206b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t validUsages = RS_ALLOCATION_USAGE_SCRIPT | \ 3216b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE; 3226b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (usages & ~validUsages) { 3236b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ALOGE("rs_allocation creation error: Invalid usage flag"); 3246b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3256b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar } 3266b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3276b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar Allocation *alloc = (Allocation *) rsrAllocationCreateTyped(rsc, type, 3286b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar mipmaps, usages, 3296b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (uintptr_t) ptr); 3306b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar if (alloc == nullptr) 3316b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3326b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar alloc->callUpdateCacheObject(rsc, &obj); 3336b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3346b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return obj; 3356b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3366b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3376b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// Define rsCreateElement, rsCreateType and rsCreateAllocation entry points 3386b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// differently for 32-bit x86 and Mips. The definitions for ARM32 and all 3396b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// 64-bit architectures is further below. 3406b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#if defined(__i386__) || (defined(__mips__) && __mips==32) 3416b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3426b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// The calling convention for the driver on 32-bit x86 and Mips returns 3436b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// rs_element etc. as a stack-return parameter. The Script uses ARM32 calling 3446b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// conventions that return the structs in a register. To match this convention, 3456b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar// emulate the return value using a pointer. 3466b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga NainarElement *rsCreateElement(int32_t dt, int32_t dk, bool isNormalized, 3476b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t vecSize) { 3486b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3496b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_element obj = CreateElement((RsDataType) dt, 3506b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (RsDataKind) dk, 3516b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar isNormalized, 3526b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar vecSize); 3536b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return (Element *) obj.p; 3546b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3556b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3566b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga NainarType *rsCreateType(::rs_element element, uint32_t dimX, uint32_t dimY, 3576b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimZ, bool mipmaps, bool faces, 3586b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar rs_yuv_format yuv_format) { 3596b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_type obj = CreateType((RsElement) element.p, dimX, 3606b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar dimY, dimZ, mipmaps, faces, 3616b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (RsYuvFormat) yuv_format); 3626b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return (Type *) obj.p; 3636b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3646b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3656b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga NainarAllocation *rsCreateAllocation(::rs_type type, 3666b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar rs_allocation_mipmap_control mipmaps, 3676b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t usages, void *ptr) { 3686b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3696b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar android::renderscript::rs_allocation obj; 3706b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar obj = CreateAllocation((RsType) type.p, (RsAllocationMipmapControl) mipmaps, 3716b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar usages, ptr); 3726b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return (Allocation *) obj.p; 3736b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3746b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3756b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#else 3766b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarandroid::renderscript::rs_element rsCreateElement(int32_t dt, int32_t dk, 3776b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool isNormalized, 3786b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t vecSize) { 3796b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3806b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return CreateElement((RsDataType) dt, (RsDataKind) dk, isNormalized, 3816b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar vecSize); 3826b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3836b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3846b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarandroid::renderscript::rs_type rsCreateType(::rs_element element, uint32_t dimX, 3856b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar uint32_t dimY, uint32_t dimZ, 3866b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar bool mipmaps, bool faces, 3876b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar rs_yuv_format yuv_format) { 3886b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return CreateType((RsElement) element.p, dimX, dimY, dimZ, mipmaps, faces, 3896b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar yuv_format); 3906b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 3916b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3926b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainarandroid::renderscript::rs_allocation rsCreateAllocation( 3936b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar ::rs_type type, rs_allocation_mipmap_control mipmaps, uint32_t usages, 3946b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar void *ptr) { 3956b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 3966b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar return CreateAllocation((RsType) type.p, 3976b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar (RsAllocationMipmapControl) mipmaps, 3986b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar usages, ptr); 3996b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar} 4006b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar#endif 4016b387c1e466b507007f0b388da8b037362154e9aPirama Arumuga Nainar 402174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 403174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Object routines 404174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 405174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define IS_CLEAR_SET_OBJ(t) \ 406174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen bool rsIsObject(t src) { \ 407174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return src.p != nullptr; \ 408174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 409174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void __attribute__((overloadable)) rsClearObject(t *dst) { \ 410174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); \ 411174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearObject(rsc, reinterpret_cast<rs_object_base *>(dst)); \ 412174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 413174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void __attribute__((overloadable)) rsSetObject(t *dst, t src) { \ 414174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); \ 415174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrSetObject(rsc, reinterpret_cast<rs_object_base *>(dst), (ObjectBase*)src.p); \ 416174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 4177153e1c8232882ee2bd7b975791a21e1ed9732fdPirama Arumuga Nainar 418174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_element) 419174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_type) 420174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_allocation) 421174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_sampler) 422174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_script) 423b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams 424174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_mesh) 425174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_fragment) 426174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_vertex) 427174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_raster) 428174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_program_store) 429174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenIS_CLEAR_SET_OBJ(::rs_font) 4301aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray 431174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef IS_CLEAR_SET_OBJ 43274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 43387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 434174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Element routines 43587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 436174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void * ElementAt(Allocation *a, RsDataType dt, uint32_t vecSize, 437174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t x, uint32_t y, uint32_t z) { 438709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 439174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Type *t = a->getType(); 440174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Element *e = t->getElement(); 441a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 442174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char buf[256]; 443174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (x && (x >= t->getLODDimX(0))) { 444838c2d0dc0b8b07d4aa8de4360765738c6d2770eMiao Wang snprintf(buf, sizeof(buf), "Out range ElementAt X %i of %i", x, t->getLODDimX(0)); 445174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 446174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 447174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 448a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 449174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (y && (y >= t->getLODDimY(0))) { 450838c2d0dc0b8b07d4aa8de4360765738c6d2770eMiao Wang snprintf(buf, sizeof(buf), "Out range ElementAt Y %i of %i", y, t->getLODDimY(0)); 451174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 452174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 453174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 45487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 455174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (z && (z >= t->getLODDimZ(0))) { 456838c2d0dc0b8b07d4aa8de4360765738c6d2770eMiao Wang snprintf(buf, sizeof(buf), "Out range ElementAt Z %i of %i", z, t->getLODDimZ(0)); 457174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 458174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 459174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 46087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 461174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (vecSize > 0) { 462174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (vecSize != e->getVectorSize()) { 463838c2d0dc0b8b07d4aa8de4360765738c6d2770eMiao Wang snprintf(buf, sizeof(buf), "Vector size mismatch for ElementAt %i of %i", vecSize, e->getVectorSize()); 464174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 465174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 466174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 46787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 468174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (dt != e->getType()) { 469838c2d0dc0b8b07d4aa8de4360765738c6d2770eMiao Wang snprintf(buf, sizeof(buf), "Data type mismatch for ElementAt %i of %i", dt, e->getType()); 470174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 471174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return nullptr; 472174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 473174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 47487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 475174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr; 476174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const uint32_t eSize = e->getSizeBytes(); 477174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const uint32_t stride = a->mHal.drvState.lod[0].stride; 478174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const uint32_t dimY = a->mHal.drvState.lod[0].dimY; 479174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return &p[(x * eSize) + (y * stride) + (z * stride * dimY)]; 48087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 48187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 482174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y, uint32_t z) { 483174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Type *t = const_cast<Allocation*>((Allocation*)a.p)->getType(); 484174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Element *e = t->getElement(); 485174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void *tmp = ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 486174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (tmp != nullptr) 487174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen memcpy(tmp, ptr, e->getSizeBytes()); 48887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 48987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 490174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y) { 491174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt(a, ptr, x, y, 0); 49287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 49387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 494174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x) { 495174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt(a, ptr, x, 0, 0); 49687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 49787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 498174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { 499174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 50087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 50187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 502174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y) { 503174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsGetElementAt(a, x, y ,0); 50487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 50587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 506174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenconst void *rsGetElementAt(::rs_allocation a, uint32_t x) { 507174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsGetElementAt(a, x, 0, 0); 50887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 50987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 510174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define ELEMENT_AT(T, DT, VS) \ 511174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, uint32_t y, uint32_t z) { \ 512174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \ 513174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (r != nullptr) ((T *)r)[0] = *val; \ 514174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 515174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 516174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, uint32_t y) { \ 517174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, val, x, y, 0); \ 518174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 519174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x) { \ 520174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, val, x, 0, 0); \ 521174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 522174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y, uint32_t z) { \ 523174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \ 524174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (r != nullptr) *val = ((T *)r)[0]; \ 525174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 526174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 527174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y) { \ 528174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, val, x, y, 0); \ 529174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 530174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x) { \ 531174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, val, x, 0, 0); \ 532174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 53387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 534174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char, RS_TYPE_SIGNED_8, 1) 535174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char2, RS_TYPE_SIGNED_8, 2) 536174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char3, RS_TYPE_SIGNED_8, 3) 537174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(char4, RS_TYPE_SIGNED_8, 4) 538174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar, RS_TYPE_UNSIGNED_8, 1) 539174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar2, RS_TYPE_UNSIGNED_8, 2) 540174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar3, RS_TYPE_UNSIGNED_8, 3) 541174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uchar4, RS_TYPE_UNSIGNED_8, 4) 542174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short, RS_TYPE_SIGNED_16, 1) 543174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short2, RS_TYPE_SIGNED_16, 2) 544174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short3, RS_TYPE_SIGNED_16, 3) 545174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(short4, RS_TYPE_SIGNED_16, 4) 546174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort, RS_TYPE_UNSIGNED_16, 1) 547174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort2, RS_TYPE_UNSIGNED_16, 2) 548174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort3, RS_TYPE_UNSIGNED_16, 3) 549174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ushort4, RS_TYPE_UNSIGNED_16, 4) 550174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int, RS_TYPE_SIGNED_32, 1) 551174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int2, RS_TYPE_SIGNED_32, 2) 552174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int3, RS_TYPE_SIGNED_32, 3) 553174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(int4, RS_TYPE_SIGNED_32, 4) 554174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint, RS_TYPE_UNSIGNED_32, 1) 555174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint2, RS_TYPE_UNSIGNED_32, 2) 556174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint3, RS_TYPE_UNSIGNED_32, 3) 557174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(uint4, RS_TYPE_UNSIGNED_32, 4) 558174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long, RS_TYPE_SIGNED_64, 1) 559174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long2, RS_TYPE_SIGNED_64, 2) 560174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long3, RS_TYPE_SIGNED_64, 3) 561174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(long4, RS_TYPE_SIGNED_64, 4) 562174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong, RS_TYPE_UNSIGNED_64, 1) 563174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong2, RS_TYPE_UNSIGNED_64, 2) 564174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong3, RS_TYPE_UNSIGNED_64, 3) 565174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(ulong4, RS_TYPE_UNSIGNED_64, 4) 56663bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga NainarELEMENT_AT(half, RS_TYPE_FLOAT_16, 1) 56763bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga NainarELEMENT_AT(half2, RS_TYPE_FLOAT_16, 2) 56863bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga NainarELEMENT_AT(half3, RS_TYPE_FLOAT_16, 3) 56963bd646ed141f5938263574d6372b6b83710e68cPirama Arumuga NainarELEMENT_AT(half4, RS_TYPE_FLOAT_16, 4) 570174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float, RS_TYPE_FLOAT_32, 1) 571174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float2, RS_TYPE_FLOAT_32, 2) 572174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float3, RS_TYPE_FLOAT_32, 3) 573174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(float4, RS_TYPE_FLOAT_32, 4) 574174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double, RS_TYPE_FLOAT_64, 1) 575174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double2, RS_TYPE_FLOAT_64, 2) 576174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double3, RS_TYPE_FLOAT_64, 3) 577174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT(double4, RS_TYPE_FLOAT_64, 4) 57887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 579174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef ELEMENT_AT 58087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 581174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 582174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen/* 583174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * We miss some symbols for rs{Get,Set}Element_long,ulong variants because 64 584174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * bit integer values are 'long' in RS-land but might be 'long long' in the 585174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * driver. Define native_long* and native_ulong* types to be vectors of 586174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * 'long' as seen by the driver and define overloaded versions of 587174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * rsSetElementAt_* and rsGetElementAt_*. This should get us the correct 588174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen * mangled names in the driver. 589174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen */ 59087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 591174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long2 __attribute__((ext_vector_type(2))); 592174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long3 __attribute__((ext_vector_type(3))); 593174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef long native_long4 __attribute__((ext_vector_type(4))); 594174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong2 __attribute__((ext_vector_type(2))); 595174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong3 __attribute__((ext_vector_type(3))); 596174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentypedef unsigned long native_ulong4 __attribute__((ext_vector_type(4))); 59787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 598174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#define ELEMENT_AT_OVERLOADS(T, U) \ 599174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, uint32_t y, uint32_t z) { \ 600174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, (T *) val, x, y, z); \ 601174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 602174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, uint32_t y) { \ 603174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, (T *) val, x, y, 0); \ 604174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 605174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x) { \ 606174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsSetElementAt_##T(a, (T *) val, x, 0, 0); \ 607174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 608174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y, uint32_t z) { \ 609174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, (T *) val, x, y, z); \ 610174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 611174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y) { \ 612174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, (T *) val, x, y, 0); \ 613174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 614174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x) { \ 615174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsGetElementAt_##T(a, (T *) val, x, 0, 0); \ 616174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } \ 61787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 618174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long2, native_long2) 619174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long3, native_long3) 620174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long4, native_long4) 621174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong, unsigned long) 622174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong2, native_ulong2) 623174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong3, native_ulong3) 624174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(ulong4, native_ulong4) 625414a46166126da6864258bd25ff183f9a3c6261dStephen Hines 626174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// We also need variants of rs{Get,Set}ElementAt_long that take 'long long *' as 627174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// we might have this overloaded variant in old APKs. 628174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong ChenELEMENT_AT_OVERLOADS(long, long long) 62987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 630174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#undef ELEMENT_AT_OVERLOADS 631174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 63287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 633174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 634174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// ForEach routines 635174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 636dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Nivoid rsForEachInternal(int slot, 63779b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni rs_script_call *options, 638dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni int hasOutput, 63979b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni int numInputs, 64079b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni ::rs_allocation* allocs) { 64112398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni Context *rsc = RsdCpuReference::getTlsContext(); 64212398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni Script *s = const_cast<Script*>(RsdCpuReference::getTlsScript()); 64379b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni if (numInputs > RS_KERNEL_MAX_ARGUMENTS) { 64479b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni rsc->setError(RS_ERROR_BAD_SCRIPT, 64579b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni "rsForEachInternal: too many inputs to a kernel."); 646dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni return; 647dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 64879b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni Allocation* inputs[RS_KERNEL_MAX_ARGUMENTS]; 64979b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni for (int i = 0; i < numInputs; i++) { 65079b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni inputs[i] = (Allocation*)allocs[i].p; 651dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni } 65279b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni Allocation* out = hasOutput ? (Allocation*)allocs[numInputs].p : nullptr; 65379b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni rsrForEach(rsc, s, slot, numInputs, numInputs > 0 ? inputs : nullptr, out, 65479b75b7ba646cebabe83c68f0ff72a8018f6b3eaYang Ni nullptr, 0, (RsScriptCall*)options); 65512398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni} 65612398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni 657174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 658174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 659174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 660174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 661174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const rs_script_call *call) { 662709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 663dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 6649479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar (Allocation *)out.p, usr, 0, (RsScriptCall *)call); 66587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 66687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 667174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 668174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 669174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 670174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr) { 671709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 672dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 6739479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, 0, nullptr); 67487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 67587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 676174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 677174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 678174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out) { 679709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 680dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 6819479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar nullptr, 0, nullptr); 68287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 68387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 684174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// These functions are only supported in 32-bit. 685174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 686174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 687174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 688174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 689174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 690174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t usrLen) { 691709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 692dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 6939479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, usrLen, nullptr); 69487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 69587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 696174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid __attribute__((overloadable)) rsForEach(::rs_script script, 697174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation in, 698174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ::rs_allocation out, 699174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const void *usr, 700174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t usrLen, 701174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const rs_script_call *call) { 702709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 703dda5cb5b59ae02ec03001ea12c374413714f3d38Yang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, (Allocation *)out.p, 7049479e5bf0152ecff022cd374e2e80905f88b1a5dPirama Arumuga Nainar usr, usrLen, (RsScriptCall *)call); 70587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 706174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 70787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 70887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 709174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Message routines 71087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 711174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID) { 712709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 713174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClient(rsc, cmdID, (const void *)nullptr, 0); 71487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 71587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 716174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClient(int cmdID, const void *data, uint32_t len) { 717709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 718174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClient(rsc, cmdID, data, len); 71987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 72087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 721174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID) { 722709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 723174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClientBlocking(rsc, cmdID, (const void *)nullptr, 0); 72487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 72587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 726174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsSendToClientBlocking(int cmdID, const void *data, uint32_t len) { 727709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 728174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrToClientBlocking(rsc, cmdID, data, len); 72987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 73087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 731174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 732174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Time routines 733174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 73487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 735174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// time_t is int in 32-bit RenderScript. time_t is long in bionic. rsTime and 736174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// rsLocaltime are set to explicitly take 'const int *' so we generate the 737174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// correct mangled names. 738174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 739174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint rsTime(int *timer) { 740174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 741174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentime_t rsTime(time_t * timer) { 742174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 743709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 744174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrTime(rsc, (time_t *)timer); 74587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 74687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 747174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef __LP64__ 748174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const int *timer) { 749174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#else 750174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenrs_tm* rsLocaltime(rs_tm* local, const time_t *timer) { 751174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 752709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 753174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return (rs_tm*)rsrLocalTime(rsc, (tm*)local, (time_t *)timer); 75487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 75587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 756174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeMillis() { 757709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 758174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrUptimeMillis(rsc); 75987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 76087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 761174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenint64_t rsUptimeNanos() { 762709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 763174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrUptimeNanos(rsc); 76487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 76587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 766174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenfloat rsGetDt() { 767709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 768174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const Script *sc = RsdCpuReference::getTlsScript(); 769174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetDt(rsc, sc); 77087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 77187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 77287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 773174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Graphics routines 77487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 775174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#ifndef RS_COMPATIBILITY_LIB 776174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 777174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, float u2, float v2, 778174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, float u3, float v3, 779174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4, float u4, float v4) { 7801aa9dfc002f6b763d34d75d9f47abb4aa70584a2Tim Murray Context *rsc = RsdCpuReference::getTlsContext(); 781dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 782174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (!rsc->setupCheck()) { 783174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return; 784174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 78587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 786174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdHal *dc = (RsdHal *)rsc->mHal.drv; 787174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen if (!dc->gl.shaderCache->setup(rsc)) { 788174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return; 789174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen } 790444bd208b4f129bd8e4c0cce4cf6d709c8900891Yong Chen 791174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("Quad"); 792174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1); 793174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2); 794174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3); 795174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //ALOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4); 796127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 797174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4}; 798174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4}; 799127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 800174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdVertexArray::Attrib attribs[2]; 801174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen attribs[0].set(GL_FLOAT, 3, 12, false, (size_t)vtx, "ATTRIB_position"); 802174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen attribs[1].set(GL_FLOAT, 2, 8, false, (size_t)tex, "ATTRIB_texture0"); 803240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray 804174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RsdVertexArray va(attribs, 2); 805174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen va.setup(rsc); 806240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray 807174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen RSD_CALL_GL(glDrawArrays, GL_TRIANGLE_FAN, 0, 4); 808240a6c96eb94734a84eed53349fb0928d3ce6d19Tim Murray} 809174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 810174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawQuad(float x1, float y1, float z1, 811174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, 812174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, 813174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4) { 814174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuadTexCoords(x1, y1, z1, 0, 1, 815174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, 1, 1, 816174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, 1, 0, 817174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4, 0, 0); 81847211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray} 819174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 820174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) { 82147211dca5b2fc1aa5680ddebe5c4270c08c06e5dTim Murray Context *rsc = RsdCpuReference::getTlsContext(); 82287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 823174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ObjectBaseRef<const ProgramVertex> tmp(rsc->getProgramVertex()); 824174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setProgramVertex(rsc->getDefaultProgramVertex()); 825174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //rsc->setupCheck(); 826174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 827174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen //GLint crop[4] = {0, h, w, -h}; 828dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 829174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float sh = rsc->getHeight(); 830c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams 831174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x, sh - y, z, 832174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x+w, sh - y, z, 833174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x+w, sh - (y+h), z, 834174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x, sh - (y+h), z); 835174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsc->setProgramVertex((ProgramVertex *)tmp.get()); 83687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 83787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 838174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsAllocationMarkDirty(::rs_allocation a) { 839447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 840174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT); 841447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 84287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 843174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a) { 844447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 845174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, RS_ALLOCATION_USAGE_SCRIPT); 846447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 847dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 848174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a, 849174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen unsigned int usage) { 850447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar Context *rsc = RsdCpuReference::getTlsContext(); 851174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)usage); 852447e8362fc760b3d2789dbfe1eec33f1fc6b1c0ePirama Arumuga Nainar} 85387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 85487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 855174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgAllocationSyncAll(::rs_allocation a, 856174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rs_allocation_usage_type source) { 857709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Context *rsc = RsdCpuReference::getTlsContext(); 858174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrAllocationSyncAll(rsc, (Allocation *)a.p, (RsAllocationUsageType)source.val); 85987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 860174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 861174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramFragment(::rs_program_fragment pf) { 862174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 863174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramFragment(rsc, (ProgramFragment *)pf.p); 8640b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 865174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 866174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramStore(::rs_program_store ps) { 867174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 868174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramStore(rsc, (ProgramStore *)ps.p); 8690b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 870174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 871174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramVertex(::rs_program_vertex pv) { 872174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 873174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramVertex(rsc, (ProgramVertex *)pv.p); 8740b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 875174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 876174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindProgramRaster(::rs_program_raster pr) { 877174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 878174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindProgramRaster(rsc, (ProgramRaster *)pr.p); 8790b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 880174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 881174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindSampler(::rs_program_fragment pf, 882174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_sampler s) { 883174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 884174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindSampler(rsc, (ProgramFragment *)pf.p, slot, (Sampler *)s.p); 8850b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 886174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 887174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindTexture(::rs_program_fragment pf, 888174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 889174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 890174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindTexture(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p); 8910b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 892174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 893174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_fragment pf, 894174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 895174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 896174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindConstant(rsc, (ProgramFragment *)pf.p, slot, (Allocation *)a.p); 8970b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 898174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 899174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindConstant(::rs_program_vertex pv, 900174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint32_t slot, ::rs_allocation a) { 901174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 902174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindConstant(rsc, (ProgramVertex *)pv.p, slot, (Allocation *)a.p); 9030b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 904174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 905174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *m) { 906174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 907174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadProjectionMatrix(rsc, (const rsc_Matrix *)m); 9080b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 909174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 910174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *m) { 911174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 912174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadModelMatrix(rsc, (const rsc_Matrix *)m); 9130b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 914174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 915174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *m) { 916174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 917174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpLoadTextureMatrix(rsc, (const rsc_Matrix *)m); 9180b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 919174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 920174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *m) { 921174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 922174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrVpGetProjectionMatrix(rsc, (rsc_Matrix *)m); 9230b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 924174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 925174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgProgramFragmentConstantColor(::rs_program_fragment pf, 926174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float r, float g, float b, float a) { 927174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 928174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPfConstantColor(rsc, (ProgramFragment *)pf.p, r, g, b, a); 9290b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 930174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 931174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetWidth(void) { 932174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 933174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetWidth(rsc); 9340b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 935174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 936174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenuint32_t rsgGetHeight(void) { 937174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 938174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return rsrGetHeight(rsc); 9390b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 940174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 941174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawRect(float x1, float y1, float x2, float y2, float z) { 942174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x1, y2, z, 943174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z, 944174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y1, z, 945174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x1, y1, z); 9460b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 947174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 948174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuad(float x1, float y1, float z1, 949174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, 950174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, 951174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4) { 952174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuad(x1, y1, z1, 953174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, 954174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, 955174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4); 9560b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 957174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 958174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 959174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x2, float y2, float z2, float u2, float v2, 960174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x3, float y3, float z3, float u3, float v3, 961174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float x4, float y4, float z4, float u4, float v4) { 962174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawQuadTexCoords(x1, y1, z1, u1, v1, 963174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x2, y2, z2, u2, v2, 964174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x3, y3, z3, u3, v3, 965174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen x4, y4, z4, u4, v4); 9660b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 967174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 968174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h) { 969174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen SC_DrawSpriteScreenspace(x, y, z, w, h); 9700b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 971174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 972174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism) { 973174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 974174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMesh(rsc, (Mesh *)ism.p); 9750b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 976174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 977174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex) { 978174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 979174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMeshPrimitive(rsc, (Mesh *)ism.p, primitiveIndex); 9800b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 981174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 982174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawMesh(::rs_mesh ism, uint primitiveIndex, uint start, uint len) { 983174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 984174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawMeshPrimitiveRange(rsc, (Mesh *)ism.p, primitiveIndex, start, len); 9850b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 986174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 987174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeshComputeBoundingBox(::rs_mesh mesh, 988174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *minX, float *minY, float *minZ, 989174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *maxX, float *maxY, float *maxZ) { 990174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 991174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeshComputeBoundingBox(rsc, (Mesh *)mesh.p, minX, minY, minZ, maxX, maxY, maxZ); 9920b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 993174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 994174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColor(float r, float g, float b, float a) { 995174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 996174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPrepareClear(rsc); 997174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLClearColor(rsc, r, g, b, a); 9980b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 999174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1000174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepth(float value) { 1001174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1002174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrPrepareClear(rsc); 1003174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLClearDepth(rsc, value); 10040b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1005174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1006174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(const char *text, int x, int y) { 1007174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1008174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawText(rsc, text, x, y); 10090b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1010127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1011174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgDrawText(::rs_allocation a, int x, int y) { 1012174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1013174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrDrawTextAlloc(rsc, (Allocation *)a.p, x, y); 1014127d51c1193f4055795da967d47a13bedd3cb951Miao Wang} 1015127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1016174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(const char *text, int *left, int *right, 1017174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int *top, int *bottom) { 1018174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1019174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeasureText(rsc, text, left, right, top, bottom); 1020127d51c1193f4055795da967d47a13bedd3cb951Miao Wang} 1021127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1022174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgMeasureText(::rs_allocation a, int *left, int *right, 1023174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int *top, int *bottom) { 1024174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1025174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrMeasureTextAlloc(rsc, (Allocation *)a.p, left, right, top, bottom); 1026dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar} 1027dc0d8f7c0f1f43f25c34fbc04656ad578f6e953bPirama Arumuga Nainar 1028174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindFont(::rs_font font) { 1029174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1030174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFont(rsc, (Font *)font.p); 10310b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1032174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1033174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFontColor(float r, float g, float b, float a) { 1034174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1035174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrFontColor(rsc, r, g, b, a); 10360b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1037174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1038174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindColorTarget(::rs_allocation a, uint slot) { 1039174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1040174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFrameBufferObjectColorTarget(rsc, (Allocation *)a.p, slot); 10410b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1042174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1043174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgBindDepthTarget(::rs_allocation a) { 1044174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1045174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrBindFrameBufferObjectDepthTarget(rsc, (Allocation *)a.p); 10460b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1047174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1048174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearColorTarget(uint slot) { 1049174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1050174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectColorTarget(rsc, slot); 10510b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1052174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1053174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearDepthTarget(void) { 1054174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1055174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectDepthTarget(rsc); 10560b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1057174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1058174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgClearAllRenderTargets(void) { 1059174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1060174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrClearFrameBufferObjectTargets(rsc); 10610b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 1062127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1063174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid color(float r, float g, float b, float a) { 1064174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1065174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsrColor(rsc, r, g, b, a); 10660b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10670b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1068174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsgFinish(void) { 1069174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen Context *rsc = RsdCpuReference::getTlsContext(); 1070174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen rsdGLFinish(rsc); 1071174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1072174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen#endif 10730b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1074174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 1075174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// Debug routines 1076174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen////////////////////////////////////////////////////////////////////////////// 10770b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f) { 1078174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f))); 10790b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10800b575de8ed0b628d84d256f5846500b0385979bdTim Murray 10810b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2) { 1082174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, f1, f2); 10830b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10840b575de8ed0b628d84d256f5846500b0385979bdTim Murray 10850b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3) { 1086174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, f1, f2, f3); 10870b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10880b575de8ed0b628d84d256f5846500b0385979bdTim Murray 10890b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, float f1, float f2, float f3, float f4) { 1090174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4); 10910b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10920b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1093174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float2 *f2) { 1094174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float2 f = *f2; 1095174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, f.x, f.y); 10960b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 10970b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1098174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float3 *f3) { 1099174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float3 f = *f3; 1100174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z); 11010b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11020b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1103174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const float4 *f4) { 1104174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float4 f = *f4; 1105174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w); 11060b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11070b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11080b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, double d) { 1109174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d))); 11100b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11110b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1112174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double2 *d2) { 1113174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double2 d = *d2; 1114174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f}", s, d.x, d.y); 11156ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 11166ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 1117174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double3 *d3) { 1118174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double3 d = *d3; 1119174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f}", s, d.x, d.y, d.z); 11206ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 11216ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 1122174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const double4 *d4) { 1123174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen double4 d = *d4; 1124174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f}", s, d.x, d.y, d.z, d.w); 11256ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet} 11266ba05171a84a7444df01b9f81a7233b17e1f120aJean-Luc Brouillet 1127b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix4x4 *m) { 1128174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 1129174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]); 1130174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]); 1131174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]); 1132174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]); 11330b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11340b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1135b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix3x3 *m) { 1136174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 1137174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]); 1138174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f", s, f[1], f[4], f[7]); 1139174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f, %f}",s, f[2], f[5], f[8]); 11400b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11410b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1142b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const rs_matrix2x2 *m) { 1143174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen float *f = (float *)m; 1144174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%f, %f", s, f[0], f[2]); 1145174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %f, %f}",s, f[1], f[3]); 11460b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11470b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11480b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, char c) { 1149174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hhd 0x%hhx", s, c, (unsigned char)c); 11500b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11510b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1152174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char2 *c2) { 1153174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char2 c = *c2; 1154174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hhd, %hhd} 0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y); 11550b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11560b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1157174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char3 *c3) { 1158174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char3 c = *c3; 1159174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11600b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11610b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1162174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const char4 *c4) { 1163174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen char4 c = *c4; 1164174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11650b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11660b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11670b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned char c) { 1168174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hhu 0x%hhx", s, c, c); 11690b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11700b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1171174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar2 *c2) { 1172174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar2 c = *c2; 1173174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hhu, %hhu} 0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y); 11740b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11750b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1176174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar3 *c3) { 1177174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar3 c = *c3; 1178174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11790b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11800b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1181174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uchar4 *c4) { 1182174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uchar4 c = *c4; 1183174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11840b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11850b575de8ed0b628d84d256f5846500b0385979bdTim Murray 11860b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, short c) { 1187174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hd 0x%hx", s, c, c); 11880b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11890b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1190174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short2 *c2) { 1191174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short2 c = *c2; 1192174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hd, %hd} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 11930b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11940b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1195174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short3 *c3) { 1196174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short3 c = *c3; 1197174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 11980b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 11990b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1200174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const short4 *c4) { 1201174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen short4 c = *c4; 1202174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12030b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12040b575de8ed0b628d84d256f5846500b0385979bdTim Murray 12050b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, unsigned short c) { 1206174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %hu 0x%hx", s, c, c); 1207174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1208174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1209174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort2 *c2) { 1210174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort2 c = *c2; 1211174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%hu, %hu} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 12120b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12130b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1214174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort3 *c3) { 1215174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort3 c = *c3; 1216174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 1217174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen} 1218174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen 1219174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ushort4 *c4) { 1220174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ushort4 c = *c4; 1221174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12220b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12230b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1224174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, int i) { 1225174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %d 0x%x", s, i, i); 12260b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12270b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1228174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int2 *i2) { 1229174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int2 i = *i2; 1230174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%d, %d} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 12310b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12320b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1233174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int3 *i3) { 1234174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int3 i = *i3; 1235174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12360b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12370b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1238174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const int4 *i4) { 1239174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen int4 i = *i4; 1240174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12410b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12420b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1243174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned int i) { 1244174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %u 0x%x", s, i, i); 12450b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12460b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1247174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint2 *i2) { 1248174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint2 i = *i2; 1249174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%u, %u} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 12500b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12510b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1252174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint3 *i3) { 1253174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint3 i = *i3; 1254174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12550b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12560b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1257174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const uint4 *i4) { 1258174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen uint4 i = *i4; 1259174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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); 12600b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12610b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1262174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T> 1263174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline long long LL(const T &x) { 1264174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return static_cast<long long>(x); 12650b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12660b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1267174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chentemplate <typename T> 1268174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenstatic inline unsigned long long LLu(const T &x) { 1269174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen return static_cast<unsigned long long>(x); 12700b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12710b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1272174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long l) { 1273174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %lld 0x%llx", s, LL(l), LL(l)); 12740b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12750b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1276174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, long long ll) { 1277174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %lld 0x%llx", s, LL(ll), LL(ll)); 12780b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12790b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1280b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long2 *c) { 1281174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long2 ll = *c; 1282174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 12830b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12840b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1285b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long3 *c) { 1286174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long3 ll = *c; 1287174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 12880b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12890b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1290b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const long4 *c) { 1291174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long4 ll = *c; 1292174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 12930b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12940b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1295174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long l) { 1296174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen unsigned long long ll = l; 1297174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %llu 0x%llx", s, ll, ll); 12980b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 12990b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1300174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, unsigned long long ll) { 1301174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %llu 0x%llx", s, ll, ll); 13020b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13030b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1304b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong2 *c) { 1305174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong2 ll = *c; 1306174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 13070b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13080b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1309b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong3 *c) { 1310174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong3 ll = *c; 1311174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13120b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13130b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1314b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hinesvoid rsDebug(const char *s, const ulong4 *c) { 1315174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong4 ll = *c; 1316174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13170b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 13180b575de8ed0b628d84d256f5846500b0385979bdTim Murray 1319a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// FIXME: We need to export these function signatures for the compatibility 1320a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// library. The C++ name mangling that LLVM uses for ext_vector_type requires 1321a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// different versions for "long" vs. "long long". Note that the called 1322a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines// functions are still using the appropriate 64-bit sizes. 1323127d51c1193f4055795da967d47a13bedd3cb951Miao Wang 1324127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#ifndef __LP64__ 1325a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l2 __attribute__((ext_vector_type(2))); 1326a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l3 __attribute__((ext_vector_type(3))); 1327a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef long l4 __attribute__((ext_vector_type(4))); 1328a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul2 __attribute__((ext_vector_type(2))); 1329a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul3 __attribute__((ext_vector_type(3))); 1330a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinestypedef unsigned long ul4 __attribute__((ext_vector_type(4))); 1331a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1332a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l2 *c) { 1333174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long2 ll = *(const long2 *)c; 1334174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 1335a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1336a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1337a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l3 *c) { 1338174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long3 ll = *(const long3 *)c; 1339174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1340a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1341a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1342a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const l4 *c) { 1343174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen long4 ll = *(const long4 *)c; 1344174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1345a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1346a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1347a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul2 *c) { 1348174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong2 ll = *(const ulong2 *)c; 1349174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 1350a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1351a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1352a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul3 *c) { 1353174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong3 ll = *(const ulong3 *)c; 1354174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1355a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1356a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1357a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hinesvoid rsDebug(const char *s, const ul4 *c) { 1358174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ulong4 ll = *(const ulong4 *)c; 1359174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 1360a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines} 1361127d51c1193f4055795da967d47a13bedd3cb951Miao Wang#endif 1362a5d9bef6b53ba394087c7c7b9cc60d3aaa7f121bStephen Hines 1363174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long2 ll) { 1364174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), LL(ll.y)); 13659f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13669f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1367174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long3 ll) { 1368174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13699f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13709f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1371174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const long4 ll) { 1372174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13739f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13749f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1375174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong2 ll) { 1376174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), LLu(ll.y)); 13779f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13789f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1379174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong3 ll) { 1380174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13819f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13829f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 1383174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chenvoid rsDebug(const char *s, const ulong4 ll) { 1384174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong 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)); 13859f39aaf0145e9607200141e4716b73319055e6d7Tim Murray} 13869f39aaf0145e9607200141e4716b73319055e6d7Tim Murray 13870b575de8ed0b628d84d256f5846500b0385979bdTim Murrayvoid rsDebug(const char *s, const void *p) { 1388174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen ALOGD("%s %p", s, p); 13890b575de8ed0b628d84d256f5846500b0385979bdTim Murray} 139087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 1391709a0978ae141198018ca9769f8d96292a8928e6Jason Samsextern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name) { 1392174ebc44658bffa27f97c85ae0265ad3cb48ae85Yong Chen// TODO: remove 139344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 139487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 1395