diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-03-29 16:10:18 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-03-30 15:24:32 +0300 |
commit | 28880d0a0342982ce45217a4ef1dc3abfb99c113 (patch) | |
tree | 6874ac0b9862ccf2a44af404495953ac2e2b6b81 /dxil_converter.cpp | |
parent | 307c7f9c5d65846695cbe1be91a4c8e7f12536a4 (diff) |
Fix some build reproducibility issues.
Function arguments building SPIR-V types or constants can be executed in
any order, and is problematic for caching purposes.
Select order which didn't change test output.
Diffstat (limited to 'dxil_converter.cpp')
-rw-r--r-- | dxil_converter.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/dxil_converter.cpp b/dxil_converter.cpp index 9817efa..bafaf8a 100644 --- a/dxil_converter.cpp +++ b/dxil_converter.cpp @@ -2202,9 +2202,10 @@ bool Converter::Impl::emit_shader_record_buffer() { case LocalRootSignatureType::Constants: { + spv::Id array_size_id = builder.makeUintConstant(elem.constants.num_words); + spv::Id u32_type = builder.makeUintType(32); spv::Id member_type_id = - builder.makeArrayType(builder.makeUintType(32), - builder.makeUintConstant(elem.constants.num_words), 4); + builder.makeArrayType(u32_type, array_size_id, 4); builder.addDecoration(member_type_id, spv::DecorationArrayStride, 4); member_types.push_back(member_type_id); offsets.push_back(current_offset); @@ -3113,10 +3114,14 @@ spv::Id Converter::Impl::get_type_id(const llvm::Type *type) } case llvm::Type::TypeID::ArrayTyID: + { if (type->getArrayNumElements() == 0) return 0; - return builder.makeArrayType(get_type_id(type->getArrayElementType()), - builder.makeUintConstant(type->getArrayNumElements(), false), 0); + + spv::Id array_size_id = builder.makeUintConstant(type->getArrayNumElements()); + spv::Id element_type_id = get_type_id(type->getArrayElementType()); + return builder.makeArrayType(element_type_id, array_size_id, 0); + } case llvm::Type::TypeID::StructTyID: { |