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