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