summaryrefslogtreecommitdiff
path: root/source/slang/slang-hlsl-to-vulkan-layout-options.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2023-05-04 15:44:09 -0400
committerGitHub <noreply@github.com>2023-05-04 12:44:09 -0700
commitc0b6f59a6920a9efbb4ecc3b622529db484c64ef (patch)
treef1ee51fb9244da22c4157dfff40cda964ac7b28f /source/slang/slang-hlsl-to-vulkan-layout-options.cpp
parentee62b062e6b606c480c5f7358710b06c933b0efb (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.cpp46
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)