diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2023-05-04 15:44:09 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-04 12:44:09 -0700 |
| commit | c0b6f59a6920a9efbb4ecc3b622529db484c64ef (patch) | |
| tree | f1ee51fb9244da22c4157dfff40cda964ac7b28f /source/slang/slang-hlsl-to-vulkan-layout-options.cpp | |
| parent | ee62b062e6b606c480c5f7358710b06c933b0efb (diff) | |
Improvements around HLSLToVulkanLayout (#2867)
* #include an absolute path didn't work - because paths were taken to always be relative.
* Improve the HLSLToVulkanLayoutOptions interface.
Add more diagnostics.
Add diagnostics test.
* Add check for global binding using file check.
* Fix issues with some tests around making some diagnostics ids unique.
* Small improvements with doc/handling of vk-<>-shift option setup.
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/slang-hlsl-to-vulkan-layout-options.cpp')
| -rw-r--r-- | source/slang/slang-hlsl-to-vulkan-layout-options.cpp | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/source/slang/slang-hlsl-to-vulkan-layout-options.cpp b/source/slang/slang-hlsl-to-vulkan-layout-options.cpp index e143762a1..bb02a079c 100644 --- a/source/slang/slang-hlsl-to-vulkan-layout-options.cpp +++ b/source/slang/slang-hlsl-to-vulkan-layout-options.cpp @@ -27,14 +27,25 @@ static NamesDescriptionValue s_vulkanShiftKinds[] = HLSLToVulkanLayoutOptions::HLSLToVulkanLayoutOptions() { + reset(); + SLANG_ASSERT(isReset()); +} + +void HLSLToVulkanLayoutOptions::setGlobalsBinding(const Binding& binding) +{ + m_globalsBinding = binding; +} + +void HLSLToVulkanLayoutOptions::reset() +{ for (auto& shift : m_allShifts) { shift = kInvalidShift; } -} + m_shifts.clear(); +} - /// Set the the all option for the kind void HLSLToVulkanLayoutOptions::setAllShift(Kind kind, Index shift) { // We try to follow the convention, of the *last* entry set is the one used. @@ -76,29 +87,38 @@ Index HLSLToVulkanLayoutOptions::getShift(Kind kind, Index set) const return m_allShifts[Index(kind)]; } -bool HLSLToVulkanLayoutOptions::isDefault() const +bool HLSLToVulkanLayoutOptions::canInferBindings() const { // If any all shift is set it's not default for (auto shift : m_allShifts) { if (shift != kInvalidShift) { - return false; + return true; } } - // If any has a non zero shift, it's not default - for (auto& pair : m_shifts) + return m_shifts.getCount() > 0; +} + +bool HLSLToVulkanLayoutOptions::hasState() const +{ + return canInferBindings() || hasGlobalsBinding(); +} + +HLSLToVulkanLayoutOptions::Binding HLSLToVulkanLayoutOptions::inferBinding(Kind kind, const Binding& inBinding) const +{ + auto shift = getShift(kind, inBinding.set); + + if (shift != kInvalidShift) { - // We need a value that is non zero... - if (pair.value) - { - return false; - } + Binding binding(inBinding); + binding.index += shift; + return binding; } - // If either has been set it's not default - return m_globalsBinding < 0 && m_globalsBindingSet < 0; + // Else return an invalid binding + return Binding(); } /* static */HLSLToVulkanLayoutOptions::Kind HLSLToVulkanLayoutOptions::getKind(slang::ParameterCategory param) |
