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