175f0d3110b04346b901771f96ce15cdbe907278fYang Ni/* 275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Copyright (C) 2011-2012 The Android Open Source Project 375f0d3110b04346b901771f96ce15cdbe907278fYang Ni * 475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Licensed under the Apache License, Version 2.0 (the "License"); 575f0d3110b04346b901771f96ce15cdbe907278fYang Ni * you may not use this file except in compliance with the License. 675f0d3110b04346b901771f96ce15cdbe907278fYang Ni * You may obtain a copy of the License at 775f0d3110b04346b901771f96ce15cdbe907278fYang Ni * 875f0d3110b04346b901771f96ce15cdbe907278fYang Ni * http://www.apache.org/licenses/LICENSE-2.0 975f0d3110b04346b901771f96ce15cdbe907278fYang Ni * 1075f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Unless required by applicable law or agreed to in writing, software 1175f0d3110b04346b901771f96ce15cdbe907278fYang Ni * distributed under the License is distributed on an "AS IS" BASIS, 1275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1375f0d3110b04346b901771f96ce15cdbe907278fYang Ni * See the License for the specific language governing permissions and 1475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * limitations under the License. 1575f0d3110b04346b901771f96ce15cdbe907278fYang Ni */ 1675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 1775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include <time.h> 1875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 1975f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsContext.h" 2075f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsElement.h" 2175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsMatrix2x2.h" 2275f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsMatrix3x3.h" 2375f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsMatrix4x4.h" 2475f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsRuntime.h" 2575f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsScriptC.h" 2675f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsType.h" 2775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsovAllocation.h" 2875f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsovCore.h" 2975f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include "rsovScript.h" 3075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 3175f0d3110b04346b901771f96ce15cdbe907278fYang Niusing namespace android; 3275f0d3110b04346b901771f96ce15cdbe907278fYang Niusing namespace android::renderscript; 3375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 3475f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef __fp16 half; 3575f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef half half2 __attribute__((ext_vector_type(2))); 3675f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef half half3 __attribute__((ext_vector_type(3))); 3775f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef half half4 __attribute__((ext_vector_type(4))); 3875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 3975f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef float float2 __attribute__((ext_vector_type(2))); 4075f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef float float3 __attribute__((ext_vector_type(3))); 4175f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef float float4 __attribute__((ext_vector_type(4))); 4275f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef double double2 __attribute__((ext_vector_type(2))); 4375f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef double double3 __attribute__((ext_vector_type(3))); 4475f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef double double4 __attribute__((ext_vector_type(4))); 4575f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef char char2 __attribute__((ext_vector_type(2))); 4675f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef char char3 __attribute__((ext_vector_type(3))); 4775f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef char char4 __attribute__((ext_vector_type(4))); 4875f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned char uchar2 __attribute__((ext_vector_type(2))); 4975f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned char uchar3 __attribute__((ext_vector_type(3))); 5075f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned char uchar4 __attribute__((ext_vector_type(4))); 5175f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int16_t short2 __attribute__((ext_vector_type(2))); 5275f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int16_t short3 __attribute__((ext_vector_type(3))); 5375f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int16_t short4 __attribute__((ext_vector_type(4))); 5475f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint16_t ushort2 __attribute__((ext_vector_type(2))); 5575f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint16_t ushort3 __attribute__((ext_vector_type(3))); 5675f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint16_t ushort4 __attribute__((ext_vector_type(4))); 5775f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int32_t int2 __attribute__((ext_vector_type(2))); 5875f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int32_t int3 __attribute__((ext_vector_type(3))); 5975f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int32_t int4 __attribute__((ext_vector_type(4))); 6075f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint32_t uint2 __attribute__((ext_vector_type(2))); 6175f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint32_t uint3 __attribute__((ext_vector_type(3))); 6275f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint32_t uint4 __attribute__((ext_vector_type(4))); 6375f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int64_t long2 __attribute__((ext_vector_type(2))); 6475f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int64_t long3 __attribute__((ext_vector_type(3))); 6575f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef int64_t long4 __attribute__((ext_vector_type(4))); 6675f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint64_t ulong2 __attribute__((ext_vector_type(2))); 6775f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint64_t ulong3 __attribute__((ext_vector_type(3))); 6875f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint64_t ulong4 __attribute__((ext_vector_type(4))); 6975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 7075f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint8_t uchar; 7175f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint16_t ushort; 7275f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint32_t uint; 7375f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef uint64_t ulong; 7475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 7575f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Add NOLINT to suppress wrong warnings from clang-tidy. 7675f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef __LP64__ 7775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#define OPAQUETYPE(t) \ 7875f0d3110b04346b901771f96ce15cdbe907278fYang Ni typedef struct { \ 7975f0d3110b04346b901771f96ce15cdbe907278fYang Ni const int *const p; \ 8075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } __attribute__((packed, aligned(4))) t; /*NOLINT*/ 8175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#else 82700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung#define OPAQUETYPE(t) \ 83700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung typedef struct { \ 84700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung const void *p; \ 85700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung const void *unused1; \ 86700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung const void *unused2; \ 87700e68883c4324c15b380ff6724249f39d4f498cI-Jui (Ray) Sung const void *unused3; \ 8875f0d3110b04346b901771f96ce15cdbe907278fYang Ni } t; /*NOLINT*/ 8975f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 9075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 9175f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_element) 9275f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_type) 9375f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_allocation) 9475f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_sampler) 9575f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_script) 9675f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_script_call) 9775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 9875f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_program_fragment); 9975f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_program_store); 10075f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_program_vertex); 10175f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_program_raster); 10275f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_mesh); 10375f0d3110b04346b901771f96ce15cdbe907278fYang NiOPAQUETYPE(rs_font); 10475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 10575f0d3110b04346b901771f96ce15cdbe907278fYang Ni#undef OPAQUETYPE 10675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 10775f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef enum { 10875f0d3110b04346b901771f96ce15cdbe907278fYang Ni // Empty to avoid conflicting definitions with RsAllocationCubemapFace 10975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} rs_allocation_cubemap_face; 11075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 11175f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef enum { 11275f0d3110b04346b901771f96ce15cdbe907278fYang Ni // Empty to avoid conflicting definitions with RsYuvFormat 11375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} rs_yuv_format; 11475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 11575f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef enum { 11675f0d3110b04346b901771f96ce15cdbe907278fYang Ni // Empty to avoid conflicting definitions with RsAllocationMipmapControl 11775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} rs_allocation_mipmap_control; 11875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 11975f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef struct { unsigned int val; } rs_allocation_usage_type; 12075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 12175f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef struct { 12275f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_sec; ///< seconds 12375f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_min; ///< minutes 12475f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_hour; ///< hours 12575f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_mday; ///< day of the month 12675f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_mon; ///< month 12775f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_year; ///< year 12875f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_wday; ///< day of the week 12975f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_yday; ///< day of the year 13075f0d3110b04346b901771f96ce15cdbe907278fYang Ni int tm_isdst; ///< daylight savings time 13175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} rs_tm; 13275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 13375f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Some RS functions are not threadsafe but can be called from an invoke 13475f0d3110b04346b901771f96ce15cdbe907278fYang Ni// function. Instead of summarily marking scripts that call these functions as 13575f0d3110b04346b901771f96ce15cdbe907278fYang Ni// not-threadable we detect calls to them in the driver and sends a fatal error 13675f0d3110b04346b901771f96ce15cdbe907278fYang Ni// message. 13775f0d3110b04346b901771f96ce15cdbe907278fYang Nistatic bool failIfInKernel(Context *rsc, const char *funcName) { 13875f0d3110b04346b901771f96ce15cdbe907278fYang Ni RSoVHal *dc = (RSoVHal *)rsc->mHal.drv; 13975f0d3110b04346b901771f96ce15cdbe907278fYang Ni RsdCpuReference *impl = (RsdCpuReference *)dc->mCpuRef; 14075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 14175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (impl->getInKernel()) { 14275f0d3110b04346b901771f96ce15cdbe907278fYang Ni char buf[256]; 14375f0d3110b04346b901771f96ce15cdbe907278fYang Ni snprintf(buf, sizeof(buf), 14475f0d3110b04346b901771f96ce15cdbe907278fYang Ni "Error: Call to unsupported function %s " 14575f0d3110b04346b901771f96ce15cdbe907278fYang Ni "in kernel", 14675f0d3110b04346b901771f96ce15cdbe907278fYang Ni funcName); 14775f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc->setError(RS_ERROR_FATAL_DRIVER, buf); 14875f0d3110b04346b901771f96ce15cdbe907278fYang Ni return true; 14975f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 15075f0d3110b04346b901771f96ce15cdbe907278fYang Ni return false; 15175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 15275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 15375f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 15475f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Allocation routines 15575f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 15675f0d3110b04346b901771f96ce15cdbe907278fYang Ni#if defined(__i386__) || (defined(__mips__) && __mips == 32) 15775f0d3110b04346b901771f96ce15cdbe907278fYang Ni// i386 and MIPS32 have different struct return passing to ARM; emulate with a 15875f0d3110b04346b901771f96ce15cdbe907278fYang Ni// pointer 15975f0d3110b04346b901771f96ce15cdbe907278fYang Niconst Allocation *rsGetAllocation(const void *ptr) { 16075f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 16175f0d3110b04346b901771f96ce15cdbe907278fYang Ni const Script *sc = RsdCpuReference::getTlsScript(); 16275f0d3110b04346b901771f96ce15cdbe907278fYang Ni Allocation *alloc = rsovScriptGetAllocationForPointer(rsc, sc, ptr); 16375f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_allocation obj = {0}; 16475f0d3110b04346b901771f96ce15cdbe907278fYang Ni alloc->callUpdateCacheObject(rsc, &obj); 16575f0d3110b04346b901771f96ce15cdbe907278fYang Ni return (Allocation *)obj.p; 16675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 16775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#else 16875f0d3110b04346b901771f96ce15cdbe907278fYang Niconst android::renderscript::rs_allocation rsGetAllocation(const void *ptr) { 16975f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 17075f0d3110b04346b901771f96ce15cdbe907278fYang Ni const Script *sc = RsdCpuReference::getTlsScript(); 17175f0d3110b04346b901771f96ce15cdbe907278fYang Ni Allocation *alloc = rsovScriptGetAllocationForPointer(rsc, sc, ptr); 17275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 17375f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef __LP64__ // ARMv7 17475f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_allocation obj = {0}; 17575f0d3110b04346b901771f96ce15cdbe907278fYang Ni#else // AArch64/x86_64/MIPS64 17675f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_allocation obj = {0, 0, 0, 0}; 17775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 17875f0d3110b04346b901771f96ce15cdbe907278fYang Ni alloc->callUpdateCacheObject(rsc, &obj); 17975f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 18075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 18175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 18275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 18375f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) rsAllocationIoSend(::rs_allocation a) { 18475f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 18575f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (failIfInKernel(rsc, "rsAllocationIoSend")) return; 18675f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrAllocationIoSend(rsc, (Allocation *)a.p); 18775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 18875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 18975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) rsAllocationIoReceive(::rs_allocation a) { 19075f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 19175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (failIfInKernel(rsc, "rsAllocationIoReceive")) return; 19275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrAllocationIoReceive(rsc, (Allocation *)a.p); 19375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 19475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 19575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) 19675f0d3110b04346b901771f96ce15cdbe907278fYang NirsAllocationCopy1DRange(::rs_allocation dstAlloc, uint32_t dstOff, 19775f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t dstMip, uint32_t count, 19875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ::rs_allocation srcAlloc, uint32_t srcOff, 19975f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t srcMip) { 20075f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 20175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (failIfInKernel(rsc, "rsAllocationCopy1DRange")) return; 20275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrAllocationCopy1DRange(rsc, (Allocation *)dstAlloc.p, dstOff, dstMip, count, 20375f0d3110b04346b901771f96ce15cdbe907278fYang Ni (Allocation *)srcAlloc.p, srcOff, srcMip); 20475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 20575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 20675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) 20775f0d3110b04346b901771f96ce15cdbe907278fYang NirsAllocationCopy2DRange(::rs_allocation dstAlloc, uint32_t dstXoff, 20875f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t dstYoff, uint32_t dstMip, 20975f0d3110b04346b901771f96ce15cdbe907278fYang Ni rs_allocation_cubemap_face dstFace, uint32_t width, 21075f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t height, ::rs_allocation srcAlloc, 21175f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip, 21275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rs_allocation_cubemap_face srcFace) { 21375f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 21475f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (failIfInKernel(rsc, "rsAllocationCopy2DRange")) return; 21575f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrAllocationCopy2DRange( 21675f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc, (Allocation *)dstAlloc.p, dstXoff, dstYoff, dstMip, dstFace, width, 21775f0d3110b04346b901771f96ce15cdbe907278fYang Ni height, (Allocation *)srcAlloc.p, srcXoff, srcYoff, srcMip, srcFace); 21875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 21975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 22075f0d3110b04346b901771f96ce15cdbe907278fYang Nistatic android::renderscript::rs_element CreateElement(RsDataType dt, 22175f0d3110b04346b901771f96ce15cdbe907278fYang Ni RsDataKind dk, 22275f0d3110b04346b901771f96ce15cdbe907278fYang Ni bool isNormalized, 22375f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t vecSize) { 22475f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 22575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 22675f0d3110b04346b901771f96ce15cdbe907278fYang Ni // No need for validation here. The rsCreateElement overload below is not 22775f0d3110b04346b901771f96ce15cdbe907278fYang Ni // exposed to the Script. The Element-creation APIs call this function in a 22875f0d3110b04346b901771f96ce15cdbe907278fYang Ni // consistent manner and rsComponent.cpp asserts on any inconsistency. 22975f0d3110b04346b901771f96ce15cdbe907278fYang Ni Element *element = 23075f0d3110b04346b901771f96ce15cdbe907278fYang Ni (Element *)rsrElementCreate(rsc, dt, dk, isNormalized, vecSize); 23175f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_element obj = {}; 23275f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (element == nullptr) return obj; 23375f0d3110b04346b901771f96ce15cdbe907278fYang Ni element->callUpdateCacheObject(rsc, &obj); 23475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 23575f0d3110b04346b901771f96ce15cdbe907278fYang Ni // Any new rsObject created from inside a script should have the usrRefCount 23675f0d3110b04346b901771f96ce15cdbe907278fYang Ni // initialized to 0 and the sysRefCount initialized to 1. 23775f0d3110b04346b901771f96ce15cdbe907278fYang Ni element->incSysRef(); 23875f0d3110b04346b901771f96ce15cdbe907278fYang Ni element->decUserRef(); 23975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 24075f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 24175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 24275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 24375f0d3110b04346b901771f96ce15cdbe907278fYang Nistatic android::renderscript::rs_type CreateType(RsElement element, 24475f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t dimX, uint32_t dimY, 24575f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t dimZ, bool mipmaps, 24675f0d3110b04346b901771f96ce15cdbe907278fYang Ni bool faces, 24775f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t yuv_format) { 24875f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 24975f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_type obj = {}; 25075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 25175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (element == nullptr) { 25275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_type creation error: Invalid element"); 25375f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 25475f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 25575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 25675f0d3110b04346b901771f96ce15cdbe907278fYang Ni // validate yuv_format 25775f0d3110b04346b901771f96ce15cdbe907278fYang Ni RsYuvFormat yuv = (RsYuvFormat)yuv_format; 25875f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (yuv != RS_YUV_NONE && yuv != RS_YUV_YV12 && yuv != RS_YUV_NV21 && 25975f0d3110b04346b901771f96ce15cdbe907278fYang Ni yuv != RS_YUV_420_888) { 26075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_type creation error: Invalid yuv_format %d\n", yuv_format); 26175f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 26275f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 26375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 26475f0d3110b04346b901771f96ce15cdbe907278fYang Ni // validate consistency of shape parameters 26575f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (dimZ > 0) { 26675f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (dimX < 1 || dimY < 1) { 26775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE( 26875f0d3110b04346b901771f96ce15cdbe907278fYang Ni "rs_type creation error: Both X and Y dimension required " 26975f0d3110b04346b901771f96ce15cdbe907278fYang Ni "when Z is present."); 27075f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 27175f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 27275f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (mipmaps) { 27375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_type creation error: mipmap control requires 2D types"); 27475f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 27575f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 27675f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (faces) { 27775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_type creation error: Cube maps require 2D types"); 27875f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 27975f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 28075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 28175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (dimY > 0 && dimX < 1) { 28275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE( 28375f0d3110b04346b901771f96ce15cdbe907278fYang Ni "rs_type creation error: X dimension required when Y is " 28475f0d3110b04346b901771f96ce15cdbe907278fYang Ni "present."); 28575f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 28675f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 28775f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (mipmaps && dimY < 1) { 28875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_type creation error: mipmap control require 2D Types."); 28975f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 29075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 29175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (faces && dimY < 1) { 29275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_type creation error: Cube maps require 2D Types."); 29375f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 29475f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 29575f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (yuv_format != RS_YUV_NONE) { 29675f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (dimZ != 0 || dimY == 0 || faces || mipmaps) { 29775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_type creation error: YUV only supports basic 2D."); 29875f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 29975f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 30075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 30175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 30275f0d3110b04346b901771f96ce15cdbe907278fYang Ni Type *type = (Type *)rsrTypeCreate(rsc, element, dimX, dimY, dimZ, mipmaps, 30375f0d3110b04346b901771f96ce15cdbe907278fYang Ni faces, yuv_format); 30475f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (type == nullptr) return obj; 30575f0d3110b04346b901771f96ce15cdbe907278fYang Ni type->callUpdateCacheObject(rsc, &obj); 30675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 30775f0d3110b04346b901771f96ce15cdbe907278fYang Ni // Any new rsObject created from inside a script should have the usrRefCount 30875f0d3110b04346b901771f96ce15cdbe907278fYang Ni // initialized to 0 and the sysRefCount initialized to 1. 30975f0d3110b04346b901771f96ce15cdbe907278fYang Ni type->incSysRef(); 31075f0d3110b04346b901771f96ce15cdbe907278fYang Ni type->decUserRef(); 31175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 31275f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 31375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 31475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 31575f0d3110b04346b901771f96ce15cdbe907278fYang Nistatic android::renderscript::rs_allocation CreateAllocation( 31675f0d3110b04346b901771f96ce15cdbe907278fYang Ni RsType type, RsAllocationMipmapControl mipmaps, uint32_t usages, 31775f0d3110b04346b901771f96ce15cdbe907278fYang Ni void *ptr) { 31875f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 31975f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_allocation obj = {}; 32075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 32175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (type == nullptr) { 32275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_allocation creation error: Invalid type"); 32375f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 32475f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 32575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 32675f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t validUsages = 32775f0d3110b04346b901771f96ce15cdbe907278fYang Ni RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE; 32875f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (usages & ~validUsages) { 32975f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("rs_allocation creation error: Invalid usage flag"); 33075f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 33175f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 33275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 33375f0d3110b04346b901771f96ce15cdbe907278fYang Ni Allocation *alloc = (Allocation *)rsrAllocationCreateTyped( 33475f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc, type, mipmaps, usages, (uintptr_t)ptr); 33575f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (alloc == nullptr) return obj; 33675f0d3110b04346b901771f96ce15cdbe907278fYang Ni alloc->callUpdateCacheObject(rsc, &obj); 33775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 33875f0d3110b04346b901771f96ce15cdbe907278fYang Ni // Any new rsObject created from inside a script should have the usrRefCount 33975f0d3110b04346b901771f96ce15cdbe907278fYang Ni // initialized to 0 and the sysRefCount initialized to 1. 34075f0d3110b04346b901771f96ce15cdbe907278fYang Ni alloc->incSysRef(); 34175f0d3110b04346b901771f96ce15cdbe907278fYang Ni alloc->decUserRef(); 34275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 34375f0d3110b04346b901771f96ce15cdbe907278fYang Ni return obj; 34475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 34575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 34675f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Define rsCreateElement, rsCreateType and rsCreateAllocation entry points 34775f0d3110b04346b901771f96ce15cdbe907278fYang Ni// differently for 32-bit x86 and Mips. The definitions for ARM32 and all 34875f0d3110b04346b901771f96ce15cdbe907278fYang Ni// 64-bit architectures is further below. 34975f0d3110b04346b901771f96ce15cdbe907278fYang Ni#if defined(__i386__) || (defined(__mips__) && __mips == 32) 35075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 35175f0d3110b04346b901771f96ce15cdbe907278fYang Ni// The calling convention for the driver on 32-bit x86 and Mips returns 35275f0d3110b04346b901771f96ce15cdbe907278fYang Ni// rs_element etc. as a stack-return parameter. The Script uses ARM32 calling 35375f0d3110b04346b901771f96ce15cdbe907278fYang Ni// conventions that return the structs in a register. To match this convention, 35475f0d3110b04346b901771f96ce15cdbe907278fYang Ni// emulate the return value using a pointer. 35575f0d3110b04346b901771f96ce15cdbe907278fYang NiElement *rsCreateElement(int32_t dt, int32_t dk, bool isNormalized, 35675f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t vecSize) { 35775f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_element obj = 35875f0d3110b04346b901771f96ce15cdbe907278fYang Ni CreateElement((RsDataType)dt, (RsDataKind)dk, isNormalized, vecSize); 35975f0d3110b04346b901771f96ce15cdbe907278fYang Ni return (Element *)obj.p; 36075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 36175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 36275f0d3110b04346b901771f96ce15cdbe907278fYang NiType *rsCreateType(::rs_element element, uint32_t dimX, uint32_t dimY, 36375f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t dimZ, bool mipmaps, bool faces, 36475f0d3110b04346b901771f96ce15cdbe907278fYang Ni rs_yuv_format yuv_format) { 36575f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_type obj = 36675f0d3110b04346b901771f96ce15cdbe907278fYang Ni CreateType((RsElement)element.p, dimX, dimY, dimZ, mipmaps, faces, 36775f0d3110b04346b901771f96ce15cdbe907278fYang Ni (RsYuvFormat)yuv_format); 36875f0d3110b04346b901771f96ce15cdbe907278fYang Ni return (Type *)obj.p; 36975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 37075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 37175f0d3110b04346b901771f96ce15cdbe907278fYang NiAllocation *rsCreateAllocation(::rs_type type, 37275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rs_allocation_mipmap_control mipmaps, 37375f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t usages, void *ptr) { 37475f0d3110b04346b901771f96ce15cdbe907278fYang Ni android::renderscript::rs_allocation obj; 37575f0d3110b04346b901771f96ce15cdbe907278fYang Ni obj = CreateAllocation((RsType)type.p, (RsAllocationMipmapControl)mipmaps, 37675f0d3110b04346b901771f96ce15cdbe907278fYang Ni usages, ptr); 37775f0d3110b04346b901771f96ce15cdbe907278fYang Ni return (Allocation *)obj.p; 37875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 37975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 38075f0d3110b04346b901771f96ce15cdbe907278fYang Ni#else 38175f0d3110b04346b901771f96ce15cdbe907278fYang Niandroid::renderscript::rs_element rsCreateElement(int32_t dt, int32_t dk, 38275f0d3110b04346b901771f96ce15cdbe907278fYang Ni bool isNormalized, 38375f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t vecSize) { 38475f0d3110b04346b901771f96ce15cdbe907278fYang Ni return CreateElement((RsDataType)dt, (RsDataKind)dk, isNormalized, vecSize); 38575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 38675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 38775f0d3110b04346b901771f96ce15cdbe907278fYang Niandroid::renderscript::rs_type rsCreateType(::rs_element element, uint32_t dimX, 38875f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t dimY, uint32_t dimZ, 38975f0d3110b04346b901771f96ce15cdbe907278fYang Ni bool mipmaps, bool faces, 39075f0d3110b04346b901771f96ce15cdbe907278fYang Ni rs_yuv_format yuv_format) { 39175f0d3110b04346b901771f96ce15cdbe907278fYang Ni return CreateType((RsElement)element.p, dimX, dimY, dimZ, mipmaps, faces, 39275f0d3110b04346b901771f96ce15cdbe907278fYang Ni yuv_format); 39375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 39475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 39575f0d3110b04346b901771f96ce15cdbe907278fYang Niandroid::renderscript::rs_allocation rsCreateAllocation( 39675f0d3110b04346b901771f96ce15cdbe907278fYang Ni ::rs_type type, rs_allocation_mipmap_control mipmaps, uint32_t usages, 39775f0d3110b04346b901771f96ce15cdbe907278fYang Ni void *ptr) { 39875f0d3110b04346b901771f96ce15cdbe907278fYang Ni return CreateAllocation((RsType)type.p, (RsAllocationMipmapControl)mipmaps, 39975f0d3110b04346b901771f96ce15cdbe907278fYang Ni usages, ptr); 40075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 40175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 40275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 40375f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 40475f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Object routines 40575f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 40675f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Add NOLINT to suppress wrong warnings from clang-tidy. 40775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#define IS_CLEAR_SET_OBJ(t) \ 40875f0d3110b04346b901771f96ce15cdbe907278fYang Ni bool rsIsObject(t src) { return src.p != nullptr; } \ 40975f0d3110b04346b901771f96ce15cdbe907278fYang Ni void __attribute__((overloadable)) rsClearObject(t *dst) { /*NOLINT*/ \ 41075f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrClearObject(reinterpret_cast<rs_object_base *>(dst)); \ 41175f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 41275f0d3110b04346b901771f96ce15cdbe907278fYang Ni void __attribute__((overloadable)) rsSetObject(t *dst, t src) { /*NOLINT*/ \ 41375f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); \ 41475f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrSetObject(rsc, reinterpret_cast<rs_object_base *>(dst), \ 41575f0d3110b04346b901771f96ce15cdbe907278fYang Ni (ObjectBase *)src.p); \ 41675f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 41775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 41875f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_element) 41975f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_type) 42075f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_allocation) 42175f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_sampler) 42275f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_script) 42375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 42475f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_mesh) 42575f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_program_fragment) 42675f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_program_vertex) 42775f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_program_raster) 42875f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_program_store) 42975f0d3110b04346b901771f96ce15cdbe907278fYang NiIS_CLEAR_SET_OBJ(::rs_font) 43075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 43175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#undef IS_CLEAR_SET_OBJ 43275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 43375f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 43475f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Element routines 43575f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 43675f0d3110b04346b901771f96ce15cdbe907278fYang Nistatic void *ElementAt(Allocation *a, RsDataType dt, uint32_t vecSize, 43775f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t x, uint32_t y, uint32_t z) { 43875f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 43975f0d3110b04346b901771f96ce15cdbe907278fYang Ni const Type *t = a->getType(); 44075f0d3110b04346b901771f96ce15cdbe907278fYang Ni const Element *e = t->getElement(); 44175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 44275f0d3110b04346b901771f96ce15cdbe907278fYang Ni char buf[256]; 44375f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (x && (x >= t->getLODDimX(0))) { 44475f0d3110b04346b901771f96ce15cdbe907278fYang Ni snprintf(buf, sizeof(buf), "Out range ElementAt X %i of %i", x, 44575f0d3110b04346b901771f96ce15cdbe907278fYang Ni t->getLODDimX(0)); 44675f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 44775f0d3110b04346b901771f96ce15cdbe907278fYang Ni return nullptr; 44875f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 44975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 45075f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (y && (y >= t->getLODDimY(0))) { 45175f0d3110b04346b901771f96ce15cdbe907278fYang Ni snprintf(buf, sizeof(buf), "Out range ElementAt Y %i of %i", y, 45275f0d3110b04346b901771f96ce15cdbe907278fYang Ni t->getLODDimY(0)); 45375f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 45475f0d3110b04346b901771f96ce15cdbe907278fYang Ni return nullptr; 45575f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 45675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 45775f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (z && (z >= t->getLODDimZ(0))) { 45875f0d3110b04346b901771f96ce15cdbe907278fYang Ni snprintf(buf, sizeof(buf), "Out range ElementAt Z %i of %i", z, 45975f0d3110b04346b901771f96ce15cdbe907278fYang Ni t->getLODDimZ(0)); 46075f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 46175f0d3110b04346b901771f96ce15cdbe907278fYang Ni return nullptr; 46275f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 46375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 46475f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (vecSize > 0) { 46575f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (vecSize != e->getVectorSize()) { 46675f0d3110b04346b901771f96ce15cdbe907278fYang Ni snprintf(buf, sizeof(buf), "Vector size mismatch for ElementAt %i of %i", 46775f0d3110b04346b901771f96ce15cdbe907278fYang Ni vecSize, e->getVectorSize()); 46875f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 46975f0d3110b04346b901771f96ce15cdbe907278fYang Ni return nullptr; 47075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 47175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 47275f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (dt != e->getType()) { 47375f0d3110b04346b901771f96ce15cdbe907278fYang Ni snprintf(buf, sizeof(buf), "Data type mismatch for ElementAt %i of %i", 47475f0d3110b04346b901771f96ce15cdbe907278fYang Ni dt, e->getType()); 47575f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 47675f0d3110b04346b901771f96ce15cdbe907278fYang Ni return nullptr; 47775f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 47875f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 47975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 48075f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr; 48175f0d3110b04346b901771f96ce15cdbe907278fYang Ni const uint32_t eSize = e->getSizeBytes(); 48275f0d3110b04346b901771f96ce15cdbe907278fYang Ni const uint32_t stride = a->mHal.drvState.lod[0].stride; 48375f0d3110b04346b901771f96ce15cdbe907278fYang Ni const uint32_t dimY = a->mHal.drvState.lod[0].dimY; 48475f0d3110b04346b901771f96ce15cdbe907278fYang Ni return &p[(x * eSize) + (y * stride) + (z * stride * dimY)]; 48575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 48675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 48775f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, uint32_t y, 48875f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t z) { 48975f0d3110b04346b901771f96ce15cdbe907278fYang Ni const Type *t = const_cast<Allocation *>((Allocation *)a.p)->getType(); 49075f0d3110b04346b901771f96ce15cdbe907278fYang Ni const Element *e = t->getElement(); 49175f0d3110b04346b901771f96ce15cdbe907278fYang Ni void *tmp = ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 49275f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (tmp != nullptr) memcpy(tmp, ptr, e->getSizeBytes()); 49375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 49475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 49575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x, 49675f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t y) { 49775f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsSetElementAt(a, ptr, x, y, 0); 49875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 49975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 50075f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsSetElementAt(::rs_allocation a, const void *ptr, uint32_t x) { 50175f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsSetElementAt(a, ptr, x, 0, 0); 50275f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 50375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 50475f0d3110b04346b901771f96ce15cdbe907278fYang Niconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y, 50575f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t z) { 50675f0d3110b04346b901771f96ce15cdbe907278fYang Ni return ElementAt((Allocation *)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 50775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 50875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 50975f0d3110b04346b901771f96ce15cdbe907278fYang Niconst void *rsGetElementAt(::rs_allocation a, uint32_t x, uint32_t y) { 51075f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsGetElementAt(a, x, y, 0); 51175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 51275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 51375f0d3110b04346b901771f96ce15cdbe907278fYang Niconst void *rsGetElementAt(::rs_allocation a, uint32_t x) { 51475f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsGetElementAt(a, x, 0, 0); 51575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 51675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 51775f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Add NOLINT to suppress wrong warnings from clang-tidy. 51875f0d3110b04346b901771f96ce15cdbe907278fYang Ni#define ELEMENT_AT(T, DT, VS) \ 51975f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, \ 52075f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t y, uint32_t z) { \ 52175f0d3110b04346b901771f96ce15cdbe907278fYang Ni void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \ 52275f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (r != nullptr) \ 52375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ((T *)r)[0] = *val; \ 52475f0d3110b04346b901771f96ce15cdbe907278fYang Ni else \ 52575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 52675f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 52775f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x, \ 52875f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t y) { \ 52975f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsSetElementAt_##T(a, val, x, y, 0); \ 53075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 53175f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsSetElementAt_##T(::rs_allocation a, const T *val, uint32_t x) { \ 53275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsSetElementAt_##T(a, val, x, 0, 0); \ 53375f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 53475f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, uint32_t y, \ 53575f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t z) { /*NOLINT*/ \ 53675f0d3110b04346b901771f96ce15cdbe907278fYang Ni void *r = ElementAt((Allocation *)a.p, DT, VS, x, y, z); \ 53775f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (r != nullptr) \ 53875f0d3110b04346b901771f96ce15cdbe907278fYang Ni *val = ((T *)r)[0]; \ 53975f0d3110b04346b901771f96ce15cdbe907278fYang Ni else \ 54075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 54175f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 54275f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x, \ 54375f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t y) { /*NOLINT*/ \ 54475f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsGetElementAt_##T(a, val, x, y, 0); \ 54575f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 54675f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsGetElementAt_##T(::rs_allocation a, T *val, uint32_t x) { /*NOLINT*/ \ 54775f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsGetElementAt_##T(a, val, x, 0, 0); \ 54875f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 54975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 55075f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(char, RS_TYPE_SIGNED_8, 1) 55175f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(char2, RS_TYPE_SIGNED_8, 2) 55275f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(char3, RS_TYPE_SIGNED_8, 3) 55375f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(char4, RS_TYPE_SIGNED_8, 4) 55475f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uchar, RS_TYPE_UNSIGNED_8, 1) 55575f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uchar2, RS_TYPE_UNSIGNED_8, 2) 55675f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uchar3, RS_TYPE_UNSIGNED_8, 3) 55775f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uchar4, RS_TYPE_UNSIGNED_8, 4) 55875f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(short, RS_TYPE_SIGNED_16, 1) 55975f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(short2, RS_TYPE_SIGNED_16, 2) 56075f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(short3, RS_TYPE_SIGNED_16, 3) 56175f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(short4, RS_TYPE_SIGNED_16, 4) 56275f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ushort, RS_TYPE_UNSIGNED_16, 1) 56375f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ushort2, RS_TYPE_UNSIGNED_16, 2) 56475f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ushort3, RS_TYPE_UNSIGNED_16, 3) 56575f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ushort4, RS_TYPE_UNSIGNED_16, 4) 56675f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(int, RS_TYPE_SIGNED_32, 1) 56775f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(int2, RS_TYPE_SIGNED_32, 2) 56875f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(int3, RS_TYPE_SIGNED_32, 3) 56975f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(int4, RS_TYPE_SIGNED_32, 4) 57075f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uint, RS_TYPE_UNSIGNED_32, 1) 57175f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uint2, RS_TYPE_UNSIGNED_32, 2) 57275f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uint3, RS_TYPE_UNSIGNED_32, 3) 57375f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(uint4, RS_TYPE_UNSIGNED_32, 4) 57475f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(long, RS_TYPE_SIGNED_64, 1) 57575f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(long2, RS_TYPE_SIGNED_64, 2) 57675f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(long3, RS_TYPE_SIGNED_64, 3) 57775f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(long4, RS_TYPE_SIGNED_64, 4) 57875f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ulong, RS_TYPE_UNSIGNED_64, 1) 57975f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ulong2, RS_TYPE_UNSIGNED_64, 2) 58075f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ulong3, RS_TYPE_UNSIGNED_64, 3) 58175f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(ulong4, RS_TYPE_UNSIGNED_64, 4) 58275f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(half, RS_TYPE_FLOAT_16, 1) 58375f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(half2, RS_TYPE_FLOAT_16, 2) 58475f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(half3, RS_TYPE_FLOAT_16, 3) 58575f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(half4, RS_TYPE_FLOAT_16, 4) 58675f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(float, RS_TYPE_FLOAT_32, 1) 58775f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(float2, RS_TYPE_FLOAT_32, 2) 58875f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(float3, RS_TYPE_FLOAT_32, 3) 58975f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(float4, RS_TYPE_FLOAT_32, 4) 59075f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(double, RS_TYPE_FLOAT_64, 1) 59175f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(double2, RS_TYPE_FLOAT_64, 2) 59275f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(double3, RS_TYPE_FLOAT_64, 3) 59375f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT(double4, RS_TYPE_FLOAT_64, 4) 59475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 59575f0d3110b04346b901771f96ce15cdbe907278fYang Ni#undef ELEMENT_AT 59675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 59775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef __LP64__ 59875f0d3110b04346b901771f96ce15cdbe907278fYang Ni/* 59975f0d3110b04346b901771f96ce15cdbe907278fYang Ni * We miss some symbols for rs{Get,Set}Element_long,ulong variants because 64 60075f0d3110b04346b901771f96ce15cdbe907278fYang Ni * bit integer values are 'long' in RS-land but might be 'long long' in the 60175f0d3110b04346b901771f96ce15cdbe907278fYang Ni * driver. Define native_long* and native_ulong* types to be vectors of 60275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * 'long' as seen by the driver and define overloaded versions of 60375f0d3110b04346b901771f96ce15cdbe907278fYang Ni * rsSetElementAt_* and rsGetElementAt_*. This should get us the correct 60475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * mangled names in the driver. 60575f0d3110b04346b901771f96ce15cdbe907278fYang Ni */ 60675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 60775f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef long native_long2 __attribute__((ext_vector_type(2))); 60875f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef long native_long3 __attribute__((ext_vector_type(3))); 60975f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef long native_long4 __attribute__((ext_vector_type(4))); 61075f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned long native_ulong2 __attribute__((ext_vector_type(2))); 61175f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned long native_ulong3 __attribute__((ext_vector_type(3))); 61275f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned long native_ulong4 __attribute__((ext_vector_type(4))); 61375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 61475f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Add NOLINT to suppress wrong warnings from clang-tidy. 61575f0d3110b04346b901771f96ce15cdbe907278fYang Ni#define ELEMENT_AT_OVERLOADS(T, U) \ 61675f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, \ 61775f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t y, uint32_t z) { \ 61875f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsSetElementAt_##T(a, (T *)val, x, y, z); \ 61975f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 62075f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x, \ 62175f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t y) { \ 62275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsSetElementAt_##T(a, (T *)val, x, y, 0); \ 62375f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 62475f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsSetElementAt_##T(::rs_allocation a, const U *val, uint32_t x) { \ 62575f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsSetElementAt_##T(a, (T *)val, x, 0, 0); \ 62675f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 62775f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, uint32_t y, \ 62875f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t z) { /*NOLINT*/ \ 62975f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsGetElementAt_##T(a, (T *)val, x, y, z); \ 63075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 63175f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x, \ 63275f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint32_t y) { /*NOLINT*/ \ 63375f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsGetElementAt_##T(a, (T *)val, x, y, 0); \ 63475f0d3110b04346b901771f96ce15cdbe907278fYang Ni } \ 63575f0d3110b04346b901771f96ce15cdbe907278fYang Ni void rsGetElementAt_##T(::rs_allocation a, U *val, uint32_t x) { /*NOLINT*/ \ 63675f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsGetElementAt_##T(a, (T *)val, x, 0, 0); \ 63775f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 63875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 63975f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(long2, native_long2) 64075f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(long3, native_long3) 64175f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(long4, native_long4) 64275f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(ulong, unsigned long) 64375f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(ulong2, native_ulong2) 64475f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(ulong3, native_ulong3) 64575f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(ulong4, native_ulong4) 64675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 64775f0d3110b04346b901771f96ce15cdbe907278fYang Ni// We also need variants of rs{Get,Set}ElementAt_long that take 'long long *' as 64875f0d3110b04346b901771f96ce15cdbe907278fYang Ni// we might have this overloaded variant in old APKs. 64975f0d3110b04346b901771f96ce15cdbe907278fYang NiELEMENT_AT_OVERLOADS(long, long long) 65075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 65175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#undef ELEMENT_AT_OVERLOADS 65275f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 65375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 65475f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 65575f0d3110b04346b901771f96ce15cdbe907278fYang Ni// ForEach routines 65675f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 65775f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsForEachInternal(int slot, rs_script_call *options, int hasOutput, 65875f0d3110b04346b901771f96ce15cdbe907278fYang Ni int numInputs, ::rs_allocation *allocs) { 65975f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 66075f0d3110b04346b901771f96ce15cdbe907278fYang Ni Script *s = const_cast<Script *>(RsdCpuReference::getTlsScript()); 66175f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (numInputs > RS_KERNEL_MAX_ARGUMENTS) { 66275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsc->setError(RS_ERROR_BAD_SCRIPT, 66375f0d3110b04346b901771f96ce15cdbe907278fYang Ni "rsForEachInternal: too many inputs to a kernel."); 66475f0d3110b04346b901771f96ce15cdbe907278fYang Ni return; 66575f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 66675f0d3110b04346b901771f96ce15cdbe907278fYang Ni Allocation *inputs[RS_KERNEL_MAX_ARGUMENTS]; 66775f0d3110b04346b901771f96ce15cdbe907278fYang Ni for (int i = 0; i < numInputs; i++) { 66875f0d3110b04346b901771f96ce15cdbe907278fYang Ni inputs[i] = (Allocation *)allocs[i].p; 66975f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 67075f0d3110b04346b901771f96ce15cdbe907278fYang Ni Allocation *out = hasOutput ? (Allocation *)allocs[numInputs].p : nullptr; 67175f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrForEach(rsc, s, slot, numInputs, numInputs > 0 ? inputs : nullptr, out, 67275f0d3110b04346b901771f96ce15cdbe907278fYang Ni nullptr, 0, (RsScriptCall *)options); 67375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 67475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 67575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) 67675f0d3110b04346b901771f96ce15cdbe907278fYang NirsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out, 67775f0d3110b04346b901771f96ce15cdbe907278fYang Ni const void *usr, const rs_script_call *call) { 67875f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 67975f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 68075f0d3110b04346b901771f96ce15cdbe907278fYang Ni (Allocation *)out.p, usr, 0, (RsScriptCall *)call); 68175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 68275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 68375f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) 68475f0d3110b04346b901771f96ce15cdbe907278fYang NirsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out, 68575f0d3110b04346b901771f96ce15cdbe907278fYang Ni const void *usr) { 68675f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 68775f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 68875f0d3110b04346b901771f96ce15cdbe907278fYang Ni (Allocation *)out.p, usr, 0, nullptr); 68975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 69075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 69175f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) 69275f0d3110b04346b901771f96ce15cdbe907278fYang NirsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out) { 69375f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 69475f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 69575f0d3110b04346b901771f96ce15cdbe907278fYang Ni (Allocation *)out.p, nullptr, 0, nullptr); 69675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 69775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 69875f0d3110b04346b901771f96ce15cdbe907278fYang Ni// These functions are only supported in 32-bit. 69975f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef __LP64__ 70075f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) 70175f0d3110b04346b901771f96ce15cdbe907278fYang NirsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out, 70275f0d3110b04346b901771f96ce15cdbe907278fYang Ni const void *usr, uint32_t usrLen) { 70375f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 70475f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 70575f0d3110b04346b901771f96ce15cdbe907278fYang Ni (Allocation *)out.p, usr, usrLen, nullptr); 70675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 70775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 70875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid __attribute__((overloadable)) 70975f0d3110b04346b901771f96ce15cdbe907278fYang NirsForEach(::rs_script script, ::rs_allocation in, ::rs_allocation out, 71075f0d3110b04346b901771f96ce15cdbe907278fYang Ni const void *usr, uint32_t usrLen, const rs_script_call *call) { 71175f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 71275f0d3110b04346b901771f96ce15cdbe907278fYang Ni rsrForEach(rsc, (Script *)script.p, 0, 1, (Allocation **)&in.p, 71375f0d3110b04346b901771f96ce15cdbe907278fYang Ni (Allocation *)out.p, usr, usrLen, (RsScriptCall *)call); 71475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 71575f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 71675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 71775f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 71875f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Message routines 71975f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 72075f0d3110b04346b901771f96ce15cdbe907278fYang Niuint32_t rsSendToClient(int cmdID) { 72175f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 72275f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrToClient(rsc, cmdID, (const void *)nullptr, 0); 72375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 72475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 72575f0d3110b04346b901771f96ce15cdbe907278fYang Niuint32_t rsSendToClient(int cmdID, const void *data, uint32_t len) { 72675f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 72775f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrToClient(rsc, cmdID, data, len); 72875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 72975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 73075f0d3110b04346b901771f96ce15cdbe907278fYang Niuint32_t rsSendToClientBlocking(int cmdID) { 73175f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 73275f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrToClientBlocking(rsc, cmdID, (const void *)nullptr, 0); 73375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 73475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 73575f0d3110b04346b901771f96ce15cdbe907278fYang Niuint32_t rsSendToClientBlocking(int cmdID, const void *data, uint32_t len) { 73675f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 73775f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrToClientBlocking(rsc, cmdID, data, len); 73875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 73975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 74075f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 74175f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Time routines 74275f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 74375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 74475f0d3110b04346b901771f96ce15cdbe907278fYang Ni// time_t is int in 32-bit RenderScript. time_t is long in bionic. rsTime and 74575f0d3110b04346b901771f96ce15cdbe907278fYang Ni// rsLocaltime are set to explicitly take 'const int *' so we generate the 74675f0d3110b04346b901771f96ce15cdbe907278fYang Ni// correct mangled names. 74775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef __LP64__ 74875f0d3110b04346b901771f96ce15cdbe907278fYang Niint rsTime(int *timer) { 74975f0d3110b04346b901771f96ce15cdbe907278fYang Ni#else 75075f0d3110b04346b901771f96ce15cdbe907278fYang Nitime_t rsTime(time_t *timer) { 75175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 75275f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 75375f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrTime(rsc, (time_t *)timer); 75475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 75575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 75675f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef __LP64__ 75775f0d3110b04346b901771f96ce15cdbe907278fYang Nirs_tm *rsLocaltime(rs_tm *local, const int *timer) { 75875f0d3110b04346b901771f96ce15cdbe907278fYang Ni#else 75975f0d3110b04346b901771f96ce15cdbe907278fYang Nirs_tm *rsLocaltime(rs_tm *local, const time_t *timer) { 76075f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 76175f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 76275f0d3110b04346b901771f96ce15cdbe907278fYang Ni return (rs_tm *)rsrLocalTime(rsc, (tm *)local, (time_t *)timer); 76375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 76475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 76575f0d3110b04346b901771f96ce15cdbe907278fYang Niint64_t rsUptimeMillis() { 76675f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 76775f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrUptimeMillis(rsc); 76875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 76975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 77075f0d3110b04346b901771f96ce15cdbe907278fYang Niint64_t rsUptimeNanos() { 77175f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 77275f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrUptimeNanos(rsc); 77375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 77475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 77575f0d3110b04346b901771f96ce15cdbe907278fYang Nifloat rsGetDt() { 77675f0d3110b04346b901771f96ce15cdbe907278fYang Ni Context *rsc = RsdCpuReference::getTlsContext(); 77775f0d3110b04346b901771f96ce15cdbe907278fYang Ni const Script *sc = RsdCpuReference::getTlsScript(); 77875f0d3110b04346b901771f96ce15cdbe907278fYang Ni return rsrGetDt(rsc, sc); 77975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 78075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 78175f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 78275f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Debug routines 78375f0d3110b04346b901771f96ce15cdbe907278fYang Ni////////////////////////////////////////////////////////////////////////////// 78475f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, float f) { 78575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, 0x%08x", s, f, *((int *)(&f))); 78675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 78775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 78875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, float f1, float f2) { 78975f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f}", s, f1, f2); 79075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 79175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 79275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, float f1, float f2, float f3) { 79375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f}", s, f1, f2, f3); 79475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 79575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 79675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, float f1, float f2, float f3, float f4) { 79775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4); 79875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 79975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 80075f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const float2 *f2) { 80175f0d3110b04346b901771f96ce15cdbe907278fYang Ni float2 f = *f2; 80275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f}", s, f.x, f.y); 80375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 80475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 80575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const float3 *f3) { 80675f0d3110b04346b901771f96ce15cdbe907278fYang Ni float3 f = *f3; 80775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z); 80875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 80975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 81075f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const float4 *f4) { 81175f0d3110b04346b901771f96ce15cdbe907278fYang Ni float4 f = *f4; 81275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w); 81375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 81475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 81575f0d3110b04346b901771f96ce15cdbe907278fYang Ni// Accept a half value converted to float. This eliminates the need in the 81675f0d3110b04346b901771f96ce15cdbe907278fYang Ni// driver to properly support the half datatype (either by adding compiler flags 81775f0d3110b04346b901771f96ce15cdbe907278fYang Ni// for half or link against compiler_rt). 81875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, float f, ushort us) { 81975f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f} {0x%hx}", s, f, us); 82075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 82175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 82275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const float2 *f2, const ushort2 *us2) { 82375f0d3110b04346b901771f96ce15cdbe907278fYang Ni float2 f = *f2; 82475f0d3110b04346b901771f96ce15cdbe907278fYang Ni ushort2 us = *us2; 82575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f %f} {0x%hx 0x%hx}", s, f.x, f.y, us.x, us.y); 82675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 82775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 82875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const float3 *f3, const ushort3 *us3) { 82975f0d3110b04346b901771f96ce15cdbe907278fYang Ni float3 f = *f3; 83075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ushort3 us = *us3; 83175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f %f %f} {0x%hx 0x%hx 0x%hx}", s, f.x, f.y, f.z, us.x, us.y, 83275f0d3110b04346b901771f96ce15cdbe907278fYang Ni us.z); 83375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 83475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 83575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const float4 *f4, const ushort4 *us4) { 83675f0d3110b04346b901771f96ce15cdbe907278fYang Ni float4 f = *f4; 83775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ushort4 us = *us4; 83875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f %f %f %f} {0x%hx 0x%hx 0x%hx 0x%hx}", s, f.x, f.y, f.z, f.w, 83975f0d3110b04346b901771f96ce15cdbe907278fYang Ni us.x, us.y, us.z, us.w); 84075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 84175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 84275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, double d) { 84375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, 0x%08llx", s, d, *((long long *)(&d))); 84475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 84575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 84675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const double2 *d2) { 84775f0d3110b04346b901771f96ce15cdbe907278fYang Ni double2 d = *d2; 84875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f}", s, d.x, d.y); 84975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 85075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 85175f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const double3 *d3) { 85275f0d3110b04346b901771f96ce15cdbe907278fYang Ni double3 d = *d3; 85375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f}", s, d.x, d.y, d.z); 85475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 85575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 85675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const double4 *d4) { 85775f0d3110b04346b901771f96ce15cdbe907278fYang Ni double4 d = *d4; 85875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f, %f}", s, d.x, d.y, d.z, d.w); 85975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 86075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 86175f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const rs_matrix4x4 *m) { 86275f0d3110b04346b901771f96ce15cdbe907278fYang Ni float *f = (float *)m; 86375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]); 86475f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]); 86575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]); 86675f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]); 86775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 86875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 86975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const rs_matrix3x3 *m) { 87075f0d3110b04346b901771f96ce15cdbe907278fYang Ni float *f = (float *)m; 87175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]); 87275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, %f, %f", s, f[1], f[4], f[7]); 87375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, %f, %f}", s, f[2], f[5], f[8]); 87475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 87575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 87675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const rs_matrix2x2 *m) { 87775f0d3110b04346b901771f96ce15cdbe907278fYang Ni float *f = (float *)m; 87875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%f, %f", s, f[0], f[2]); 87975f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %f, %f}", s, f[1], f[3]); 88075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 88175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 88275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, char c) { 88375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %hhd 0x%hhx", s, c, (unsigned char)c); 88475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 88575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 88675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const char2 *c2) { 88775f0d3110b04346b901771f96ce15cdbe907278fYang Ni char2 c = *c2; 88875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hhd, %hhd} 0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, 88975f0d3110b04346b901771f96ce15cdbe907278fYang Ni (unsigned char)c.y); 89075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 89175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 89275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const char3 *c3) { 89375f0d3110b04346b901771f96ce15cdbe907278fYang Ni char3 c = *c3; 89475f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hhd, %hhd, %hhd} 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, 89575f0d3110b04346b901771f96ce15cdbe907278fYang Ni (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z); 89675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 89775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 89875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const char4 *c4) { 89975f0d3110b04346b901771f96ce15cdbe907278fYang Ni char4 c = *c4; 90075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hhd, %hhd, %hhd, %hhd} 0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, 90175f0d3110b04346b901771f96ce15cdbe907278fYang Ni c.z, c.w, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z, 90275f0d3110b04346b901771f96ce15cdbe907278fYang Ni (unsigned char)c.w); 90375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 90475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 90575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, unsigned char c) { 90675f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %hhu 0x%hhx", s, c, c); 90775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 90875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 90975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const uchar2 *c2) { 91075f0d3110b04346b901771f96ce15cdbe907278fYang Ni uchar2 c = *c2; 91175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hhu, %hhu} 0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y); 91275f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 91375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 91475f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const uchar3 *c3) { 91575f0d3110b04346b901771f96ce15cdbe907278fYang Ni uchar3 c = *c3; 91675f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hhu, %hhu, %hhu} 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.x, 91775f0d3110b04346b901771f96ce15cdbe907278fYang Ni c.y, c.z); 91875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 91975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 92075f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const uchar4 *c4) { 92175f0d3110b04346b901771f96ce15cdbe907278fYang Ni uchar4 c = *c4; 92275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hhu, %hhu, %hhu, %hhu} 0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, 92375f0d3110b04346b901771f96ce15cdbe907278fYang Ni c.z, c.w, c.x, c.y, c.z, c.w); 92475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 92575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 92675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, short c) { ALOGD("%s %hd 0x%hx", s, c, c); } 92775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 92875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const short2 *c2) { 92975f0d3110b04346b901771f96ce15cdbe907278fYang Ni short2 c = *c2; 93075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hd, %hd} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 93175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 93275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 93375f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const short3 *c3) { 93475f0d3110b04346b901771f96ce15cdbe907278fYang Ni short3 c = *c3; 93575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hd, %hd, %hd} 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, 93675f0d3110b04346b901771f96ce15cdbe907278fYang Ni c.z); 93775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 93875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 93975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const short4 *c4) { 94075f0d3110b04346b901771f96ce15cdbe907278fYang Ni short4 c = *c4; 94175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hd, %hd, %hd, %hd} 0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, 94275f0d3110b04346b901771f96ce15cdbe907278fYang Ni c.w, c.x, c.y, c.z, c.w); 94375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 94475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 94575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, unsigned short c) { 94675f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %hu 0x%hx", s, c, c); 94775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 94875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 94975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ushort2 *c2) { 95075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ushort2 c = *c2; 95175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hu, %hu} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 95275f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 95375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 95475f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ushort3 *c3) { 95575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ushort3 c = *c3; 95675f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hu, %hu, %hu} 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, 95775f0d3110b04346b901771f96ce15cdbe907278fYang Ni c.z); 95875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 95975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 96075f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ushort4 *c4) { 96175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ushort4 c = *c4; 96275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%hu, %hu, %hu, %hu} 0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, 96375f0d3110b04346b901771f96ce15cdbe907278fYang Ni c.w, c.x, c.y, c.z, c.w); 96475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 96575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 96675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, int i) { ALOGD("%s %d 0x%x", s, i, i); } 96775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 96875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const int2 *i2) { 96975f0d3110b04346b901771f96ce15cdbe907278fYang Ni int2 i = *i2; 97075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%d, %d} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 97175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 97275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 97375f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const int3 *i3) { 97475f0d3110b04346b901771f96ce15cdbe907278fYang Ni int3 i = *i3; 97575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%d, %d, %d} 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z); 97675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 97775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 97875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const int4 *i4) { 97975f0d3110b04346b901771f96ce15cdbe907278fYang Ni int4 i = *i4; 98075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 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, 98175f0d3110b04346b901771f96ce15cdbe907278fYang Ni i.y, i.z, i.w); 98275f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 98375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 98475f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, unsigned int i) { ALOGD("%s %u 0x%x", s, i, i); } 98575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 98675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const uint2 *i2) { 98775f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint2 i = *i2; 98875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%u, %u} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 98975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 99075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 99175f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const uint3 *i3) { 99275f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint3 i = *i3; 99375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%u, %u, %u} 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z); 99475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 99575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 99675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const uint4 *i4) { 99775f0d3110b04346b901771f96ce15cdbe907278fYang Ni uint4 i = *i4; 99875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 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, 99975f0d3110b04346b901771f96ce15cdbe907278fYang Ni i.y, i.z, i.w); 100075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 100175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 100275f0d3110b04346b901771f96ce15cdbe907278fYang Nitemplate <typename T> 100375f0d3110b04346b901771f96ce15cdbe907278fYang Nistatic inline long long LL(const T &x) { 100475f0d3110b04346b901771f96ce15cdbe907278fYang Ni return static_cast<long long>(x); 100575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 100675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 100775f0d3110b04346b901771f96ce15cdbe907278fYang Nitemplate <typename T> 100875f0d3110b04346b901771f96ce15cdbe907278fYang Nistatic inline unsigned long long LLu(const T &x) { 100975f0d3110b04346b901771f96ce15cdbe907278fYang Ni return static_cast<unsigned long long>(x); 101075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 101175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 101275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, long l) { 101375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %lld 0x%llx", s, LL(l), LL(l)); 101475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 101575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 101675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, long long ll) { 101775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %lld 0x%llx", s, LL(ll), LL(ll)); 101875f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 101975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 102075f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const long2 *c) { 102175f0d3110b04346b901771f96ce15cdbe907278fYang Ni long2 ll = *c; 102275f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), 102375f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.y)); 102475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 102575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 102675f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const long3 *c) { 102775f0d3110b04346b901771f96ce15cdbe907278fYang Ni long3 ll = *c; 102875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld, %lld} 0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), 102975f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z)); 103075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 103175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 103275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const long4 *c) { 103375f0d3110b04346b901771f96ce15cdbe907278fYang Ni long4 ll = *c; 103475f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld, %lld, %lld} 0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x), 103575f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w)); 103675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 103775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 103875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, unsigned long l) { 103975f0d3110b04346b901771f96ce15cdbe907278fYang Ni unsigned long long ll = l; 104075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %llu 0x%llx", s, ll, ll); 104175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 104275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 104375f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, unsigned long long ll) { 104475f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s %llu 0x%llx", s, ll, ll); 104575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 104675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 104775f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ulong2 *c) { 104875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ulong2 ll = *c; 104975f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), 105075f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.y)); 105175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 105275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 105375f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ulong3 *c) { 105475f0d3110b04346b901771f96ce15cdbe907278fYang Ni ulong3 ll = *c; 105575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu, %llu} 0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), 105675f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z)); 105775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 105875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 105975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ulong4 *c) { 106075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ulong4 ll = *c; 106175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu, %llu, %llu} 0x%llx 0x%llx 0x%llx 0x%llx", s, 106275f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y), 106375f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.z), LLu(ll.w)); 106475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 106575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 106675f0d3110b04346b901771f96ce15cdbe907278fYang Ni// FIXME: We need to export these function signatures for the compatibility 106775f0d3110b04346b901771f96ce15cdbe907278fYang Ni// library. The C++ name mangling that LLVM uses for ext_vector_type requires 106875f0d3110b04346b901771f96ce15cdbe907278fYang Ni// different versions for "long" vs. "long long". Note that the called 106975f0d3110b04346b901771f96ce15cdbe907278fYang Ni// functions are still using the appropriate 64-bit sizes. 107075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 107175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef __LP64__ 107275f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef long l2 __attribute__((ext_vector_type(2))); 107375f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef long l3 __attribute__((ext_vector_type(3))); 107475f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef long l4 __attribute__((ext_vector_type(4))); 107575f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned long ul2 __attribute__((ext_vector_type(2))); 107675f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned long ul3 __attribute__((ext_vector_type(3))); 107775f0d3110b04346b901771f96ce15cdbe907278fYang Nitypedef unsigned long ul4 __attribute__((ext_vector_type(4))); 107875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 107975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const l2 *c) { 108075f0d3110b04346b901771f96ce15cdbe907278fYang Ni long2 ll = *(const long2 *)c; 108175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), 108275f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.y)); 108375f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 108475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 108575f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const l3 *c) { 108675f0d3110b04346b901771f96ce15cdbe907278fYang Ni long3 ll = *(const long3 *)c; 108775f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld, %lld} 0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), 108875f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z)); 108975f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 109075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 109175f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const l4 *c) { 109275f0d3110b04346b901771f96ce15cdbe907278fYang Ni long4 ll = *(const long4 *)c; 109375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld, %lld, %lld} 0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x), 109475f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w)); 109575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 109675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 109775f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ul2 *c) { 109875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ulong2 ll = *(const ulong2 *)c; 109975f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), 110075f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.y)); 110175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 110275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 110375f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ul3 *c) { 110475f0d3110b04346b901771f96ce15cdbe907278fYang Ni ulong3 ll = *(const ulong3 *)c; 110575f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu, %llu} 0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), 110675f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z)); 110775f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 110875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 110975f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ul4 *c) { 111075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ulong4 ll = *(const ulong4 *)c; 111175f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu, %llu, %llu} 0x%llx 0x%llx 0x%llx 0x%llx", s, 111275f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y), 111375f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.z), LLu(ll.w)); 111475f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 111575f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif 111675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 111775f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const long2 ll) { 111875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), LL(ll.x), 111975f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.y)); 112075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 112175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 112275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const long3 ll) { 112375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld, %lld} 0x%llx 0x%llx 0x%llx", s, LL(ll.x), LL(ll.y), 112475f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.z), LL(ll.x), LL(ll.y), LL(ll.z)); 112575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 112675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 112775f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const long4 ll) { 112875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%lld, %lld, %lld, %lld} 0x%llx 0x%llx 0x%llx 0x%llx", s, LL(ll.x), 112975f0d3110b04346b901771f96ce15cdbe907278fYang Ni LL(ll.y), LL(ll.z), LL(ll.w), LL(ll.x), LL(ll.y), LL(ll.z), LL(ll.w)); 113075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 113175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 113275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ulong2 ll) { 113375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), LLu(ll.x), 113475f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.y)); 113575f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 113675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 113775f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ulong3 ll) { 113875f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu, %llu} 0x%llx 0x%llx 0x%llx", s, LLu(ll.x), LLu(ll.y), 113975f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.z), LLu(ll.x), LLu(ll.y), LLu(ll.z)); 114075f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 114175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 114275f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const ulong4 ll) { 114375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ALOGD("%s {%llu, %llu, %llu, %llu} 0x%llx 0x%llx 0x%llx 0x%llx", s, 114475f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.x), LLu(ll.y), LLu(ll.z), LLu(ll.w), LLu(ll.x), LLu(ll.y), 114575f0d3110b04346b901771f96ce15cdbe907278fYang Ni LLu(ll.z), LLu(ll.w)); 114675f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 114775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 114875f0d3110b04346b901771f96ce15cdbe907278fYang Nivoid rsDebug(const char *s, const void *p) { ALOGD("%s %p", s, p); } 1149