summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcheneym2 <acheney@nvidia.com>2025-02-04 16:58:54 -0500
committerGitHub <noreply@github.com>2025-02-04 13:58:54 -0800
commit78a6389aa4b01cfe4f8b4ec34d48b2cbfc092865 (patch)
tree32653827212dc696683391ee1fe6c4b88b2666c8
parent77c59d4a159cc9f1d992ef096ba7fa0d9e7e548a (diff)
Fix warning about push constants, shaderRecordEXT (#6269)
* Fix warning about push constants, shaderRecordEXT These resources should not warn about missing vk::binding. * format code --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
-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 = {
}