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