rsdRuntimeStubs.cpp revision d8b8f8a16415496acc9844a89599ce7f377bd04d
1/* 2 * Copyright (C) 2011-2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "rsContext.h" 18#include "rsScriptC.h" 19#include "rsMatrix4x4.h" 20#include "rsMatrix3x3.h" 21#include "rsMatrix2x2.h" 22#include "rsRuntime.h" 23 24#include "rsdCore.h" 25#include "rsdBcc.h" 26 27#include "rsdPath.h" 28#include "rsdAllocation.h" 29#include "rsdShaderCache.h" 30#include "rsdVertexArray.h" 31 32#include <time.h> 33 34using namespace android; 35using namespace android::renderscript; 36 37typedef float float2 __attribute__((ext_vector_type(2))); 38typedef float float3 __attribute__((ext_vector_type(3))); 39typedef float float4 __attribute__((ext_vector_type(4))); 40typedef double double2 __attribute__((ext_vector_type(2))); 41typedef double double3 __attribute__((ext_vector_type(3))); 42typedef double double4 __attribute__((ext_vector_type(4))); 43typedef char char2 __attribute__((ext_vector_type(2))); 44typedef char char3 __attribute__((ext_vector_type(3))); 45typedef char char4 __attribute__((ext_vector_type(4))); 46typedef unsigned char uchar2 __attribute__((ext_vector_type(2))); 47typedef unsigned char uchar3 __attribute__((ext_vector_type(3))); 48typedef unsigned char uchar4 __attribute__((ext_vector_type(4))); 49typedef int16_t short2 __attribute__((ext_vector_type(2))); 50typedef int16_t short3 __attribute__((ext_vector_type(3))); 51typedef int16_t short4 __attribute__((ext_vector_type(4))); 52typedef uint16_t ushort2 __attribute__((ext_vector_type(2))); 53typedef uint16_t ushort3 __attribute__((ext_vector_type(3))); 54typedef uint16_t ushort4 __attribute__((ext_vector_type(4))); 55typedef int32_t int2 __attribute__((ext_vector_type(2))); 56typedef int32_t int3 __attribute__((ext_vector_type(3))); 57typedef int32_t int4 __attribute__((ext_vector_type(4))); 58typedef uint32_t uint2 __attribute__((ext_vector_type(2))); 59typedef uint32_t uint3 __attribute__((ext_vector_type(3))); 60typedef uint32_t uint4 __attribute__((ext_vector_type(4))); 61typedef int64_t long2 __attribute__((ext_vector_type(2))); 62typedef int64_t long3 __attribute__((ext_vector_type(3))); 63typedef int64_t long4 __attribute__((ext_vector_type(4))); 64typedef uint64_t ulong2 __attribute__((ext_vector_type(2))); 65typedef uint64_t ulong3 __attribute__((ext_vector_type(3))); 66typedef uint64_t ulong4 __attribute__((ext_vector_type(4))); 67 68typedef uint8_t uchar; 69typedef uint16_t ushort; 70typedef uint32_t uint; 71#ifndef RS_SERVER 72typedef uint64_t ulong; 73#endif 74 75#ifdef RS_COMPATIBILITY_LIB 76#define OPAQUETYPE(t) \ 77 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) t; 78 79OPAQUETYPE(rs_element) 80OPAQUETYPE(rs_type) 81OPAQUETYPE(rs_allocation) 82OPAQUETYPE(rs_sampler) 83OPAQUETYPE(rs_script) 84OPAQUETYPE(rs_script_call) 85#undef OPAQUETYPE 86 87typedef enum { 88 // Empty to avoid conflicting definitions with RsAllocationCubemapFace 89} rs_allocation_cubemap_face; 90 91typedef struct { 92 int tm_sec; ///< seconds 93 int tm_min; ///< minutes 94 int tm_hour; ///< hours 95 int tm_mday; ///< day of the month 96 int tm_mon; ///< month 97 int tm_year; ///< year 98 int tm_wday; ///< day of the week 99 int tm_yday; ///< day of the year 100 int tm_isdst; ///< daylight savings time 101} rs_tm; 102#endif 103 104////////////////////////////////////////////////////////////////////////////// 105// Allocation 106////////////////////////////////////////////////////////////////////////////// 107 108 109static void SC_AllocationSyncAll2(android::renderscript::rs_allocation a, RsAllocationUsageType source) { 110 Context *rsc = RsdCpuReference::getTlsContext(); 111 rsrAllocationSyncAll(rsc, (Allocation*)a.p, source); 112} 113 114static void SC_AllocationSyncAll(android::renderscript::rs_allocation a) { 115 Context *rsc = RsdCpuReference::getTlsContext(); 116 rsrAllocationSyncAll(rsc, (Allocation*)a.p, RS_ALLOCATION_USAGE_SCRIPT); 117} 118 119#ifndef RS_COMPATIBILITY_LIB 120 121static void SC_AllocationCopy1DRange(android::renderscript::rs_allocation dstAlloc, 122 uint32_t dstOff, 123 uint32_t dstMip, 124 uint32_t count, 125 android::renderscript::rs_allocation srcAlloc, 126 uint32_t srcOff, uint32_t srcMip) { 127 Context *rsc = RsdCpuReference::getTlsContext(); 128 rsrAllocationCopy1DRange(rsc, (Allocation*)dstAlloc.p, dstOff, dstMip, count, 129 (Allocation*)srcAlloc.p, srcOff, srcMip); 130} 131 132static void SC_AllocationCopy2DRange(android::renderscript::rs_allocation dstAlloc, 133 uint32_t dstXoff, uint32_t dstYoff, 134 uint32_t dstMip, uint32_t dstFace, 135 uint32_t width, uint32_t height, 136 android::renderscript::rs_allocation srcAlloc, 137 uint32_t srcXoff, uint32_t srcYoff, 138 uint32_t srcMip, uint32_t srcFace) { 139 Context *rsc = RsdCpuReference::getTlsContext(); 140 rsrAllocationCopy2DRange(rsc, (Allocation*)dstAlloc.p, 141 dstXoff, dstYoff, dstMip, dstFace, 142 width, height, 143 (Allocation*)srcAlloc.p, 144 srcXoff, srcYoff, srcMip, srcFace); 145} 146 147static void SC_AllocationIoSend(android::renderscript::rs_allocation alloc) { 148 Context *rsc = RsdCpuReference::getTlsContext(); 149 rsrAllocationIoSend(rsc, (Allocation*)alloc.p); 150} 151 152 153static void SC_AllocationIoReceive(android::renderscript::rs_allocation alloc) { 154 Context *rsc = RsdCpuReference::getTlsContext(); 155 rsrAllocationIoReceive(rsc, (Allocation*)alloc.p); 156} 157 158#else 159 160static void SC_AllocationCopy1DRange(::rs_allocation dstAlloc, 161 uint32_t dstOff, 162 uint32_t dstMip, 163 uint32_t count, 164 ::rs_allocation srcAlloc, 165 uint32_t srcOff, uint32_t srcMip) { 166 Context *rsc = RsdCpuReference::getTlsContext(); 167 rsrAllocationCopy1DRange(rsc, (Allocation*)dstAlloc.p, dstOff, dstMip, count, 168 (Allocation*)srcAlloc.p, srcOff, srcMip); 169} 170 171static void SC_AllocationCopy2DRange(::rs_allocation dstAlloc, 172 uint32_t dstXoff, uint32_t dstYoff, 173 uint32_t dstMip, uint32_t dstFace, 174 uint32_t width, uint32_t height, 175 ::rs_allocation srcAlloc, 176 uint32_t srcXoff, uint32_t srcYoff, 177 uint32_t srcMip, uint32_t srcFace) { 178 Context *rsc = RsdCpuReference::getTlsContext(); 179 rsrAllocationCopy2DRange(rsc, (Allocation*)dstAlloc.p, 180 dstXoff, dstYoff, dstMip, dstFace, 181 width, height, 182 (Allocation*)srcAlloc.p, 183 srcXoff, srcYoff, srcMip, srcFace); 184} 185 186static void SC_AllocationIoSend(Allocation* alloc) { 187 Context *rsc = RsdCpuReference::getTlsContext(); 188 rsrAllocationIoSend(rsc, alloc); 189} 190 191 192static void SC_AllocationIoReceive(Allocation* alloc) { 193 Context *rsc = RsdCpuReference::getTlsContext(); 194 rsrAllocationIoReceive(rsc, alloc); 195} 196 197#endif 198 199#ifndef RS_COMPATIBILITY_LIB 200 201////////////////////////////////////////////////////////////////////////////// 202// Context 203////////////////////////////////////////////////////////////////////////////// 204 205static void SC_BindTexture(ProgramFragment *pf, uint32_t slot, Allocation *a) { 206 Context *rsc = RsdCpuReference::getTlsContext(); 207 rsrBindTexture(rsc, pf, slot, a); 208} 209 210static void SC_BindVertexConstant(ProgramVertex *pv, uint32_t slot, Allocation *a) { 211 Context *rsc = RsdCpuReference::getTlsContext(); 212 rsrBindConstant(rsc, pv, slot, a); 213} 214 215static void SC_BindFragmentConstant(ProgramFragment *pf, uint32_t slot, Allocation *a) { 216 Context *rsc = RsdCpuReference::getTlsContext(); 217 rsrBindConstant(rsc, pf, slot, a); 218} 219 220static void SC_BindSampler(ProgramFragment *pf, uint32_t slot, Sampler *s) { 221 Context *rsc = RsdCpuReference::getTlsContext(); 222 rsrBindSampler(rsc, pf, slot, s); 223} 224 225static void SC_BindProgramStore(ProgramStore *ps) { 226 Context *rsc = RsdCpuReference::getTlsContext(); 227 rsrBindProgramStore(rsc, ps); 228} 229 230static void SC_BindProgramFragment(ProgramFragment *pf) { 231 Context *rsc = RsdCpuReference::getTlsContext(); 232 rsrBindProgramFragment(rsc, pf); 233} 234 235static void SC_BindProgramVertex(ProgramVertex *pv) { 236 Context *rsc = RsdCpuReference::getTlsContext(); 237 rsrBindProgramVertex(rsc, pv); 238} 239 240static void SC_BindProgramRaster(ProgramRaster *pr) { 241 Context *rsc = RsdCpuReference::getTlsContext(); 242 rsrBindProgramRaster(rsc, pr); 243} 244 245static void SC_BindFrameBufferObjectColorTarget(Allocation *a, uint32_t slot) { 246 Context *rsc = RsdCpuReference::getTlsContext(); 247 rsrBindFrameBufferObjectColorTarget(rsc, a, slot); 248} 249 250static void SC_BindFrameBufferObjectDepthTarget(Allocation *a) { 251 Context *rsc = RsdCpuReference::getTlsContext(); 252 rsrBindFrameBufferObjectDepthTarget(rsc, a); 253} 254 255static void SC_ClearFrameBufferObjectColorTarget(uint32_t slot) { 256 Context *rsc = RsdCpuReference::getTlsContext(); 257 rsrClearFrameBufferObjectColorTarget(rsc, slot); 258} 259 260static void SC_ClearFrameBufferObjectDepthTarget(Context *, Script *) { 261 Context *rsc = RsdCpuReference::getTlsContext(); 262 rsrClearFrameBufferObjectDepthTarget(rsc); 263} 264 265static void SC_ClearFrameBufferObjectTargets(Context *, Script *) { 266 Context *rsc = RsdCpuReference::getTlsContext(); 267 rsrClearFrameBufferObjectTargets(rsc); 268} 269 270 271////////////////////////////////////////////////////////////////////////////// 272// VP 273////////////////////////////////////////////////////////////////////////////// 274 275static void SC_VpLoadProjectionMatrix(const rsc_Matrix *m) { 276 Context *rsc = RsdCpuReference::getTlsContext(); 277 rsrVpLoadProjectionMatrix(rsc, m); 278} 279 280static void SC_VpLoadModelMatrix(const rsc_Matrix *m) { 281 Context *rsc = RsdCpuReference::getTlsContext(); 282 rsrVpLoadModelMatrix(rsc, m); 283} 284 285static void SC_VpLoadTextureMatrix(const rsc_Matrix *m) { 286 Context *rsc = RsdCpuReference::getTlsContext(); 287 rsrVpLoadTextureMatrix(rsc, m); 288} 289 290static void SC_PfConstantColor(ProgramFragment *pf, float r, float g, float b, float a) { 291 Context *rsc = RsdCpuReference::getTlsContext(); 292 rsrPfConstantColor(rsc, pf, r, g, b, a); 293} 294 295static void SC_VpGetProjectionMatrix(rsc_Matrix *m) { 296 Context *rsc = RsdCpuReference::getTlsContext(); 297 rsrVpGetProjectionMatrix(rsc, m); 298} 299 300 301////////////////////////////////////////////////////////////////////////////// 302// Drawing 303////////////////////////////////////////////////////////////////////////////// 304 305static void SC_DrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 306 float x2, float y2, float z2, float u2, float v2, 307 float x3, float y3, float z3, float u3, float v3, 308 float x4, float y4, float z4, float u4, float v4) { 309 Context *rsc = RsdCpuReference::getTlsContext(); 310 311 if (!rsc->setupCheck()) { 312 return; 313 } 314 315 RsdHal *dc = (RsdHal *)rsc->mHal.drv; 316 if (!dc->gl.shaderCache->setup(rsc)) { 317 return; 318 } 319 320 //ALOGE("Quad"); 321 //ALOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1); 322 //ALOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2); 323 //ALOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3); 324 //ALOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4); 325 326 float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4}; 327 const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4}; 328 329 RsdVertexArray::Attrib attribs[2]; 330 attribs[0].set(GL_FLOAT, 3, 12, false, (size_t)vtx, "ATTRIB_position"); 331 attribs[1].set(GL_FLOAT, 2, 8, false, (size_t)tex, "ATTRIB_texture0"); 332 333 RsdVertexArray va(attribs, 2); 334 va.setup(rsc); 335 336 RSD_CALL_GL(glDrawArrays, GL_TRIANGLE_FAN, 0, 4); 337} 338 339static void SC_DrawQuad(float x1, float y1, float z1, 340 float x2, float y2, float z2, 341 float x3, float y3, float z3, 342 float x4, float y4, float z4) { 343 SC_DrawQuadTexCoords(x1, y1, z1, 0, 1, 344 x2, y2, z2, 1, 1, 345 x3, y3, z3, 1, 0, 346 x4, y4, z4, 0, 0); 347} 348 349static void SC_DrawSpriteScreenspace(float x, float y, float z, float w, float h) { 350 Context *rsc = RsdCpuReference::getTlsContext(); 351 352 ObjectBaseRef<const ProgramVertex> tmp(rsc->getProgramVertex()); 353 rsc->setProgramVertex(rsc->getDefaultProgramVertex()); 354 //rsc->setupCheck(); 355 356 //GLint crop[4] = {0, h, w, -h}; 357 358 float sh = rsc->getHeight(); 359 360 SC_DrawQuad(x, sh - y, z, 361 x+w, sh - y, z, 362 x+w, sh - (y+h), z, 363 x, sh - (y+h), z); 364 rsc->setProgramVertex((ProgramVertex *)tmp.get()); 365} 366 367static void SC_DrawRect(float x1, float y1, float x2, float y2, float z) { 368 SC_DrawQuad(x1, y2, z, x2, y2, z, x2, y1, z, x1, y1, z); 369} 370 371static void SC_DrawPath(Path *p) { 372 Context *rsc = RsdCpuReference::getTlsContext(); 373 rsdPathDraw(rsc, p); 374} 375 376static void SC_DrawMesh(Mesh *m) { 377 Context *rsc = RsdCpuReference::getTlsContext(); 378 rsrDrawMesh(rsc, m); 379} 380 381static void SC_DrawMeshPrimitive(Mesh *m, uint32_t primIndex) { 382 Context *rsc = RsdCpuReference::getTlsContext(); 383 rsrDrawMeshPrimitive(rsc, m, primIndex); 384} 385 386static void SC_DrawMeshPrimitiveRange(Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len) { 387 Context *rsc = RsdCpuReference::getTlsContext(); 388 rsrDrawMeshPrimitiveRange(rsc, m, primIndex, start, len); 389} 390 391static void SC_MeshComputeBoundingBox(Mesh *m, 392 float *minX, float *minY, float *minZ, 393 float *maxX, float *maxY, float *maxZ) { 394 Context *rsc = RsdCpuReference::getTlsContext(); 395 rsrMeshComputeBoundingBox(rsc, m, minX, minY, minZ, maxX, maxY, maxZ); 396} 397 398 399 400////////////////////////////////////////////////////////////////////////////// 401// 402////////////////////////////////////////////////////////////////////////////// 403 404 405static void SC_Color(float r, float g, float b, float a) { 406 Context *rsc = RsdCpuReference::getTlsContext(); 407 rsrColor(rsc, r, g, b, a); 408} 409 410static void SC_Finish() { 411 Context *rsc = RsdCpuReference::getTlsContext(); 412 rsdGLFinish(rsc); 413} 414 415static void SC_ClearColor(float r, float g, float b, float a) { 416 Context *rsc = RsdCpuReference::getTlsContext(); 417 rsrPrepareClear(rsc); 418 rsdGLClearColor(rsc, r, g, b, a); 419} 420 421static void SC_ClearDepth(float v) { 422 Context *rsc = RsdCpuReference::getTlsContext(); 423 rsrPrepareClear(rsc); 424 rsdGLClearDepth(rsc, v); 425} 426 427static uint32_t SC_GetWidth() { 428 Context *rsc = RsdCpuReference::getTlsContext(); 429 return rsrGetWidth(rsc); 430} 431 432static uint32_t SC_GetHeight() { 433 Context *rsc = RsdCpuReference::getTlsContext(); 434 return rsrGetHeight(rsc); 435} 436 437static void SC_DrawTextAlloc(Allocation *a, int x, int y) { 438 Context *rsc = RsdCpuReference::getTlsContext(); 439 rsrDrawTextAlloc(rsc, a, x, y); 440} 441 442static void SC_DrawText(const char *text, int x, int y) { 443 Context *rsc = RsdCpuReference::getTlsContext(); 444 rsrDrawText(rsc, text, x, y); 445} 446 447static void SC_MeasureTextAlloc(Allocation *a, 448 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) { 449 Context *rsc = RsdCpuReference::getTlsContext(); 450 rsrMeasureTextAlloc(rsc, a, left, right, top, bottom); 451} 452 453static void SC_MeasureText(const char *text, 454 int32_t *left, int32_t *right, int32_t *top, int32_t *bottom) { 455 Context *rsc = RsdCpuReference::getTlsContext(); 456 rsrMeasureText(rsc, text, left, right, top, bottom); 457} 458 459static void SC_BindFont(Font *f) { 460 Context *rsc = RsdCpuReference::getTlsContext(); 461 rsrBindFont(rsc, f); 462} 463 464static void SC_FontColor(float r, float g, float b, float a) { 465 Context *rsc = RsdCpuReference::getTlsContext(); 466 rsrFontColor(rsc, r, g, b, a); 467} 468#endif 469 470 471////////////////////////////////////////////////////////////////////////////// 472// 473////////////////////////////////////////////////////////////////////////////// 474 475static void SC_ClearObject(rs_object_base *dst) { 476 Context *rsc = RsdCpuReference::getTlsContext(); 477 rsrClearObject(rsc, dst); 478} 479#ifndef RS_COMPATIBILITY_LIB 480static void SC_SetObject(rs_object_base *dst, rs_object_base src) { 481 // ALOGE("SC_SetObject: dst = %p, src = %p", dst, src.p); 482 // ALOGE("SC_SetObject: dst[0] = %p", dst[0]); 483 Context *rsc = RsdCpuReference::getTlsContext(); 484 rsrSetObject(rsc, dst, (ObjectBase*)src.p); 485} 486 487#ifdef __LP64__ 488static void SC_SetObject_ByRef(rs_object_base *dst, rs_object_base *src) { 489 // ALOGE("SC_SetObject2: dst = %p, src = %p", dst, src->p); 490 Context *rsc = RsdCpuReference::getTlsContext(); 491 rsrSetObject(rsc, dst, (ObjectBase*)src->p); 492} 493#endif 494 495static bool SC_IsObject(rs_object_base o) { 496 Context *rsc = RsdCpuReference::getTlsContext(); 497 return rsrIsObject(rsc, o); 498} 499 500#ifdef __LP64__ 501static bool SC_IsObject_ByRef(rs_object_base *o) { 502 Context *rsc = RsdCpuReference::getTlsContext(); 503 return rsrIsObject(rsc, *o); 504} 505#endif 506 507#else 508static void SC_SetObject(rs_object_base *dst, ObjectBase* src) { 509 // ALOGE("SC_SetObject: dst = %p, src = %p", dst, src.p); 510 // ALOGE("SC_SetObject: dst[0] = %p", dst[0]); 511 Context *rsc = RsdCpuReference::getTlsContext(); 512 rsrSetObject(rsc, dst, src); 513} 514 515static bool SC_IsObject(ObjectBase* o) { 516 Context *rsc = RsdCpuReference::getTlsContext(); 517 return rsrIsObject(rsc, o); 518} 519#endif 520 521 522 523static const Allocation * SC_GetAllocation(const void *ptr) { 524 Context *rsc = RsdCpuReference::getTlsContext(); 525 const Script *sc = RsdCpuReference::getTlsScript(); 526 return rsdScriptGetAllocationForPointer(rsc, sc, ptr); 527} 528 529#ifndef RS_COMPATIBILITY_LIB 530#ifndef __LP64__ 531static void SC_ForEach_SAA(android::renderscript::rs_script target, 532 android::renderscript::rs_allocation in, 533 android::renderscript::rs_allocation out) { 534 Context *rsc = RsdCpuReference::getTlsContext(); 535 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, NULL, 0, NULL); 536} 537#else 538static void SC_ForEach_SAA(android::renderscript::rs_script *target, 539 android::renderscript::rs_allocation *in, 540 android::renderscript::rs_allocation *out) { 541 Context *rsc = RsdCpuReference::getTlsContext(); 542 rsrForEach(rsc, (Script*)target->p, (Allocation*)in->p, (Allocation*)out->p, NULL, 0, NULL); 543} 544#endif 545 546#ifndef __LP64__ 547static void SC_ForEach_SAAU(android::renderscript::rs_script target, 548 android::renderscript::rs_allocation in, 549 android::renderscript::rs_allocation out, 550 const void *usr) { 551 Context *rsc = RsdCpuReference::getTlsContext(); 552 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, usr, 0, NULL); 553} 554#else 555static void SC_ForEach_SAAU(android::renderscript::rs_script *target, 556 android::renderscript::rs_allocation *in, 557 android::renderscript::rs_allocation *out, 558 const void *usr) { 559 Context *rsc = RsdCpuReference::getTlsContext(); 560 rsrForEach(rsc, (Script*)target->p, (Allocation*)in->p, (Allocation*)out->p, usr, 0, NULL); 561} 562#endif 563 564#ifndef __LP64__ 565static void SC_ForEach_SAAUS(android::renderscript::rs_script target, 566 android::renderscript::rs_allocation in, 567 android::renderscript::rs_allocation out, 568 const void *usr, 569 const RsScriptCall *call) { 570 Context *rsc = RsdCpuReference::getTlsContext(); 571 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, usr, 0, call); 572} 573#else 574static void SC_ForEach_SAAUS(android::renderscript::rs_script *target, 575 android::renderscript::rs_allocation *in, 576 android::renderscript::rs_allocation *out, 577 const void *usr, 578 const RsScriptCall *call) { 579 Context *rsc = RsdCpuReference::getTlsContext(); 580 rsrForEach(rsc, (Script*)target->p, (Allocation*)in->p, (Allocation*)out->p, usr, 0, call); 581} 582#endif 583 584#ifndef __LP64__ 585static void SC_ForEach_SAAUL(android::renderscript::rs_script target, 586 android::renderscript::rs_allocation in, 587 android::renderscript::rs_allocation out, 588 const void *usr, 589 uint32_t usrLen) { 590 Context *rsc = RsdCpuReference::getTlsContext(); 591 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, usr, usrLen, NULL); 592} 593#else 594static void SC_ForEach_SAAUL(android::renderscript::rs_script *target, 595 android::renderscript::rs_allocation *in, 596 android::renderscript::rs_allocation *out, 597 const void *usr, 598 uint32_t usrLen) { 599 Context *rsc = RsdCpuReference::getTlsContext(); 600 rsrForEach(rsc, (Script*)target->p, (Allocation*)in->p, (Allocation*)out->p, usr, usrLen, NULL); 601} 602#endif 603 604#ifndef __LP64__ 605static void SC_ForEach_SAAULS(android::renderscript::rs_script target, 606 android::renderscript::rs_allocation in, 607 android::renderscript::rs_allocation out, 608 const void *usr, 609 uint32_t usrLen, 610 const RsScriptCall *call) { 611 Context *rsc = RsdCpuReference::getTlsContext(); 612 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, usr, usrLen, call); 613} 614#else 615static void SC_ForEach_SAAULS(android::renderscript::rs_script *target, 616 android::renderscript::rs_allocation *in, 617 android::renderscript::rs_allocation *out, 618 const void *usr, 619 uint32_t usrLen, 620 const RsScriptCall *call) { 621 Context *rsc = RsdCpuReference::getTlsContext(); 622 rsrForEach(rsc, (Script*)target->p, (Allocation*)in->p, (Allocation*)out->p, usr, usrLen, call); 623} 624#endif 625#endif 626 627 628////////////////////////////////////////////////////////////////////////////// 629// Time routines 630////////////////////////////////////////////////////////////////////////////// 631 632static float SC_GetDt() { 633 Context *rsc = RsdCpuReference::getTlsContext(); 634 const Script *sc = RsdCpuReference::getTlsScript(); 635 return rsrGetDt(rsc, sc); 636} 637 638#ifndef RS_COMPATIBILITY_LIB 639time_t SC_Time(time_t *timer) { 640 Context *rsc = RsdCpuReference::getTlsContext(); 641 return rsrTime(rsc, timer); 642} 643#else 644static int SC_Time(int *timer) { 645 Context *rsc = RsdCpuReference::getTlsContext(); 646 return rsrTime(rsc, (long*)timer); 647} 648#endif 649 650tm* SC_LocalTime(tm *local, time_t *timer) { 651 Context *rsc = RsdCpuReference::getTlsContext(); 652 return rsrLocalTime(rsc, local, timer); 653} 654 655int64_t SC_UptimeMillis() { 656 Context *rsc = RsdCpuReference::getTlsContext(); 657 return rsrUptimeMillis(rsc); 658} 659 660int64_t SC_UptimeNanos() { 661 Context *rsc = RsdCpuReference::getTlsContext(); 662 return rsrUptimeNanos(rsc); 663} 664 665////////////////////////////////////////////////////////////////////////////// 666// Message routines 667////////////////////////////////////////////////////////////////////////////// 668 669static uint32_t SC_ToClient2(int cmdID, const void *data, uint32_t len) { 670 Context *rsc = RsdCpuReference::getTlsContext(); 671 return rsrToClient(rsc, cmdID, data, len); 672} 673 674static uint32_t SC_ToClient(int cmdID) { 675 Context *rsc = RsdCpuReference::getTlsContext(); 676 return rsrToClient(rsc, cmdID, (const void *)NULL, 0); 677} 678 679static uint32_t SC_ToClientBlocking2(int cmdID, const void *data, uint32_t len) { 680 Context *rsc = RsdCpuReference::getTlsContext(); 681 return rsrToClientBlocking(rsc, cmdID, data, len); 682} 683 684static uint32_t SC_ToClientBlocking(int cmdID) { 685 Context *rsc = RsdCpuReference::getTlsContext(); 686 return rsrToClientBlocking(rsc, cmdID, (const void *)NULL, 0); 687} 688 689 690static void * ElementAt1D(Allocation *a, RsDataType dt, uint32_t vecSize, uint32_t x) { 691 Context *rsc = RsdCpuReference::getTlsContext(); 692 const Type *t = a->getType(); 693 const Element *e = t->getElement(); 694 695 char buf[256]; 696 if (x >= t->getLODDimX(0)) { 697 sprintf(buf, "Out range ElementAt X %i of %i", x, t->getLODDimX(0)); 698 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 699 return NULL; 700 } 701 702 if (vecSize > 0) { 703 if (vecSize != e->getVectorSize()) { 704 sprintf(buf, "Vector size mismatch for ElementAt %i of %i", vecSize, e->getVectorSize()); 705 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 706 return NULL; 707 } 708 709 if (dt != e->getType()) { 710 sprintf(buf, "Data type mismatch for ElementAt %i of %i", dt, e->getType()); 711 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 712 return NULL; 713 } 714 } 715 716 uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr; 717 const uint32_t eSize = e->getSizeBytes(); 718 return &p[(eSize * x)]; 719} 720 721static void * ElementAt2D(Allocation *a, RsDataType dt, uint32_t vecSize, uint32_t x, uint32_t y) { 722 Context *rsc = RsdCpuReference::getTlsContext(); 723 const Type *t = a->getType(); 724 const Element *e = t->getElement(); 725 726 char buf[256]; 727 if (x >= t->getLODDimX(0)) { 728 sprintf(buf, "Out range ElementAt X %i of %i", x, t->getLODDimX(0)); 729 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 730 return NULL; 731 } 732 733 if (y >= t->getLODDimY(0)) { 734 sprintf(buf, "Out range ElementAt Y %i of %i", y, t->getLODDimY(0)); 735 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 736 return NULL; 737 } 738 739 if (vecSize > 0) { 740 if (vecSize != e->getVectorSize()) { 741 sprintf(buf, "Vector size mismatch for ElementAt %i of %i", vecSize, e->getVectorSize()); 742 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 743 return NULL; 744 } 745 746 if (dt != e->getType()) { 747 sprintf(buf, "Data type mismatch for ElementAt %i of %i", dt, e->getType()); 748 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 749 return NULL; 750 } 751 } 752 753 uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr; 754 const uint32_t eSize = e->getSizeBytes(); 755 const uint32_t stride = a->mHal.drvState.lod[0].stride; 756 return &p[(eSize * x) + (y * stride)]; 757} 758 759static void * ElementAt3D(Allocation *a, RsDataType dt, uint32_t vecSize, uint32_t x, uint32_t y, uint32_t z) { 760 Context *rsc = RsdCpuReference::getTlsContext(); 761 const Type *t = a->getType(); 762 const Element *e = t->getElement(); 763 764 char buf[256]; 765 if (x >= t->getLODDimX(0)) { 766 sprintf(buf, "Out range ElementAt X %i of %i", x, t->getLODDimX(0)); 767 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 768 return NULL; 769 } 770 771 if (y >= t->getLODDimY(0)) { 772 sprintf(buf, "Out range ElementAt Y %i of %i", y, t->getLODDimY(0)); 773 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 774 return NULL; 775 } 776 777 if (z >= t->getLODDimZ(0)) { 778 sprintf(buf, "Out range ElementAt Z %i of %i", z, t->getLODDimZ(0)); 779 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 780 return NULL; 781 } 782 783 if (vecSize > 0) { 784 if (vecSize != e->getVectorSize()) { 785 sprintf(buf, "Vector size mismatch for ElementAt %i of %i", vecSize, e->getVectorSize()); 786 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 787 return NULL; 788 } 789 790 if (dt != e->getType()) { 791 sprintf(buf, "Data type mismatch for ElementAt %i of %i", dt, e->getType()); 792 rsc->setError(RS_ERROR_FATAL_DEBUG, buf); 793 return NULL; 794 } 795 } 796 797 uint8_t *p = (uint8_t *)a->mHal.drvState.lod[0].mallocPtr; 798 const uint32_t eSize = e->getSizeBytes(); 799 const uint32_t stride = a->mHal.drvState.lod[0].stride; 800 return &p[(eSize * x) + (y * stride)]; 801} 802 803static const void * SC_GetElementAt1D(android::renderscript::rs_allocation a, uint32_t x) { 804 return ElementAt1D((Allocation*)a.p, RS_TYPE_UNSIGNED_8, 0, x); 805} 806static const void * SC_GetElementAt2D(android::renderscript::rs_allocation a, uint32_t x, uint32_t y) { 807 return ElementAt2D((Allocation*)a.p, RS_TYPE_UNSIGNED_8, 0, x, y); 808} 809static const void * SC_GetElementAt3D(android::renderscript::rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { 810 return ElementAt3D((Allocation*)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 811} 812 813static void SC_SetElementAt1D(android::renderscript::rs_allocation a, const void *ptr, uint32_t x) { 814 const Type *t = ((Allocation*)a.p)->getType(); 815 const Element *e = t->getElement(); 816 void *tmp = ElementAt1D((Allocation*)a.p, RS_TYPE_UNSIGNED_8, 0, x); 817 if (tmp != NULL) { 818 memcpy(tmp, ptr, e->getSizeBytes()); 819 } 820} 821static void SC_SetElementAt2D(android::renderscript::rs_allocation a, const void *ptr, uint32_t x, uint32_t y) { 822 const Type *t = ((Allocation*)a.p)->getType(); 823 const Element *e = t->getElement(); 824 void *tmp = ElementAt2D((Allocation*)a.p, RS_TYPE_UNSIGNED_8, 0, x, y); 825 if (tmp != NULL) { 826 memcpy(tmp, ptr, e->getSizeBytes()); 827 } 828} 829static void SC_SetElementAt3D(android::renderscript::rs_allocation a, const void *ptr, uint32_t x, uint32_t y, uint32_t z) { 830 const Type *t = ((Allocation*)a.p)->getType(); 831 const Element *e = t->getElement(); 832 void *tmp = ElementAt3D((Allocation*)a.p, RS_TYPE_UNSIGNED_8, 0, x, y, z); 833 if (tmp != NULL) { 834 memcpy(tmp, ptr, e->getSizeBytes()); 835 } 836} 837 838#define ELEMENT_AT(T, DT, VS) \ 839 static void SC_SetElementAt1_##T(android::renderscript::rs_allocation a, const T *val, uint32_t x) { \ 840 void *r = ElementAt1D((Allocation*)a.p, DT, VS, x); \ 841 if (r != NULL) ((T *)r)[0] = *val; \ 842 else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 843 } \ 844 static void SC_SetElementAt2_##T(android::renderscript::rs_allocation a, const T * val, uint32_t x, uint32_t y) { \ 845 void *r = ElementAt2D((Allocation*)a.p, DT, VS, x, y); \ 846 if (r != NULL) ((T *)r)[0] = *val; \ 847 else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 848 } \ 849 static void SC_SetElementAt3_##T(android::renderscript::rs_allocation a, const T * val, uint32_t x, uint32_t y, uint32_t z) { \ 850 void *r = ElementAt3D((Allocation*)a.p, DT, VS, x, y, z); \ 851 if (r != NULL) ((T *)r)[0] = *val; \ 852 else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 853 } \ 854 static void SC_GetElementAt1_##T(android::renderscript::rs_allocation a, T *val, uint32_t x) { \ 855 void *r = ElementAt1D((Allocation*)a.p, DT, VS, x); \ 856 if (r != NULL) *val = ((T *)r)[0]; \ 857 else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 858 } \ 859 static void SC_GetElementAt2_##T(android::renderscript::rs_allocation a, T *val, uint32_t x, uint32_t y) { \ 860 void *r = ElementAt2D((Allocation*)a.p, DT, VS, x, y); \ 861 if (r != NULL) *val = ((T *)r)[0]; \ 862 else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 863 } \ 864 static void SC_GetElementAt3_##T(android::renderscript::rs_allocation a, T *val, uint32_t x, uint32_t y, uint32_t z) { \ 865 void *r = ElementAt3D((Allocation*)a.p, DT, VS, x, y, z); \ 866 if (r != NULL) *val = ((T *)r)[0]; \ 867 else ALOGE("Error from %s", __PRETTY_FUNCTION__); \ 868 } 869 870ELEMENT_AT(char, RS_TYPE_SIGNED_8, 1) 871ELEMENT_AT(char2, RS_TYPE_SIGNED_8, 2) 872ELEMENT_AT(char3, RS_TYPE_SIGNED_8, 3) 873ELEMENT_AT(char4, RS_TYPE_SIGNED_8, 4) 874ELEMENT_AT(uchar, RS_TYPE_UNSIGNED_8, 1) 875ELEMENT_AT(uchar2, RS_TYPE_UNSIGNED_8, 2) 876ELEMENT_AT(uchar3, RS_TYPE_UNSIGNED_8, 3) 877ELEMENT_AT(uchar4, RS_TYPE_UNSIGNED_8, 4) 878ELEMENT_AT(short, RS_TYPE_SIGNED_16, 1) 879ELEMENT_AT(short2, RS_TYPE_SIGNED_16, 2) 880ELEMENT_AT(short3, RS_TYPE_SIGNED_16, 3) 881ELEMENT_AT(short4, RS_TYPE_SIGNED_16, 4) 882ELEMENT_AT(ushort, RS_TYPE_UNSIGNED_16, 1) 883ELEMENT_AT(ushort2, RS_TYPE_UNSIGNED_16, 2) 884ELEMENT_AT(ushort3, RS_TYPE_UNSIGNED_16, 3) 885ELEMENT_AT(ushort4, RS_TYPE_UNSIGNED_16, 4) 886ELEMENT_AT(int, RS_TYPE_SIGNED_32, 1) 887ELEMENT_AT(int2, RS_TYPE_SIGNED_32, 2) 888ELEMENT_AT(int3, RS_TYPE_SIGNED_32, 3) 889ELEMENT_AT(int4, RS_TYPE_SIGNED_32, 4) 890ELEMENT_AT(uint, RS_TYPE_UNSIGNED_32, 1) 891ELEMENT_AT(uint2, RS_TYPE_UNSIGNED_32, 2) 892ELEMENT_AT(uint3, RS_TYPE_UNSIGNED_32, 3) 893ELEMENT_AT(uint4, RS_TYPE_UNSIGNED_32, 4) 894ELEMENT_AT(long, RS_TYPE_SIGNED_64, 1) 895ELEMENT_AT(long2, RS_TYPE_SIGNED_64, 2) 896ELEMENT_AT(long3, RS_TYPE_SIGNED_64, 3) 897ELEMENT_AT(long4, RS_TYPE_SIGNED_64, 4) 898ELEMENT_AT(ulong, RS_TYPE_UNSIGNED_64, 1) 899ELEMENT_AT(ulong2, RS_TYPE_UNSIGNED_64, 2) 900ELEMENT_AT(ulong3, RS_TYPE_UNSIGNED_64, 3) 901ELEMENT_AT(ulong4, RS_TYPE_UNSIGNED_64, 4) 902ELEMENT_AT(float, RS_TYPE_FLOAT_32, 1) 903ELEMENT_AT(float2, RS_TYPE_FLOAT_32, 2) 904ELEMENT_AT(float3, RS_TYPE_FLOAT_32, 3) 905ELEMENT_AT(float4, RS_TYPE_FLOAT_32, 4) 906ELEMENT_AT(double, RS_TYPE_FLOAT_64, 1) 907ELEMENT_AT(double2, RS_TYPE_FLOAT_64, 2) 908ELEMENT_AT(double3, RS_TYPE_FLOAT_64, 3) 909ELEMENT_AT(double4, RS_TYPE_FLOAT_64, 4) 910 911#undef ELEMENT_AT 912 913////////////////////////////////////////////////////////////////////////////// 914// Stub implementation 915////////////////////////////////////////////////////////////////////////////// 916 917// llvm name mangling ref 918// <builtin-type> ::= v # void 919// ::= b # bool 920// ::= c # char 921// ::= a # signed char 922// ::= h # unsigned char 923// ::= s # short 924// ::= t # unsigned short 925// ::= i # int 926// ::= j # unsigned int 927// ::= l # long 928// ::= m # unsigned long 929// ::= x # long long, __int64 930// ::= y # unsigned long long, __int64 931// ::= f # float 932// ::= d # double 933 934static RsdCpuReference::CpuSymbol gSyms[] = { 935 // Debug runtime 936 { "_Z14rsGetElementAt13rs_allocationj", (void *)&SC_GetElementAt1D, true }, 937 { "_Z14rsGetElementAt13rs_allocationjj", (void *)&SC_GetElementAt2D, true }, 938 { "_Z14rsGetElementAt13rs_allocationjjj", (void *)&SC_GetElementAt3D, true }, 939 { "_Z14rsSetElementAt13rs_allocationPKvj", (void *)&SC_SetElementAt1D, true }, 940 { "_Z14rsSetElementAt13rs_allocationPKvjj", (void *)&SC_SetElementAt2D, true }, 941 { "_Z14rsSetElementAt13rs_allocationPKvjjj", (void *)&SC_SetElementAt3D, true }, 942 943 944 { "_Z20rsGetElementAt_uchar13rs_allocationPhj", (void *)&SC_GetElementAt1_uchar, true }, 945 { "_Z21rsGetElementAt_uchar213rs_allocationPDv2_hj", (void *)&SC_GetElementAt1_uchar2, true }, 946 { "_Z21rsGetElementAt_uchar313rs_allocationPDv3_hj", (void *)&SC_GetElementAt1_uchar3, true }, 947 { "_Z21rsGetElementAt_uchar413rs_allocationPDv4_hj", (void *)&SC_GetElementAt1_uchar4, true }, 948 { "_Z20rsGetElementAt_uchar13rs_allocationPhjj", (void *)&SC_GetElementAt2_uchar, true }, 949 { "_Z21rsGetElementAt_uchar213rs_allocationPDv2_hjj", (void *)&SC_GetElementAt2_uchar2, true }, 950 { "_Z21rsGetElementAt_uchar313rs_allocationPDv3_hjj", (void *)&SC_GetElementAt2_uchar3, true }, 951 { "_Z21rsGetElementAt_uchar413rs_allocationPDv4_hjj", (void *)&SC_GetElementAt2_uchar4, true }, 952 { "_Z20rsGetElementAt_uchar13rs_allocationPhjjj", (void *)&SC_GetElementAt3_uchar, true }, 953 { "_Z21rsGetElementAt_uchar213rs_allocationPDv2_hjjj", (void *)&SC_GetElementAt3_uchar2, true }, 954 { "_Z21rsGetElementAt_uchar313rs_allocationPDv3_hjjj", (void *)&SC_GetElementAt3_uchar3, true }, 955 { "_Z21rsGetElementAt_uchar413rs_allocationPDv4_hjjj", (void *)&SC_GetElementAt3_uchar4, true }, 956 957 { "_Z19rsGetElementAt_char13rs_allocationPcj", (void *)&SC_GetElementAt1_char, true }, 958 { "_Z20rsGetElementAt_char213rs_allocationPDv2_cj", (void *)&SC_GetElementAt1_char2, true }, 959 { "_Z20rsGetElementAt_char313rs_allocationPDv3_cj", (void *)&SC_GetElementAt1_char3, true }, 960 { "_Z20rsGetElementAt_char413rs_allocationPDv4_cj", (void *)&SC_GetElementAt1_char4, true }, 961 { "_Z19rsGetElementAt_char13rs_allocationPcjj", (void *)&SC_GetElementAt2_char, true }, 962 { "_Z20rsGetElementAt_char213rs_allocationPDv2_cjj", (void *)&SC_GetElementAt2_char2, true }, 963 { "_Z20rsGetElementAt_char313rs_allocationPDv3_cjj", (void *)&SC_GetElementAt2_char3, true }, 964 { "_Z20rsGetElementAt_char413rs_allocationPDv4_cjj", (void *)&SC_GetElementAt2_char4, true }, 965 { "_Z19rsGetElementAt_char13rs_allocationPcjjj", (void *)&SC_GetElementAt3_char, true }, 966 { "_Z20rsGetElementAt_char213rs_allocationPDv2_cjjj", (void *)&SC_GetElementAt3_char2, true }, 967 { "_Z20rsGetElementAt_char313rs_allocationPDv3_cjjj", (void *)&SC_GetElementAt3_char3, true }, 968 { "_Z20rsGetElementAt_char413rs_allocationPDv4_cjjj", (void *)&SC_GetElementAt3_char4, true }, 969 970 { "_Z21rsGetElementAt_ushort13rs_allocationPtj", (void *)&SC_GetElementAt1_ushort, true }, 971 { "_Z22rsGetElementAt_ushort213rs_allocationPDv2_tj", (void *)&SC_GetElementAt1_ushort2, true }, 972 { "_Z22rsGetElementAt_ushort313rs_allocationPDv3_tj", (void *)&SC_GetElementAt1_ushort3, true }, 973 { "_Z22rsGetElementAt_ushort413rs_allocationPDv4_tj", (void *)&SC_GetElementAt1_ushort4, true }, 974 { "_Z21rsGetElementAt_ushort13rs_allocationPtjj", (void *)&SC_GetElementAt2_ushort, true }, 975 { "_Z22rsGetElementAt_ushort213rs_allocationPDv2_tjj", (void *)&SC_GetElementAt2_ushort2, true }, 976 { "_Z22rsGetElementAt_ushort313rs_allocationPDv3_tjj", (void *)&SC_GetElementAt2_ushort3, true }, 977 { "_Z22rsGetElementAt_ushort413rs_allocationPDv4_tjj", (void *)&SC_GetElementAt2_ushort4, true }, 978 { "_Z21rsGetElementAt_ushort13rs_allocationPtjjj", (void *)&SC_GetElementAt3_ushort, true }, 979 { "_Z22rsGetElementAt_ushort213rs_allocationPDv2_tjjj", (void *)&SC_GetElementAt3_ushort2, true }, 980 { "_Z22rsGetElementAt_ushort313rs_allocationPDv3_tjjj", (void *)&SC_GetElementAt3_ushort3, true }, 981 { "_Z22rsGetElementAt_ushort413rs_allocationPDv4_tjjj", (void *)&SC_GetElementAt3_ushort4, true }, 982 983 { "_Z20rsGetElementAt_short13rs_allocationPsj", (void *)&SC_GetElementAt1_short, true }, 984 { "_Z21rsGetElementAt_short213rs_allocationPDv2_sj", (void *)&SC_GetElementAt1_short2, true }, 985 { "_Z21rsGetElementAt_short313rs_allocationPDv3_sj", (void *)&SC_GetElementAt1_short3, true }, 986 { "_Z21rsGetElementAt_short413rs_allocationPDv4_sj", (void *)&SC_GetElementAt1_short4, true }, 987 { "_Z20rsGetElementAt_short13rs_allocationPsjj", (void *)&SC_GetElementAt2_short, true }, 988 { "_Z21rsGetElementAt_short213rs_allocationPDv2_sjj", (void *)&SC_GetElementAt2_short2, true }, 989 { "_Z21rsGetElementAt_short313rs_allocationPDv3_sjj", (void *)&SC_GetElementAt2_short3, true }, 990 { "_Z21rsGetElementAt_short413rs_allocationPDv4_sjj", (void *)&SC_GetElementAt2_short4, true }, 991 { "_Z20rsGetElementAt_short13rs_allocationPsjjj", (void *)&SC_GetElementAt3_short, true }, 992 { "_Z21rsGetElementAt_short213rs_allocationPDv2_sjjj", (void *)&SC_GetElementAt3_short2, true }, 993 { "_Z21rsGetElementAt_short313rs_allocationPDv3_sjjj", (void *)&SC_GetElementAt3_short3, true }, 994 { "_Z21rsGetElementAt_short413rs_allocationPDv4_sjjj", (void *)&SC_GetElementAt3_short4, true }, 995 996 { "_Z19rsGetElementAt_uint13rs_allocationPjj", (void *)&SC_GetElementAt1_uint, true }, 997 { "_Z20rsGetElementAt_uint213rs_allocationPDv2_jj", (void *)&SC_GetElementAt1_uint2, true }, 998 { "_Z20rsGetElementAt_uint313rs_allocationPDv3_jj", (void *)&SC_GetElementAt1_uint3, true }, 999 { "_Z20rsGetElementAt_uint413rs_allocationPDv4_jj", (void *)&SC_GetElementAt1_uint4, true }, 1000 { "_Z19rsGetElementAt_uint13rs_allocationPjjj", (void *)&SC_GetElementAt2_uint, true }, 1001 { "_Z20rsGetElementAt_uint213rs_allocationPDv2_jjj", (void *)&SC_GetElementAt2_uint2, true }, 1002 { "_Z20rsGetElementAt_uint313rs_allocationPDv3_jjj", (void *)&SC_GetElementAt2_uint3, true }, 1003 { "_Z20rsGetElementAt_uint413rs_allocationPDv4_jjj", (void *)&SC_GetElementAt2_uint4, true }, 1004 { "_Z19rsGetElementAt_uint13rs_allocationPjjjj", (void *)&SC_GetElementAt3_uint, true }, 1005 { "_Z20rsGetElementAt_uint213rs_allocationPDv2_jjjj", (void *)&SC_GetElementAt3_uint2, true }, 1006 { "_Z20rsGetElementAt_uint313rs_allocationPDv3_jjjj", (void *)&SC_GetElementAt3_uint3, true }, 1007 { "_Z20rsGetElementAt_uint413rs_allocationPDv4_jjjj", (void *)&SC_GetElementAt3_uint4, true }, 1008 1009 { "_Z18rsGetElementAt_int13rs_allocationPij", (void *)&SC_GetElementAt1_int, true }, 1010 { "_Z19rsGetElementAt_int213rs_allocationPDv2_ij", (void *)&SC_GetElementAt1_int2, true }, 1011 { "_Z19rsGetElementAt_int313rs_allocationPDv3_ij", (void *)&SC_GetElementAt1_int3, true }, 1012 { "_Z19rsGetElementAt_int413rs_allocationPDv4_ij", (void *)&SC_GetElementAt1_int4, true }, 1013 { "_Z18rsGetElementAt_int13rs_allocationPijj", (void *)&SC_GetElementAt2_int, true }, 1014 { "_Z19rsGetElementAt_int213rs_allocationPDv2_ijj", (void *)&SC_GetElementAt2_int2, true }, 1015 { "_Z19rsGetElementAt_int313rs_allocationPDv3_ijj", (void *)&SC_GetElementAt2_int3, true }, 1016 { "_Z19rsGetElementAt_int413rs_allocationPDv4_ijj", (void *)&SC_GetElementAt2_int4, true }, 1017 { "_Z18rsGetElementAt_int13rs_allocationPijjj", (void *)&SC_GetElementAt3_int, true }, 1018 { "_Z19rsGetElementAt_int213rs_allocationPDv2_ijjj", (void *)&SC_GetElementAt3_int2, true }, 1019 { "_Z19rsGetElementAt_int313rs_allocationPDv3_ijjj", (void *)&SC_GetElementAt3_int3, true }, 1020 { "_Z19rsGetElementAt_int413rs_allocationPDv4_ijjj", (void *)&SC_GetElementAt3_int4, true }, 1021 1022 { "_Z20rsGetElementAt_ulong13rs_allocationPmj", (void *)&SC_GetElementAt1_ulong, true }, 1023 { "_Z21rsGetElementAt_ulong213rs_allocationPDv2_mj", (void *)&SC_GetElementAt1_ulong2, true }, 1024 { "_Z21rsGetElementAt_ulong313rs_allocationPDv3_mj", (void *)&SC_GetElementAt1_ulong3, true }, 1025 { "_Z21rsGetElementAt_ulong413rs_allocationPDv4_mj", (void *)&SC_GetElementAt1_ulong4, true }, 1026 { "_Z20rsGetElementAt_ulong13rs_allocationPmjj", (void *)&SC_GetElementAt2_ulong, true }, 1027 { "_Z21rsGetElementAt_ulong213rs_allocationPDv2_mjj", (void *)&SC_GetElementAt2_ulong2, true }, 1028 { "_Z21rsGetElementAt_ulong313rs_allocationPDv3_mjj", (void *)&SC_GetElementAt2_ulong3, true }, 1029 { "_Z21rsGetElementAt_ulong413rs_allocationPDv4_mjj", (void *)&SC_GetElementAt2_ulong4, true }, 1030 { "_Z20rsGetElementAt_ulong13rs_allocationPmjjj", (void *)&SC_GetElementAt3_ulong, true }, 1031 { "_Z21rsGetElementAt_ulong213rs_allocationPDv2_mjjj", (void *)&SC_GetElementAt3_ulong2, true }, 1032 { "_Z21rsGetElementAt_ulong313rs_allocationPDv3_mjjj", (void *)&SC_GetElementAt3_ulong3, true }, 1033 { "_Z21rsGetElementAt_ulong413rs_allocationPDv4_mjjj", (void *)&SC_GetElementAt3_ulong4, true }, 1034 1035 { "_Z19rsGetElementAt_long13rs_allocationPlj", (void *)&SC_GetElementAt1_long, true }, 1036 { "_Z20rsGetElementAt_long213rs_allocationPDv2_lj", (void *)&SC_GetElementAt1_long2, true }, 1037 { "_Z20rsGetElementAt_long313rs_allocationPDv3_lj", (void *)&SC_GetElementAt1_long3, true }, 1038 { "_Z20rsGetElementAt_long413rs_allocationPDv4_lj", (void *)&SC_GetElementAt1_long4, true }, 1039 { "_Z19rsGetElementAt_long13rs_allocationPljj", (void *)&SC_GetElementAt2_long, true }, 1040 { "_Z20rsGetElementAt_long213rs_allocationPDv2_ljj", (void *)&SC_GetElementAt2_long2, true }, 1041 { "_Z20rsGetElementAt_long313rs_allocationPDv3_ljj", (void *)&SC_GetElementAt2_long3, true }, 1042 { "_Z20rsGetElementAt_long413rs_allocationPDv4_ljj", (void *)&SC_GetElementAt2_long4, true }, 1043 { "_Z19rsGetElementAt_long13rs_allocationPljjj", (void *)&SC_GetElementAt3_long, true }, 1044 { "_Z20rsGetElementAt_long213rs_allocationPDv2_ljjj", (void *)&SC_GetElementAt3_long2, true }, 1045 { "_Z20rsGetElementAt_long313rs_allocationPDv3_ljjj", (void *)&SC_GetElementAt3_long3, true }, 1046 { "_Z20rsGetElementAt_long413rs_allocationPDv4_ljjj", (void *)&SC_GetElementAt3_long4, true }, 1047 1048 { "_Z20rsGetElementAt_float13rs_allocationPfj", (void *)&SC_GetElementAt1_float, true }, 1049 { "_Z21rsGetElementAt_float213rs_allocationPDv2_fj", (void *)&SC_GetElementAt1_float2, true }, 1050 { "_Z21rsGetElementAt_float313rs_allocationPDv3_fj", (void *)&SC_GetElementAt1_float3, true }, 1051 { "_Z21rsGetElementAt_float413rs_allocationPDv4_fj", (void *)&SC_GetElementAt1_float4, true }, 1052 { "_Z20rsGetElementAt_float13rs_allocationPfjj", (void *)&SC_GetElementAt2_float, true }, 1053 { "_Z21rsGetElementAt_float213rs_allocationPDv2_fjj", (void *)&SC_GetElementAt2_float2, true }, 1054 { "_Z21rsGetElementAt_float313rs_allocationPDv3_fjj", (void *)&SC_GetElementAt2_float3, true }, 1055 { "_Z21rsGetElementAt_float413rs_allocationPDv4_fjj", (void *)&SC_GetElementAt2_float4, true }, 1056 { "_Z20rsGetElementAt_float13rs_allocationPfjjj", (void *)&SC_GetElementAt3_float, true }, 1057 { "_Z21rsGetElementAt_float213rs_allocationPDv2_fjjj", (void *)&SC_GetElementAt3_float2, true }, 1058 { "_Z21rsGetElementAt_float313rs_allocationPDv3_fjjj", (void *)&SC_GetElementAt3_float3, true }, 1059 { "_Z21rsGetElementAt_float413rs_allocationPDv4_fjjj", (void *)&SC_GetElementAt3_float4, true }, 1060 1061 { "_Z21rsGetElementAt_double13rs_allocationPdj", (void *)&SC_GetElementAt1_double, true }, 1062 { "_Z22rsGetElementAt_double213rs_allocationPDv2_dj", (void *)&SC_GetElementAt1_double2, true }, 1063 { "_Z22rsGetElementAt_double313rs_allocationPDv3_dj", (void *)&SC_GetElementAt1_double3, true }, 1064 { "_Z22rsGetElementAt_double413rs_allocationPDv4_dj", (void *)&SC_GetElementAt1_double4, true }, 1065 { "_Z21rsGetElementAt_double13rs_allocationPdjj", (void *)&SC_GetElementAt2_double, true }, 1066 { "_Z22rsGetElementAt_double213rs_allocationPDv2_djj", (void *)&SC_GetElementAt2_double2, true }, 1067 { "_Z22rsGetElementAt_double313rs_allocationPDv3_djj", (void *)&SC_GetElementAt2_double3, true }, 1068 { "_Z22rsGetElementAt_double413rs_allocationPDv4_djj", (void *)&SC_GetElementAt2_double4, true }, 1069 { "_Z21rsGetElementAt_double13rs_allocationPdjjj", (void *)&SC_GetElementAt3_double, true }, 1070 { "_Z22rsGetElementAt_double213rs_allocationPDv2_djjj", (void *)&SC_GetElementAt3_double2, true }, 1071 { "_Z22rsGetElementAt_double313rs_allocationPDv3_djjj", (void *)&SC_GetElementAt3_double3, true }, 1072 { "_Z22rsGetElementAt_double413rs_allocationPDv4_djjj", (void *)&SC_GetElementAt3_double4, true }, 1073 1074 1075 1076 { "_Z20rsSetElementAt_uchar13rs_allocationPKhj", (void *)&SC_SetElementAt1_uchar, true }, 1077 { "_Z21rsSetElementAt_uchar213rs_allocationPKDv2_hj", (void *)&SC_SetElementAt1_uchar2, true }, 1078 { "_Z21rsSetElementAt_uchar313rs_allocationPKDv3_hj", (void *)&SC_SetElementAt1_uchar3, true }, 1079 { "_Z21rsSetElementAt_uchar413rs_allocationPKDv4_hj", (void *)&SC_SetElementAt1_uchar4, true }, 1080 { "_Z20rsSetElementAt_uchar13rs_allocationPKhjj", (void *)&SC_SetElementAt2_uchar, true }, 1081 { "_Z21rsSetElementAt_uchar213rs_allocationPKDv2_hjj", (void *)&SC_SetElementAt2_uchar2, true }, 1082 { "_Z21rsSetElementAt_uchar313rs_allocationPKDv3_hjj", (void *)&SC_SetElementAt2_uchar3, true }, 1083 { "_Z21rsSetElementAt_uchar413rs_allocationPKDv4_hjj", (void *)&SC_SetElementAt2_uchar4, true }, 1084 { "_Z20rsSetElementAt_uchar13rs_allocationPKhjjj", (void *)&SC_SetElementAt3_uchar, true }, 1085 { "_Z21rsSetElementAt_uchar213rs_allocationPKDv2_hjjj", (void *)&SC_SetElementAt3_uchar2, true }, 1086 { "_Z21rsSetElementAt_uchar313rs_allocationPKDv3_hjjj", (void *)&SC_SetElementAt3_uchar3, true }, 1087 { "_Z21rsSetElementAt_uchar413rs_allocationPKDv4_hjjj", (void *)&SC_SetElementAt3_uchar4, true }, 1088 1089 { "_Z19rsSetElementAt_char13rs_allocationPKcj", (void *)&SC_SetElementAt1_char, true }, 1090 { "_Z20rsSetElementAt_char213rs_allocationPKDv2_cj", (void *)&SC_SetElementAt1_char2, true }, 1091 { "_Z20rsSetElementAt_char313rs_allocationPKDv3_cj", (void *)&SC_SetElementAt1_char3, true }, 1092 { "_Z20rsSetElementAt_char413rs_allocationPKDv4_cj", (void *)&SC_SetElementAt1_char4, true }, 1093 { "_Z19rsSetElementAt_char13rs_allocationPKcjj", (void *)&SC_SetElementAt2_char, true }, 1094 { "_Z20rsSetElementAt_char213rs_allocationPKDv2_cjj", (void *)&SC_SetElementAt2_char2, true }, 1095 { "_Z20rsSetElementAt_char313rs_allocationPKDv3_cjj", (void *)&SC_SetElementAt2_char3, true }, 1096 { "_Z20rsSetElementAt_char413rs_allocationPKDv4_cjj", (void *)&SC_SetElementAt2_char4, true }, 1097 { "_Z19rsSetElementAt_char13rs_allocationPKcjjj", (void *)&SC_SetElementAt3_char, true }, 1098 { "_Z20rsSetElementAt_char213rs_allocationPKDv2_cjjj", (void *)&SC_SetElementAt3_char2, true }, 1099 { "_Z20rsSetElementAt_char313rs_allocationPKDv3_cjjj", (void *)&SC_SetElementAt3_char3, true }, 1100 { "_Z20rsSetElementAt_char413rs_allocationPKDv4_cjjj", (void *)&SC_SetElementAt3_char4, true }, 1101 1102 { "_Z21rsSetElementAt_ushort13rs_allocationPKht", (void *)&SC_SetElementAt1_ushort, true }, 1103 { "_Z22rsSetElementAt_ushort213rs_allocationPKDv2_tj", (void *)&SC_SetElementAt1_ushort2, true }, 1104 { "_Z22rsSetElementAt_ushort313rs_allocationPKDv3_tj", (void *)&SC_SetElementAt1_ushort3, true }, 1105 { "_Z22rsSetElementAt_ushort413rs_allocationPKDv4_tj", (void *)&SC_SetElementAt1_ushort4, true }, 1106 { "_Z21rsSetElementAt_ushort13rs_allocationPKtjj", (void *)&SC_SetElementAt2_ushort, true }, 1107 { "_Z22rsSetElementAt_ushort213rs_allocationPKDv2_tjj", (void *)&SC_SetElementAt2_ushort2, true }, 1108 { "_Z22rsSetElementAt_ushort313rs_allocationPKDv3_tjj", (void *)&SC_SetElementAt2_ushort3, true }, 1109 { "_Z22rsSetElementAt_ushort413rs_allocationPKDv4_tjj", (void *)&SC_SetElementAt2_ushort4, true }, 1110 { "_Z21rsSetElementAt_ushort13rs_allocationPKtjjj", (void *)&SC_SetElementAt3_ushort, true }, 1111 { "_Z22rsSetElementAt_ushort213rs_allocationPKDv2_tjjj", (void *)&SC_SetElementAt3_ushort2, true }, 1112 { "_Z22rsSetElementAt_ushort313rs_allocationPKDv3_tjjj", (void *)&SC_SetElementAt3_ushort3, true }, 1113 { "_Z22rsSetElementAt_ushort413rs_allocationPKDv4_tjjj", (void *)&SC_SetElementAt3_ushort4, true }, 1114 1115 { "_Z20rsSetElementAt_short13rs_allocationPKsj", (void *)&SC_SetElementAt1_short, true }, 1116 { "_Z21rsSetElementAt_short213rs_allocationPKDv2_sj", (void *)&SC_SetElementAt1_short2, true }, 1117 { "_Z21rsSetElementAt_short313rs_allocationPKDv3_sj", (void *)&SC_SetElementAt1_short3, true }, 1118 { "_Z21rsSetElementAt_short413rs_allocationPKDv4_sj", (void *)&SC_SetElementAt1_short4, true }, 1119 { "_Z20rsSetElementAt_short13rs_allocationPKsjj", (void *)&SC_SetElementAt2_short, true }, 1120 { "_Z21rsSetElementAt_short213rs_allocationPKDv2_sjj", (void *)&SC_SetElementAt2_short2, true }, 1121 { "_Z21rsSetElementAt_short313rs_allocationPKDv3_sjj", (void *)&SC_SetElementAt2_short3, true }, 1122 { "_Z21rsSetElementAt_short413rs_allocationPKDv4_sjj", (void *)&SC_SetElementAt2_short4, true }, 1123 { "_Z20rsSetElementAt_short13rs_allocationPKsjjj", (void *)&SC_SetElementAt3_short, true }, 1124 { "_Z21rsSetElementAt_short213rs_allocationPKDv2_sjjj", (void *)&SC_SetElementAt3_short2, true }, 1125 { "_Z21rsSetElementAt_short313rs_allocationPKDv3_sjjj", (void *)&SC_SetElementAt3_short3, true }, 1126 { "_Z21rsSetElementAt_short413rs_allocationPKDv4_sjjj", (void *)&SC_SetElementAt3_short4, true }, 1127 1128 { "_Z19rsSetElementAt_uint13rs_allocationPKjj", (void *)&SC_SetElementAt1_uint, true }, 1129 { "_Z20rsSetElementAt_uint213rs_allocationPKDv2_jj", (void *)&SC_SetElementAt1_uint2, true }, 1130 { "_Z20rsSetElementAt_uint313rs_allocationPKDv3_jj", (void *)&SC_SetElementAt1_uint3, true }, 1131 { "_Z20rsSetElementAt_uint413rs_allocationPKDv4_jj", (void *)&SC_SetElementAt1_uint4, true }, 1132 { "_Z19rsSetElementAt_uint13rs_allocationPKjjj", (void *)&SC_SetElementAt2_uint, true }, 1133 { "_Z20rsSetElementAt_uint213rs_allocationPKDv2_jjj", (void *)&SC_SetElementAt2_uint2, true }, 1134 { "_Z20rsSetElementAt_uint313rs_allocationPKDv3_jjj", (void *)&SC_SetElementAt2_uint3, true }, 1135 { "_Z20rsSetElementAt_uint413rs_allocationPKDv4_jjj", (void *)&SC_SetElementAt2_uint4, true }, 1136 { "_Z19rsSetElementAt_uint13rs_allocationPKjjjj", (void *)&SC_SetElementAt3_uint, true }, 1137 { "_Z20rsSetElementAt_uint213rs_allocationPKDv2_jjjj", (void *)&SC_SetElementAt3_uint2, true }, 1138 { "_Z20rsSetElementAt_uint313rs_allocationPKDv3_jjjj", (void *)&SC_SetElementAt3_uint3, true }, 1139 { "_Z20rsSetElementAt_uint413rs_allocationPKDv4_jjjj", (void *)&SC_SetElementAt3_uint4, true }, 1140 1141 { "_Z18rsSetElementAt_int13rs_allocationPKij", (void *)&SC_SetElementAt1_int, true }, 1142 { "_Z19rsSetElementAt_int213rs_allocationPKDv2_ij", (void *)&SC_SetElementAt1_int2, true }, 1143 { "_Z19rsSetElementAt_int313rs_allocationPKDv3_ij", (void *)&SC_SetElementAt1_int3, true }, 1144 { "_Z19rsSetElementAt_int413rs_allocationPKDv4_ij", (void *)&SC_SetElementAt1_int4, true }, 1145 { "_Z18rsSetElementAt_int13rs_allocationPKijj", (void *)&SC_SetElementAt2_int, true }, 1146 { "_Z19rsSetElementAt_int213rs_allocationPKDv2_ijj", (void *)&SC_SetElementAt2_int2, true }, 1147 { "_Z19rsSetElementAt_int313rs_allocationPKDv3_ijj", (void *)&SC_SetElementAt2_int3, true }, 1148 { "_Z19rsSetElementAt_int413rs_allocationPKDv4_ijj", (void *)&SC_SetElementAt2_int4, true }, 1149 { "_Z18rsSetElementAt_int13rs_allocationPKijjj", (void *)&SC_SetElementAt3_int, true }, 1150 { "_Z19rsSetElementAt_int213rs_allocationPKDv2_ijjj", (void *)&SC_SetElementAt3_int2, true }, 1151 { "_Z19rsSetElementAt_int313rs_allocationPKDv3_ijjj", (void *)&SC_SetElementAt3_int3, true }, 1152 { "_Z19rsSetElementAt_int413rs_allocationPKDv4_ijjj", (void *)&SC_SetElementAt3_int4, true }, 1153 1154 { "_Z20rsSetElementAt_ulong13rs_allocationPKmt", (void *)&SC_SetElementAt1_ulong, true }, 1155 { "_Z21rsSetElementAt_ulong213rs_allocationPKDv2_mj", (void *)&SC_SetElementAt1_ulong2, true }, 1156 { "_Z21rsSetElementAt_ulong313rs_allocationPKDv3_mj", (void *)&SC_SetElementAt1_ulong3, true }, 1157 { "_Z21rsSetElementAt_ulong413rs_allocationPKDv4_mj", (void *)&SC_SetElementAt1_ulong4, true }, 1158 { "_Z20rsSetElementAt_ulong13rs_allocationPKmjj", (void *)&SC_SetElementAt2_ulong, true }, 1159 { "_Z21rsSetElementAt_ulong213rs_allocationPKDv2_mjj", (void *)&SC_SetElementAt2_ulong2, true }, 1160 { "_Z21rsSetElementAt_ulong313rs_allocationPKDv3_mjj", (void *)&SC_SetElementAt2_ulong3, true }, 1161 { "_Z21rsSetElementAt_ulong413rs_allocationPKDv4_mjj", (void *)&SC_SetElementAt2_ulong4, true }, 1162 { "_Z20rsSetElementAt_ulong13rs_allocationPKmjjj", (void *)&SC_SetElementAt3_ulong, true }, 1163 { "_Z21rsSetElementAt_ulong213rs_allocationPKDv2_mjjj", (void *)&SC_SetElementAt3_ulong2, true }, 1164 { "_Z21rsSetElementAt_ulong313rs_allocationPKDv3_mjjj", (void *)&SC_SetElementAt3_ulong3, true }, 1165 { "_Z21rsSetElementAt_ulong413rs_allocationPKDv4_mjjj", (void *)&SC_SetElementAt3_ulong4, true }, 1166 1167 { "_Z19rsSetElementAt_long13rs_allocationPKlj", (void *)&SC_SetElementAt1_long, true }, 1168 { "_Z20rsSetElementAt_long213rs_allocationPKDv2_lj", (void *)&SC_SetElementAt1_long2, true }, 1169 { "_Z20rsSetElementAt_long313rs_allocationPKDv3_lj", (void *)&SC_SetElementAt1_long3, true }, 1170 { "_Z20rsSetElementAt_long413rs_allocationPKDv4_lj", (void *)&SC_SetElementAt1_long4, true }, 1171 { "_Z19rsSetElementAt_long13rs_allocationPKljj", (void *)&SC_SetElementAt2_long, true }, 1172 { "_Z20rsSetElementAt_long213rs_allocationPKDv2_ljj", (void *)&SC_SetElementAt2_long2, true }, 1173 { "_Z20rsSetElementAt_long313rs_allocationPKDv3_ljj", (void *)&SC_SetElementAt2_long3, true }, 1174 { "_Z20rsSetElementAt_long413rs_allocationPKDv4_ljj", (void *)&SC_SetElementAt2_long4, true }, 1175 { "_Z19rsSetElementAt_long13rs_allocationPKljjj", (void *)&SC_SetElementAt3_long, true }, 1176 { "_Z20rsSetElementAt_long213rs_allocationPKDv2_ljjj", (void *)&SC_SetElementAt3_long2, true }, 1177 { "_Z20rsSetElementAt_long313rs_allocationPKDv3_ljjj", (void *)&SC_SetElementAt3_long3, true }, 1178 { "_Z20rsSetElementAt_long413rs_allocationPKDv4_ljjj", (void *)&SC_SetElementAt3_long4, true }, 1179 1180 { "_Z20rsSetElementAt_float13rs_allocationPKft", (void *)&SC_SetElementAt1_float, true }, 1181 { "_Z21rsSetElementAt_float213rs_allocationPKDv2_fj", (void *)&SC_SetElementAt1_float2, true }, 1182 { "_Z21rsSetElementAt_float313rs_allocationPKDv3_fj", (void *)&SC_SetElementAt1_float3, true }, 1183 { "_Z21rsSetElementAt_float413rs_allocationPKDv4_fj", (void *)&SC_SetElementAt1_float4, true }, 1184 { "_Z20rsSetElementAt_float13rs_allocationPKfjj", (void *)&SC_SetElementAt2_float, true }, 1185 { "_Z21rsSetElementAt_float213rs_allocationPKDv2_fjj", (void *)&SC_SetElementAt2_float2, true }, 1186 { "_Z21rsSetElementAt_float313rs_allocationPKDv3_fjj", (void *)&SC_SetElementAt2_float3, true }, 1187 { "_Z21rsSetElementAt_float413rs_allocationPKDv4_fjj", (void *)&SC_SetElementAt2_float4, true }, 1188 { "_Z20rsSetElementAt_float13rs_allocationPKfjjj", (void *)&SC_SetElementAt3_float, true }, 1189 { "_Z21rsSetElementAt_float213rs_allocationPKDv2_fjjj", (void *)&SC_SetElementAt3_float2, true }, 1190 { "_Z21rsSetElementAt_float313rs_allocationPKDv3_fjjj", (void *)&SC_SetElementAt3_float3, true }, 1191 { "_Z21rsSetElementAt_float413rs_allocationPKDv4_fjjj", (void *)&SC_SetElementAt3_float4, true }, 1192 1193 { "_Z21rsSetElementAt_double13rs_allocationPKdt", (void *)&SC_SetElementAt1_double, true }, 1194 { "_Z22rsSetElementAt_double213rs_allocationPKDv2_dj", (void *)&SC_SetElementAt1_double2, true }, 1195 { "_Z22rsSetElementAt_double313rs_allocationPKDv3_dj", (void *)&SC_SetElementAt1_double3, true }, 1196 { "_Z22rsSetElementAt_double413rs_allocationPKDv4_dj", (void *)&SC_SetElementAt1_double4, true }, 1197 { "_Z21rsSetElementAt_double13rs_allocationPKdjj", (void *)&SC_SetElementAt2_double, true }, 1198 { "_Z22rsSetElementAt_double213rs_allocationPKDv2_djj", (void *)&SC_SetElementAt2_double2, true }, 1199 { "_Z22rsSetElementAt_double313rs_allocationPKDv3_djj", (void *)&SC_SetElementAt2_double3, true }, 1200 { "_Z22rsSetElementAt_double413rs_allocationPKDv4_djj", (void *)&SC_SetElementAt2_double4, true }, 1201 { "_Z21rsSetElementAt_double13rs_allocationPKdjjj", (void *)&SC_SetElementAt3_double, true }, 1202 { "_Z22rsSetElementAt_double213rs_allocationPKDv2_djjj", (void *)&SC_SetElementAt3_double2, true }, 1203 { "_Z22rsSetElementAt_double313rs_allocationPKDv3_djjj", (void *)&SC_SetElementAt3_double3, true }, 1204 { "_Z22rsSetElementAt_double413rs_allocationPKDv4_djjj", (void *)&SC_SetElementAt3_double4, true }, 1205 1206 1207 // Refcounting 1208#ifndef __LP64__ 1209 { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_SetObject, true }, 1210 { "_Z10rsIsObject10rs_element", (void *)&SC_IsObject, true }, 1211 1212 { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_SetObject, true }, 1213 { "_Z10rsIsObject7rs_type", (void *)&SC_IsObject, true }, 1214 1215 { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_SetObject, true }, 1216 { "_Z10rsIsObject13rs_allocation", (void *)&SC_IsObject, true }, 1217 1218 { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_SetObject, true }, 1219 { "_Z10rsIsObject10rs_sampler", (void *)&SC_IsObject, true }, 1220 1221 { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_SetObject, true }, 1222 { "_Z10rsIsObject9rs_script", (void *)&SC_IsObject, true }, 1223#else 1224 { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_SetObject_ByRef, true }, 1225 { "_Z10rsIsObject10rs_element", (void *)&SC_IsObject_ByRef, true }, 1226 1227 { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_SetObject_ByRef, true }, 1228 { "_Z10rsIsObject7rs_type", (void *)&SC_IsObject_ByRef, true }, 1229 1230 { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_SetObject_ByRef, true }, 1231 { "_Z10rsIsObject13rs_allocation", (void *)&SC_IsObject_ByRef, true }, 1232 1233 { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_SetObject_ByRef, true }, 1234 { "_Z10rsIsObject10rs_sampler", (void *)&SC_IsObject_ByRef, true }, 1235 1236 { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_SetObject_ByRef, true }, 1237 { "_Z10rsIsObject9rs_script", (void *)&SC_IsObject_ByRef, true }, 1238#endif 1239 { "_Z13rsClearObjectP10rs_element", (void *)&SC_ClearObject, true }, 1240 { "_Z13rsClearObjectP7rs_type", (void *)&SC_ClearObject, true }, 1241 { "_Z13rsClearObjectP13rs_allocation", (void *)&SC_ClearObject, true }, 1242 { "_Z13rsClearObjectP10rs_sampler", (void *)&SC_ClearObject, true }, 1243 { "_Z13rsClearObjectP9rs_script", (void *)&SC_ClearObject, true }, 1244 1245 { "_Z11rsSetObjectP7rs_pathS_", (void *)&SC_SetObject, true }, 1246 { "_Z13rsClearObjectP7rs_path", (void *)&SC_ClearObject, true }, 1247 { "_Z10rsIsObject7rs_path", (void *)&SC_IsObject, true }, 1248 1249 { "_Z11rsSetObjectP7rs_meshS_", (void *)&SC_SetObject, true }, 1250 { "_Z13rsClearObjectP7rs_mesh", (void *)&SC_ClearObject, true }, 1251 { "_Z10rsIsObject7rs_mesh", (void *)&SC_IsObject, true }, 1252 1253 { "_Z11rsSetObjectP19rs_program_fragmentS_", (void *)&SC_SetObject, true }, 1254 { "_Z13rsClearObjectP19rs_program_fragment", (void *)&SC_ClearObject, true }, 1255 { "_Z10rsIsObject19rs_program_fragment", (void *)&SC_IsObject, true }, 1256 1257 { "_Z11rsSetObjectP17rs_program_vertexS_", (void *)&SC_SetObject, true }, 1258 { "_Z13rsClearObjectP17rs_program_vertex", (void *)&SC_ClearObject, true }, 1259 { "_Z10rsIsObject17rs_program_vertex", (void *)&SC_IsObject, true }, 1260 1261 { "_Z11rsSetObjectP17rs_program_rasterS_", (void *)&SC_SetObject, true }, 1262 { "_Z13rsClearObjectP17rs_program_raster", (void *)&SC_ClearObject, true }, 1263 { "_Z10rsIsObject17rs_program_raster", (void *)&SC_IsObject, true }, 1264 1265 { "_Z11rsSetObjectP16rs_program_storeS_", (void *)&SC_SetObject, true }, 1266 { "_Z13rsClearObjectP16rs_program_store", (void *)&SC_ClearObject, true }, 1267 { "_Z10rsIsObject16rs_program_store", (void *)&SC_IsObject, true }, 1268 1269 { "_Z11rsSetObjectP7rs_fontS_", (void *)&SC_SetObject, true }, 1270 { "_Z13rsClearObjectP7rs_font", (void *)&SC_ClearObject, true }, 1271 { "_Z10rsIsObject7rs_font", (void *)&SC_IsObject, true }, 1272 1273 // Allocation ops 1274 { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_AllocationSyncAll, true }, 1275 { "_Z20rsgAllocationSyncAll13rs_allocation", (void *)&SC_AllocationSyncAll, false }, 1276 { "_Z20rsgAllocationSyncAll13rs_allocationj", (void *)&SC_AllocationSyncAll2, false }, 1277 { "_Z20rsgAllocationSyncAll13rs_allocation24rs_allocation_usage_type", (void *)&SC_AllocationSyncAll2, false }, 1278 { "_Z15rsGetAllocationPKv", (void *)&SC_GetAllocation, true }, 1279#ifndef RS_COMPATIBILITY_LIB 1280 { "_Z18rsAllocationIoSend13rs_allocation", (void *)&SC_AllocationIoSend, false }, 1281 { "_Z21rsAllocationIoReceive13rs_allocation", (void *)&SC_AllocationIoReceive, false }, 1282#endif 1283 { "_Z23rsAllocationCopy1DRange13rs_allocationjjjS_jj", (void *)&SC_AllocationCopy1DRange, false }, 1284 { "_Z23rsAllocationCopy2DRange13rs_allocationjjj26rs_allocation_cubemap_facejjS_jjjS0_", (void *)&SC_AllocationCopy2DRange, false }, 1285 1286 // Messaging 1287 1288 { "_Z14rsSendToClienti", (void *)&SC_ToClient, false }, 1289 { "_Z14rsSendToClientiPKvj", (void *)&SC_ToClient2, false }, 1290 { "_Z22rsSendToClientBlockingi", (void *)&SC_ToClientBlocking, false }, 1291 { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_ToClientBlocking2, false }, 1292#ifndef RS_COMPATIBILITY_LIB 1293 { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_BindProgramFragment, false }, 1294 { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_BindProgramStore, false }, 1295 { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_BindProgramVertex, false }, 1296 { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_BindProgramRaster, false }, 1297 { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_BindSampler, false }, 1298 { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_BindTexture, false }, 1299 { "_Z15rsgBindConstant19rs_program_fragmentj13rs_allocation", (void *)&SC_BindFragmentConstant, false }, 1300 { "_Z15rsgBindConstant17rs_program_vertexj13rs_allocation", (void *)&SC_BindVertexConstant, false }, 1301 1302 { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadProjectionMatrix, false }, 1303 { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadModelMatrix, false }, 1304 { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_VpLoadTextureMatrix, false }, 1305 1306 { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_VpGetProjectionMatrix, false }, 1307 1308 { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_PfConstantColor, false }, 1309 1310 { "_Z11rsgGetWidthv", (void *)&SC_GetWidth, false }, 1311 { "_Z12rsgGetHeightv", (void *)&SC_GetHeight, false }, 1312 1313 1314 { "_Z11rsgDrawRectfffff", (void *)&SC_DrawRect, false }, 1315 { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_DrawQuad, false }, 1316 { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_DrawQuadTexCoords, false }, 1317 { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_DrawSpriteScreenspace, false }, 1318 1319 { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_DrawMesh, false }, 1320 { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_DrawMeshPrimitive, false }, 1321 { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_DrawMeshPrimitiveRange, false }, 1322 { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_MeshComputeBoundingBox, false }, 1323 1324 { "_Z11rsgDrawPath7rs_path", (void *)&SC_DrawPath, false }, 1325 1326 { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false }, 1327 { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false }, 1328 1329 { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false }, 1330 { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false }, 1331 { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false }, 1332 { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false }, 1333 1334 { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false }, 1335 { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false }, 1336 1337 { "_Z18rsgBindColorTarget13rs_allocationj", (void *)&SC_BindFrameBufferObjectColorTarget, false }, 1338 { "_Z18rsgBindDepthTarget13rs_allocation", (void *)&SC_BindFrameBufferObjectDepthTarget, false }, 1339 { "_Z19rsgClearColorTargetj", (void *)&SC_ClearFrameBufferObjectColorTarget, false }, 1340 { "_Z19rsgClearDepthTargetv", (void *)&SC_ClearFrameBufferObjectDepthTarget, false }, 1341 { "_Z24rsgClearAllRenderTargetsv", (void *)&SC_ClearFrameBufferObjectTargets, false }, 1342 1343 1344 { "_Z9rsForEach9rs_script13rs_allocationS0_", (void *)&SC_ForEach_SAA, true }, 1345 { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach_SAAU, true }, 1346 { "_Z9rsForEach9rs_script13rs_allocationS0_PKvPK14rs_script_call", (void *)&SC_ForEach_SAAUS, true }, 1347 { "_Z9rsForEach9rs_script13rs_allocationS0_PKvj", (void *)&SC_ForEach_SAAUL, true }, 1348 { "_Z9rsForEach9rs_script13rs_allocationS0_PKvjPK14rs_script_call", (void *)&SC_ForEach_SAAULS, true }, 1349#endif // RS_COMPATIBILITY_LIB 1350 1351#ifndef __LP64__ 1352 // time 1353 { "_Z6rsTimePi", (void *)&SC_Time, true }, 1354 { "_Z11rsLocaltimeP5rs_tmPKi", (void *)&SC_LocalTime, true }, 1355#else 1356 // time 1357 { "_Z6rsTimePl", (void *)&SC_Time, true }, 1358 { "_Z11rsLocaltimeP5rs_tmPKl", (void *)&SC_LocalTime, true }, 1359#endif 1360 { "_Z14rsUptimeMillisv", (void*)&SC_UptimeMillis, true }, 1361 { "_Z13rsUptimeNanosv", (void*)&SC_UptimeNanos, true }, 1362 { "_Z7rsGetDtv", (void*)&SC_GetDt, false }, 1363 1364 // misc 1365#ifndef RS_COMPATIBILITY_LIB 1366 { "_Z5colorffff", (void *)&SC_Color, false }, 1367 { "_Z9rsgFinishv", (void *)&SC_Finish, false }, 1368#endif 1369 1370 { NULL, NULL, false } 1371}; 1372 1373#ifdef RS_COMPATIBILITY_LIB 1374 1375////////////////////////////////////////////////////////////////////////////// 1376// Compatibility Library entry points 1377////////////////////////////////////////////////////////////////////////////// 1378 1379#define IS_CLEAR_SET_OBJ(t) \ 1380 bool rsIsObject(t src) { \ 1381 return src.p != NULL; \ 1382 } \ 1383 void __attribute__((overloadable)) rsClearObject(t *dst) { \ 1384 return SC_ClearObject(reinterpret_cast<rs_object_base *>(dst)); \ 1385 } \ 1386 void __attribute__((overloadable)) rsSetObject(t *dst, t src) { \ 1387 return SC_SetObject(reinterpret_cast<rs_object_base *>(dst), (ObjectBase*)src.p); \ 1388 } 1389 1390IS_CLEAR_SET_OBJ(::rs_element) 1391IS_CLEAR_SET_OBJ(::rs_type) 1392IS_CLEAR_SET_OBJ(::rs_allocation) 1393IS_CLEAR_SET_OBJ(::rs_sampler) 1394IS_CLEAR_SET_OBJ(::rs_script) 1395#undef IS_CLEAR_SET_OBJ 1396 1397static void SC_ForEach_SAA(::rs_script target, 1398 ::rs_allocation in, 1399 ::rs_allocation out) { 1400 Context *rsc = RsdCpuReference::getTlsContext(); 1401 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, NULL, 0, NULL); 1402} 1403 1404static void SC_ForEach_SAAUS(::rs_script target, 1405 ::rs_allocation in, 1406 ::rs_allocation out, 1407 const void *usr, 1408 const RsScriptCall *call) { 1409 Context *rsc = RsdCpuReference::getTlsContext(); 1410 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, usr, 0, call); 1411} 1412 1413static void SC_ForEach_SAAUL(::rs_script target, 1414 ::rs_allocation in, 1415 ::rs_allocation out, 1416 const void *usr, 1417 uint32_t usrLen) { 1418 Context *rsc = RsdCpuReference::getTlsContext(); 1419 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, usr, usrLen, NULL); 1420} 1421 1422static void SC_ForEach_SAAULS(::rs_script target, 1423 ::rs_allocation in, 1424 ::rs_allocation out, 1425 const void *usr, 1426 uint32_t usrLen, 1427 const RsScriptCall *call) { 1428 Context *rsc = RsdCpuReference::getTlsContext(); 1429 rsrForEach(rsc, (Script*)target.p, (Allocation*)in.p, (Allocation*)out.p, usr, usrLen, call); 1430} 1431 1432const Allocation * rsGetAllocation(const void *ptr) { 1433 return SC_GetAllocation(ptr); 1434} 1435 1436void __attribute__((overloadable)) rsAllocationIoSend(::rs_allocation a) { 1437 SC_AllocationIoSend((Allocation *)a.p); 1438} 1439 1440void __attribute__((overloadable)) rsAllocationIoReceive(::rs_allocation a) { 1441 SC_AllocationIoReceive((Allocation *)a.p); 1442} 1443 1444 1445void __attribute__((overloadable)) rsAllocationCopy1DRange( 1446 ::rs_allocation dstAlloc, 1447 uint32_t dstOff, uint32_t dstMip, uint32_t count, 1448 ::rs_allocation srcAlloc, 1449 uint32_t srcOff, uint32_t srcMip) { 1450 SC_AllocationCopy1DRange(dstAlloc, dstOff, dstMip, count, 1451 srcAlloc, srcOff, srcMip); 1452} 1453 1454void __attribute__((overloadable)) rsAllocationCopy2DRange( 1455 ::rs_allocation dstAlloc, 1456 uint32_t dstXoff, uint32_t dstYoff, 1457 uint32_t dstMip, rs_allocation_cubemap_face dstFace, 1458 uint32_t width, uint32_t height, 1459 ::rs_allocation srcAlloc, 1460 uint32_t srcXoff, uint32_t srcYoff, 1461 uint32_t srcMip, rs_allocation_cubemap_face srcFace) { 1462 SC_AllocationCopy2DRange(dstAlloc, dstXoff, dstYoff, 1463 dstMip, dstFace, width, height, 1464 srcAlloc, srcXoff, srcYoff, 1465 srcMip, srcFace); 1466} 1467 1468void __attribute__((overloadable)) rsForEach(::rs_script script, 1469 ::rs_allocation in, 1470 ::rs_allocation out, 1471 const void *usr, 1472 const rs_script_call *call) { 1473 return SC_ForEach_SAAUS(script, in, out, usr, (RsScriptCall*)call); 1474} 1475 1476void __attribute__((overloadable)) rsForEach(::rs_script script, 1477 ::rs_allocation in, 1478 ::rs_allocation out) { 1479 return SC_ForEach_SAA(script, in, out); 1480} 1481 1482void __attribute__((overloadable)) rsForEach(::rs_script script, 1483 ::rs_allocation in, 1484 ::rs_allocation out, 1485 const void *usr, 1486 uint32_t usrLen) { 1487 return SC_ForEach_SAAUL(script, in, out, usr, usrLen); 1488} 1489 1490void __attribute__((overloadable)) rsForEach(::rs_script script, 1491 ::rs_allocation in, 1492 ::rs_allocation out, 1493 const void *usr, 1494 uint32_t usrLen, 1495 const rs_script_call *call) { 1496 return SC_ForEach_SAAULS(script, in, out, usr, usrLen, (RsScriptCall*)call); 1497} 1498 1499int rsTime(int *timer) { 1500 return SC_Time(timer); 1501} 1502 1503rs_tm* rsLocaltime(rs_tm* local, const int *timer) { 1504 return (rs_tm*)(SC_LocalTime((tm*)local, (long*)timer)); 1505} 1506 1507int64_t rsUptimeMillis() { 1508 Context *rsc = RsdCpuReference::getTlsContext(); 1509 return rsrUptimeMillis(rsc); 1510} 1511 1512int64_t rsUptimeNanos() { 1513 return SC_UptimeNanos(); 1514} 1515 1516float rsGetDt() { 1517 return SC_GetDt(); 1518} 1519 1520uint32_t rsSendToClient(int cmdID) { 1521 return SC_ToClient(cmdID); 1522} 1523 1524uint32_t rsSendToClient(int cmdID, const void *data, uint32_t len) { 1525 return SC_ToClient2(cmdID, data, len); 1526} 1527 1528uint32_t rsSendToClientBlocking(int cmdID) { 1529 return SC_ToClientBlocking(cmdID); 1530} 1531 1532uint32_t rsSendToClientBlocking(int cmdID, const void *data, uint32_t len) { 1533 return SC_ToClientBlocking2(cmdID, data, len); 1534} 1535 1536static void SC_debugF(const char *s, float f) { 1537 ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f))); 1538} 1539static void SC_debugFv2(const char *s, float f1, float f2) { 1540 ALOGD("%s {%f, %f}", s, f1, f2); 1541} 1542static void SC_debugFv3(const char *s, float f1, float f2, float f3) { 1543 ALOGD("%s {%f, %f, %f}", s, f1, f2, f3); 1544} 1545static void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) { 1546 ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4); 1547} 1548static void SC_debugF2(const char *s, float2 f) { 1549 ALOGD("%s {%f, %f}", s, f.x, f.y); 1550} 1551static void SC_debugF3(const char *s, float3 f) { 1552 ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z); 1553} 1554static void SC_debugF4(const char *s, float4 f) { 1555 ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w); 1556} 1557static void SC_debugD(const char *s, double d) { 1558 ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d))); 1559} 1560static void SC_debugFM4v4(const char *s, const float *f) { 1561 ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]); 1562 ALOGD("%s %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]); 1563 ALOGD("%s %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]); 1564 ALOGD("%s %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]); 1565} 1566static void SC_debugFM3v3(const char *s, const float *f) { 1567 ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]); 1568 ALOGD("%s %f, %f, %f", s, f[1], f[4], f[7]); 1569 ALOGD("%s %f, %f, %f}",s, f[2], f[5], f[8]); 1570} 1571static void SC_debugFM2v2(const char *s, const float *f) { 1572 ALOGD("%s {%f, %f", s, f[0], f[2]); 1573 ALOGD("%s %f, %f}",s, f[1], f[3]); 1574} 1575static void SC_debugI8(const char *s, char c) { 1576 ALOGD("%s %hhd 0x%hhx", s, c, (unsigned char)c); 1577} 1578static void SC_debugC2(const char *s, char2 c) { 1579 ALOGD("%s {%hhd, %hhd} 0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y); 1580} 1581static void SC_debugC3(const char *s, char3 c) { 1582 ALOGD("%s {%hhd, %hhd, %hhd} 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z); 1583} 1584static void SC_debugC4(const char *s, char4 c) { 1585 ALOGD("%s {%hhd, %hhd, %hhd, %hhd} 0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.w, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z, (unsigned char)c.w); 1586} 1587static void SC_debugU8(const char *s, unsigned char c) { 1588 ALOGD("%s %hhu 0x%hhx", s, c, c); 1589} 1590static void SC_debugUC2(const char *s, uchar2 c) { 1591 ALOGD("%s {%hhu, %hhu} 0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y); 1592} 1593static void SC_debugUC3(const char *s, uchar3 c) { 1594 ALOGD("%s {%hhu, %hhu, %hhu} 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.x, c.y, c.z); 1595} 1596static void SC_debugUC4(const char *s, uchar4 c) { 1597 ALOGD("%s {%hhu, %hhu, %hhu, %hhu} 0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w); 1598} 1599static void SC_debugI16(const char *s, short c) { 1600 ALOGD("%s %hd 0x%hx", s, c, c); 1601} 1602static void SC_debugS2(const char *s, short2 c) { 1603 ALOGD("%s {%hd, %hd} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 1604} 1605static void SC_debugS3(const char *s, short3 c) { 1606 ALOGD("%s {%hd, %hd, %hd} 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z); 1607} 1608static void SC_debugS4(const char *s, short4 c) { 1609 ALOGD("%s {%hd, %hd, %hd, %hd} 0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w); 1610} 1611static void SC_debugU16(const char *s, unsigned short c) { 1612 ALOGD("%s %hu 0x%hx", s, c, c); 1613} 1614static void SC_debugUS2(const char *s, ushort2 c) { 1615 ALOGD("%s {%hu, %hu} 0x%hx 0x%hx", s, c.x, c.y, c.x, c.y); 1616} 1617static void SC_debugUS3(const char *s, ushort3 c) { 1618 ALOGD("%s {%hu, %hu, %hu} 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z); 1619} 1620static void SC_debugUS4(const char *s, ushort4 c) { 1621 ALOGD("%s {%hu, %hu, %hu, %hu} 0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w); 1622} 1623static void SC_debugI32(const char *s, int32_t i) { 1624 ALOGD("%s %d 0x%x", s, i, i); 1625} 1626static void SC_debugI2(const char *s, int2 i) { 1627 ALOGD("%s {%d, %d} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 1628} 1629static void SC_debugI3(const char *s, int3 i) { 1630 ALOGD("%s {%d, %d, %d} 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z); 1631} 1632static void SC_debugI4(const char *s, int4 i) { 1633 ALOGD("%s {%d, %d, %d, %d} 0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x, i.y, i.z, i.w); 1634} 1635static void SC_debugU32(const char *s, uint32_t i) { 1636 ALOGD("%s %u 0x%x", s, i, i); 1637} 1638static void SC_debugUI2(const char *s, uint2 i) { 1639 ALOGD("%s {%u, %u} 0x%x 0x%x", s, i.x, i.y, i.x, i.y); 1640} 1641static void SC_debugUI3(const char *s, uint3 i) { 1642 ALOGD("%s {%u, %u, %u} 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z); 1643} 1644static void SC_debugUI4(const char *s, uint4 i) { 1645 ALOGD("%s {%u, %u, %u, %u} 0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x, i.y, i.z, i.w); 1646} 1647static void SC_debugLL64(const char *s, long long ll) { 1648 ALOGD("%s %lld 0x%llx", s, ll, ll); 1649} 1650static void SC_debugL2(const char *s, long2 ll) { 1651 ALOGD("%s {%lld, %lld} 0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y); 1652} 1653static void SC_debugL3(const char *s, long3 ll) { 1654 ALOGD("%s {%lld, %lld, %lld} 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.x, ll.y, ll.z); 1655} 1656static void SC_debugL4(const char *s, long4 ll) { 1657 ALOGD("%s {%lld, %lld, %lld, %lld} 0x%llx 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.w, ll.x, ll.y, ll.z, ll.w); 1658} 1659static void SC_debugULL64(const char *s, unsigned long long ll) { 1660 ALOGD("%s %llu 0x%llx", s, ll, ll); 1661} 1662static void SC_debugUL2(const char *s, ulong2 ll) { 1663 ALOGD("%s {%llu, %llu} 0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y); 1664} 1665static void SC_debugUL3(const char *s, ulong3 ll) { 1666 ALOGD("%s {%llu, %llu, %llu} 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.x, ll.y, ll.z); 1667} 1668static void SC_debugUL4(const char *s, ulong4 ll) { 1669 ALOGD("%s {%llu, %llu, %llu, %llu} 0x%llx 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.w, ll.x, ll.y, ll.z, ll.w); 1670} 1671static void SC_debugP(const char *s, const void *p) { 1672 ALOGD("%s %p", s, p); 1673} 1674 1675// TODO: allocation ops, messaging, time 1676 1677void rsDebug(const char *s, float f) { 1678 SC_debugF(s, f); 1679} 1680 1681void rsDebug(const char *s, float f1, float f2) { 1682 SC_debugFv2(s, f1, f2); 1683} 1684 1685void rsDebug(const char *s, float f1, float f2, float f3) { 1686 SC_debugFv3(s, f1, f2, f3); 1687} 1688 1689void rsDebug(const char *s, float f1, float f2, float f3, float f4) { 1690 SC_debugFv4(s, f1, f2, f3, f4); 1691} 1692 1693void rsDebug(const char *s, const float2 *f) { 1694 SC_debugF2(s, *f); 1695} 1696 1697void rsDebug(const char *s, const float3 *f) { 1698 SC_debugF3(s, *f); 1699} 1700 1701void rsDebug(const char *s, const float4 *f) { 1702 SC_debugF4(s, *f); 1703} 1704 1705void rsDebug(const char *s, double d) { 1706 SC_debugD(s, d); 1707} 1708 1709void rsDebug(const char *s, const rs_matrix4x4 *m) { 1710 SC_debugFM4v4(s, (float *) m); 1711} 1712 1713void rsDebug(const char *s, const rs_matrix3x3 *m) { 1714 SC_debugFM3v3(s, (float *) m); 1715} 1716 1717void rsDebug(const char *s, const rs_matrix2x2 *m) { 1718 SC_debugFM2v2(s, (float *) m); 1719} 1720 1721void rsDebug(const char *s, char c) { 1722 SC_debugI8(s, c); 1723} 1724 1725void rsDebug(const char *s, const char2 *c) { 1726 SC_debugC2(s, *c); 1727} 1728 1729void rsDebug(const char *s, const char3 *c) { 1730 SC_debugC3(s, *c); 1731} 1732 1733void rsDebug(const char *s, const char4 *c) { 1734 SC_debugC4(s, *c); 1735} 1736 1737void rsDebug(const char *s, unsigned char c) { 1738 SC_debugU8(s, c); 1739} 1740 1741void rsDebug(const char *s, const uchar2 *c) { 1742 SC_debugUC2(s, *c); 1743} 1744 1745void rsDebug(const char *s, const uchar3 *c) { 1746 SC_debugUC3(s, *c); 1747} 1748 1749void rsDebug(const char *s, const uchar4 *c) { 1750 SC_debugUC4(s, *c); 1751} 1752 1753void rsDebug(const char *s, short c) { 1754 SC_debugI16(s, c); 1755} 1756 1757void rsDebug(const char *s, const short2 *c) { 1758 SC_debugS2(s, *c); 1759} 1760 1761void rsDebug(const char *s, const short3 *c) { 1762 SC_debugS3(s, *c); 1763} 1764 1765void rsDebug(const char *s, const short4 *c) { 1766 SC_debugS4(s, *c); 1767} 1768 1769void rsDebug(const char *s, unsigned short c) { 1770 SC_debugU16(s, c); 1771} 1772 1773void rsDebug(const char *s, const ushort2 *c) { 1774 SC_debugUS2(s, *c); 1775} 1776 1777void rsDebug(const char *s, const ushort3 *c) { 1778 SC_debugUS3(s, *c); 1779} 1780 1781void rsDebug(const char *s, const ushort4 *c) { 1782 SC_debugUS4(s, *c); 1783} 1784 1785void rsDebug(const char *s, int c) { 1786 SC_debugI32(s, c); 1787} 1788 1789void rsDebug(const char *s, const int2 *c) { 1790 SC_debugI2(s, *c); 1791} 1792 1793void rsDebug(const char *s, const int3 *c) { 1794 SC_debugI3(s, *c); 1795} 1796 1797void rsDebug(const char *s, const int4 *c) { 1798 SC_debugI4(s, *c); 1799} 1800 1801void rsDebug(const char *s, unsigned int c) { 1802 SC_debugU32(s, c); 1803} 1804 1805void rsDebug(const char *s, const uint2 *c) { 1806 SC_debugUI2(s, *c); 1807} 1808 1809void rsDebug(const char *s, const uint3 *c) { 1810 SC_debugUI3(s, *c); 1811} 1812 1813void rsDebug(const char *s, const uint4 *c) { 1814 SC_debugUI4(s, *c); 1815} 1816 1817void rsDebug(const char *s, long c) { 1818 SC_debugLL64(s, c); 1819} 1820 1821void rsDebug(const char *s, long long c) { 1822 SC_debugLL64(s, c); 1823} 1824 1825void rsDebug(const char *s, const long2 *c) { 1826 SC_debugL2(s, *c); 1827} 1828 1829void rsDebug(const char *s, const long3 *c) { 1830 SC_debugL3(s, *c); 1831} 1832 1833void rsDebug(const char *s, const long4 *c) { 1834 SC_debugL4(s, *c); 1835} 1836 1837void rsDebug(const char *s, unsigned long c) { 1838 SC_debugULL64(s, c); 1839} 1840 1841void rsDebug(const char *s, unsigned long long c) { 1842 SC_debugULL64(s, c); 1843} 1844 1845void rsDebug(const char *s, const ulong2 *c) { 1846 SC_debugUL2(s, *c); 1847} 1848 1849void rsDebug(const char *s, const ulong3 *c) { 1850 SC_debugUL3(s, *c); 1851} 1852 1853void rsDebug(const char *s, const ulong4 *c) { 1854 SC_debugUL4(s, *c); 1855} 1856 1857// FIXME: We need to export these function signatures for the compatibility 1858// library. The C++ name mangling that LLVM uses for ext_vector_type requires 1859// different versions for "long" vs. "long long". Note that the called 1860// functions are still using the appropriate 64-bit sizes. 1861typedef long l2 __attribute__((ext_vector_type(2))); 1862typedef long l3 __attribute__((ext_vector_type(3))); 1863typedef long l4 __attribute__((ext_vector_type(4))); 1864typedef unsigned long ul2 __attribute__((ext_vector_type(2))); 1865typedef unsigned long ul3 __attribute__((ext_vector_type(3))); 1866typedef unsigned long ul4 __attribute__((ext_vector_type(4))); 1867 1868void rsDebug(const char *s, const l2 *c) { 1869 SC_debugL2(s, *(const long2 *)c); 1870} 1871 1872void rsDebug(const char *s, const l3 *c) { 1873 SC_debugL3(s, *(const long3 *)c); 1874} 1875 1876void rsDebug(const char *s, const l4 *c) { 1877 SC_debugL4(s, *(const long4 *)c); 1878} 1879 1880void rsDebug(const char *s, const ul2 *c) { 1881 SC_debugUL2(s, *(const ulong2 *)c); 1882} 1883 1884void rsDebug(const char *s, const ul3 *c) { 1885 SC_debugUL3(s, *(const ulong3 *)c); 1886} 1887 1888void rsDebug(const char *s, const ul4 *c) { 1889 SC_debugUL4(s, *(const ulong4 *)c); 1890} 1891 1892void rsDebug(const char *s, const void *p) { 1893 SC_debugP(s, p); 1894} 1895#endif // RS_COMPATIBILITY_LIB 1896 1897extern const RsdCpuReference::CpuSymbol * rsdLookupRuntimeStub(Context * pContext, char const* name) { 1898 ScriptC *s = (ScriptC *)pContext; 1899 const RsdCpuReference::CpuSymbol *syms = gSyms; 1900 const RsdCpuReference::CpuSymbol *sym = NULL; 1901 1902 if (!sym) { 1903 while (syms->fnPtr) { 1904 if (!strcmp(syms->name, name)) { 1905 return syms; 1906 } 1907 syms++; 1908 } 1909 } 1910 1911 return NULL; 1912} 1913