From 78a6389aa4b01cfe4f8b4ec34d48b2cbfc092865 Mon Sep 17 00:00:00 2001 From: cheneym2 Date: Tue, 4 Feb 2025 16:58:54 -0500 Subject: 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> --- source/slang/slang-parameter-binding.cpp | 7 +++++++ tests/diagnostics/vk-bindings.slang | 7 ++++++- tests/diagnostics/vk-bindings.slang.expected | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) 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 const& varDecl) { + // Don't warn if the declaration is a vk::push_constant or shaderRecordEXT + if (varDecl.getDecl()->hasModifier() || + varDecl.getDecl()->hasModifier()) + { + 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 b; +[[vk::push_constant]] \ +ConstantBuffer gint : register(b0, space0); + +layout(shaderRecordEXT) ConstantBuffer 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 gint : register(b0, space0); + ^~~~ +tests/diagnostics/vk-bindings.slang(6): note: see declaration of 't' +Texture2D t : register(t0); + ^ } standard output = { } -- cgit v1.2.3