MCPcopy Create free account
hub / github.com/defold/defold / HashTypeRecursive

Function HashTypeRecursive

engine/graphics/src/graphics.cpp:1654–1693  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1652 }
1653
1654 static void HashTypeRecursive(uint32_t type_index, const ShaderResourceTypeInfo* types, uint32_t num_types, HashState32* hash_state, bool* visited)
1655 {
1656 assert(type_index < num_types);
1657
1658 if (visited[type_index])
1659 return;
1660
1661 visited[type_index] = true;
1662
1663 const ShaderResourceTypeInfo& type = types[type_index];
1664
1665 for (uint32_t j = 0; j < type.m_MemberCount; ++j)
1666 {
1667 const auto& member = type.m_Members[j];
1668
1669 // Hash member layout
1670 dmHashUpdateBuffer32(hash_state, &member.m_Offset, sizeof(member.m_Offset));
1671 dmHashUpdateBuffer32(hash_state, &member.m_ElementCount, sizeof(member.m_ElementCount));
1672
1673 uint8_t use_type_index = member.m_Type.m_UseTypeIndex ? 1 : 0;
1674 dmHashUpdateBuffer32(hash_state, &use_type_index, sizeof(use_type_index));
1675
1676 if (use_type_index)
1677 {
1678 uint32_t child_type = member.m_Type.m_TypeIndex;
1679 // Hash the type's name so the layout hash is independent of type array order
1680 // (shader reflection may order types differently than manually built layouts).
1681 dmhash_t child_name_hash = types[child_type].m_NameHash;
1682 dmHashUpdateBuffer32(hash_state, &child_name_hash, sizeof(child_name_hash));
1683
1684 // Recurse into referenced type
1685 HashTypeRecursive(child_type, types, num_types, hash_state, visited);
1686 }
1687 else
1688 {
1689 ShaderDesc::ShaderDataType shader_type = member.m_Type.m_ShaderType;
1690 dmHashUpdateBuffer32(hash_state, &shader_type, sizeof(shader_type));
1691 }
1692 }
1693 }
1694
1695 void UpdateShaderTypesOffsets(ShaderResourceTypeInfo* type_infos, uint32_t num_type_infos)
1696 {

Callers 1

GetUniformBufferLayoutFunction · 0.85

Calls 2

dmHashUpdateBuffer32Function · 0.85
assertFunction · 0.50

Tested by

no test coverage detected