18e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk#ifndef _RS_CORE_H_ 28e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk#define _RS_CORE_H_ 38e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 48e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk/***************************************************************************** 58e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * CAUTION 68e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 78e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * The following structure layout provides a more efficient way to access 88e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * internal members of the C++ class Allocation owned by librs. Unfortunately, 98e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * since this class has virtual members, we can't simply use offsetof() or any 108e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * other compiler trickery to dynamically get the appropriate values at 118e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * build-time. This layout may need to be updated whenever 128e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * frameworks/base/libs/rs/rsAllocation.h is modified. 138e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 148e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * Having the layout information available in this file allows us to 158e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * accelerate functionality like rsAllocationGetDimX(). Without this 168e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * information, we would not be able to inline the bitcode, thus resulting in 178e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * potential runtime performance penalties for tight loops operating on 188e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * allocations. 198e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 208e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk *****************************************************************************/ 218e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef enum { 228e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk RS_ALLOCATION_MIPMAP_NONE = 0, 238e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk RS_ALLOCATION_MIPMAP_FULL = 1, 248e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk RS_ALLOCATION_MIPMAP_ON_SYNC_TO_TEXTURE = 2 258e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} rs_allocation_mipmap_control; 268e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 278e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef struct Allocation { 288e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk char __pad[28]; 298e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 308e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void * drv; 318e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 328e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk const void *type; 338e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t usageFlags; 348e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_allocation_mipmap_control mipmapControl; 358e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t dimensionX; 368e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t dimensionY; 378e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t dimensionZ; 388e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t elementSizeBytes; 398e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool hasMipmaps; 408e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool hasFaces; 418e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool hasReferences; 428e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void * usrPtr; 438e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk int32_t surfaceTextureID; 448e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void * wndSurface; 459d0c4ac3620b32c4b312ceec6c3d07612a662870Jason Sams void * surfaceTexture; 46561df916775aa38f9b915889ded8824da02bc03fJason Sams rs_data_type eType; 478e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } state; 488e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 498e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct DrvState { 508e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void * mallocPtr; 51ce5cb899cf40c3b6d6549410d9cdfcb5712fbf27Jason Sams uint32_t stride; 528e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } drvState; 538e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } mHal; 548e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} Allocation_t; 558e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 568e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk/***************************************************************************** 578e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * CAUTION 588e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 598e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * The following structure layout provides a more efficient way to access 608e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * internal members of the C++ class ProgramStore owned by librs. Unfortunately, 618e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * since this class has virtual members, we can't simply use offsetof() or any 628e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * other compiler trickery to dynamically get the appropriate values at 638e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * build-time. This layout may need to be updated whenever 648e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * frameworks/base/libs/rs/rsProgramStore.h is modified. 658e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 668e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * Having the layout information available in this file allows us to 678e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * accelerate functionality like rsgProgramStoreGetDepthFunc(). Without this 688e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * information, we would not be able to inline the bitcode, thus resulting in 698e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * potential runtime performance penalties for tight loops operating on 708e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * program store. 718e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 728e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk *****************************************************************************/ 738e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef struct ProgramStore { 748e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk char __pad[36]; 758e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 768e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 778e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool ditherEnable; 788e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool colorRWriteEnable; 798e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool colorGWriteEnable; 808e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool colorBWriteEnable; 818e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool colorAWriteEnable; 828e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_blend_src_func blendSrc; 838e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_blend_dst_func blendDst; 848e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool depthWriteEnable; 858e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_depth_func depthFunc; 868e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } state; 878e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } mHal; 888e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} ProgramStore_t; 898e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 908e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk/***************************************************************************** 918e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * CAUTION 928e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 938e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * The following structure layout provides a more efficient way to access 948e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * internal members of the C++ class ProgramRaster owned by librs. Unfortunately, 958e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * since this class has virtual members, we can't simply use offsetof() or any 968e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * other compiler trickery to dynamically get the appropriate values at 978e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * build-time. This layout may need to be updated whenever 988e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * frameworks/base/libs/rs/rsProgramRaster.h is modified. 998e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1008e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * Having the layout information available in this file allows us to 1018e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * accelerate functionality like rsgProgramRasterGetCullMode(). Without this 1028e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * information, we would not be able to inline the bitcode, thus resulting in 1038e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * potential runtime performance penalties for tight loops operating on 1048e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * program raster. 1058e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1068e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk *****************************************************************************/ 1078e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef struct ProgramRaster { 1088e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk char __pad[36]; 1098e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 1108e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 1118e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool pointSprite; 1128e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_cull_mode cull; 1138e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } state; 1148e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } mHal; 1158e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} ProgramRaster_t; 1168e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 1178e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk/***************************************************************************** 1188e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * CAUTION 1198e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1208e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * The following structure layout provides a more efficient way to access 1218e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * internal members of the C++ class Sampler owned by librs. Unfortunately, 1228e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * since this class has virtual members, we can't simply use offsetof() or any 1238e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * other compiler trickery to dynamically get the appropriate values at 1248e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * build-time. This layout may need to be updated whenever 1258e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * frameworks/base/libs/rs/rsSampler.h is modified. 1268e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1278e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * Having the layout information available in this file allows us to 1288e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * accelerate functionality like rsgProgramRasterGetMagFilter(). Without this 1298e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * information, we would not be able to inline the bitcode, thus resulting in 1308e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * potential runtime performance penalties for tight loops operating on 1318e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * samplers. 1328e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1338e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk *****************************************************************************/ 1348e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef struct Sampler { 1358e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk char __pad[32]; 1368e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 1378e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 1388e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_sampler_value magFilter; 1398e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_sampler_value minFilter; 1408e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_sampler_value wrapS; 1418e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_sampler_value wrapT; 1428e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_sampler_value wrapR; 1438e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk float aniso; 1448e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } state; 1458e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } mHal; 1468e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} Sampler_t; 1478e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 1488e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk/***************************************************************************** 1498e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * CAUTION 1508e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1518e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * The following structure layout provides a more efficient way to access 1528e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * internal members of the C++ class Element owned by librs. Unfortunately, 1538e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * since this class has virtual members, we can't simply use offsetof() or any 1548e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * other compiler trickery to dynamically get the appropriate values at 1558e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * build-time. This layout may need to be updated whenever 1568e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * frameworks/base/libs/rs/rsElement.h is modified. 1578e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1588e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * Having the layout information available in this file allows us to 1598e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * accelerate functionality like rsElementGetSubElementCount(). Without this 1608e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * information, we would not be able to inline the bitcode, thus resulting in 1618e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * potential runtime performance penalties for tight loops operating on 1628e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * elements. 1638e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1648e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk *****************************************************************************/ 1658e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef struct Element { 1668e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk char __pad[28]; 1678e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 1688e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void *drv; 1698e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 1708e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_data_type dataType; 1718e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_data_kind dataKind; 1728e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t vectorSize; 1738e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t elementSizeBytes; 1748e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 1758e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk // Subelements 1768e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk const void **fields; 1778e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t *fieldArraySizes; 1788e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk const char **fieldNames; 1798e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t *fieldNameLengths; 1808e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t *fieldOffsetBytes; 1818e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t fieldsCount; 1828e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } state; 1838e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } mHal; 1848e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} Element_t; 1858e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 1868e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk/***************************************************************************** 1878e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * CAUTION 1888e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1898e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * The following structure layout provides a more efficient way to access 1908e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * internal members of the C++ class Type owned by librs. Unfortunately, 1918e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * since this class has virtual members, we can't simply use offsetof() or any 1928e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * other compiler trickery to dynamically get the appropriate values at 1938e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * build-time. This layout may need to be updated whenever 1948e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * frameworks/base/libs/rs/rsType.h is modified. 1958e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 1968e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * Having the layout information available in this file allows us to 1978e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * accelerate functionality like rsAllocationGetElement(). Without this 1988e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * information, we would not be able to inline the bitcode, thus resulting in 1998e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * potential runtime performance penalties for tight loops operating on 2008e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * types. 2018e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 2028e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk *****************************************************************************/ 2038e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef struct Type { 2048e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk char __pad[28]; 2058e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 2068e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void *drv; 2078e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 2088e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk const void * element; 2098e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t dimX; 2108e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t dimY; 2118e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t dimZ; 2128e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t *lodDimX; 2138e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t *lodDimY; 2148e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t *lodDimZ; 2158e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t *lodOffset; 2168e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t lodCount; 2178e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk bool faces; 2188e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } state; 2198e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } mHal; 2208e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} Type_t; 2218e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 2228e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk/***************************************************************************** 2238e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * CAUTION 2248e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 2258e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * The following structure layout provides a more efficient way to access 2268e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * internal members of the C++ class Mesh owned by librs. Unfortunately, 2278e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * since this class has virtual members, we can't simply use offsetof() or any 2288e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * other compiler trickery to dynamically get the appropriate values at 2298e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * build-time. This layout may need to be updated whenever 2308e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * frameworks/base/libs/rs/rsMesh.h is modified. 2318e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 2328e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * Having the layout information available in this file allows us to 2338e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * accelerate functionality like rsMeshGetVertexAllocationCount(). Without this 2348e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * information, we would not be able to inline the bitcode, thus resulting in 2358e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * potential runtime performance penalties for tight loops operating on 2368e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * meshes. 2378e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk * 2388e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk *****************************************************************************/ 2398e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouktypedef struct Mesh { 2408e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk char __pad[28]; 2418e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 2428e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void *drv; 2438e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk struct { 2448e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void **vertexBuffers; 2458e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t vertexBuffersCount; 2468e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk 2478e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk // indexBuffers[i] could be NULL, in which case only primitives[i] is used 2488e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk void **indexBuffers; 2498e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t indexBuffersCount; 2508e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk rs_primitive *primitives; 2518e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk uint32_t primitivesCount; 2528e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } state; 2538e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk } mHal; 2548e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk} Mesh_t; 2558e7b2839549af7aa96da2ba503238a245e08c2b3Alex Sakhartchouk#endif // _RS_CORE_H_ 256