| 1584 | } |
| 1585 | |
| 1586 | static uint32_t CalculateStd140MemberSize(const ShaderResourceTypeInfo* type_infos, const ShaderResourceMember& member, bool update_offsets) |
| 1587 | { |
| 1588 | uint32_t element_size = 0; |
| 1589 | |
| 1590 | if (member.m_Type.m_UseTypeIndex) |
| 1591 | { |
| 1592 | // Nested struct |
| 1593 | uint32_t struct_size = CalculateStd140StructSize(type_infos, member.m_Type.m_TypeIndex, update_offsets); |
| 1594 | |
| 1595 | // Structs are always rounded up to 16 in std140 |
| 1596 | element_size = DM_ALIGN(struct_size, 16); |
| 1597 | } |
| 1598 | else |
| 1599 | { |
| 1600 | element_size = GetShaderTypeSize(member.m_Type.m_ShaderType); |
| 1601 | } |
| 1602 | |
| 1603 | // Arrays: stride rounded up to 16 |
| 1604 | if (member.m_ElementCount > 1) |
| 1605 | { |
| 1606 | uint32_t stride = DM_ALIGN(element_size, 16); |
| 1607 | return stride * member.m_ElementCount; |
| 1608 | } |
| 1609 | |
| 1610 | return element_size; |
| 1611 | } |
| 1612 | |
| 1613 | static uint32_t CalculateStd140StructSize(const ShaderResourceTypeInfo* type_infos, uint32_t type_index, bool update_offsets) |
| 1614 | { |
no test coverage detected