summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-parameter-binding.cpp7
-rw-r--r--tests/diagnostics/vk-bindings.slang7
-rw-r--r--tests/diagnostics/vk-bindings.slang.expected6
3 files changed, 19 insertions, 1 deletions
diff --git a/source/slang/slang-parameter-binding.cpp b/source/slang/slang-parameter-binding.cpp
index 61226f898..67ce46e8f 100644
--- a/source/slang/slang-parameter-binding.cpp
+++ b/source/slang/slang-parameter-binding.cpp
@@ -1073,6 +1073,13 @@ static void _maybeDiagnoseMissingVulkanLayoutModifier(
ParameterBindingContext* context,
DeclRef<VarDeclBase> const& varDecl)
{
+ // Don't warn if the declaration is a vk::push_constant or shaderRecordEXT
+ if (varDecl.getDecl()->hasModifier<PushConstantAttribute>() ||
+ varDecl.getDecl()->hasModifier<ShaderRecordAttribute>())
+ {
+ return;
+ }
+
// If the user didn't specify a `binding` (and optional `set`) for Vulkan,
// but they *did* specify a `register` for D3D, then that is probably an
// oversight on their part.
diff --git a/tests/diagnostics/vk-bindings.slang b/tests/diagnostics/vk-bindings.slang
index 53766536d..d015893e1 100644
--- a/tests/diagnostics/vk-bindings.slang
+++ b/tests/diagnostics/vk-bindings.slang
@@ -14,6 +14,11 @@ struct S { float4 a; };
[[vk::binding(2,1)]]
ParameterBlock<S> b;
+[[vk::push_constant]] \
+ConstantBuffer<int> gint : register(b0, space0);
+
+layout(shaderRecordEXT) ConstantBuffer<int> GeometrySBT : register(b0, space99999);
+
[shader("compute")]
void main()
-{} \ No newline at end of file
+{}
diff --git a/tests/diagnostics/vk-bindings.slang.expected b/tests/diagnostics/vk-bindings.slang.expected
index 901705566..afed17d98 100644
--- a/tests/diagnostics/vk-bindings.slang.expected
+++ b/tests/diagnostics/vk-bindings.slang.expected
@@ -6,6 +6,12 @@ Texture2D t : register(t0);
tests/diagnostics/vk-bindings.slang(14): error 39015: shader parameter 'b' consumes whole descriptor sets, so the binding must be in the form '[[vk::binding(0, ...)]]'; the non-zero binding '2' is not allowed
[[vk::binding(2,1)]]
^~~~~~~
+tests/diagnostics/vk-bindings.slang(18): warning 39001: explicit binding for parameter 'gint' overlaps with parameter 't'
+ConstantBuffer<int> gint : register(b0, space0);
+ ^~~~
+tests/diagnostics/vk-bindings.slang(6): note: see declaration of 't'
+Texture2D t : register(t0);
+ ^
}
standard output = {
}