diff options
| author | cheneym2 <acheney@nvidia.com> | 2025-02-04 16:58:54 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-04 13:58:54 -0800 |
| commit | 78a6389aa4b01cfe4f8b4ec34d48b2cbfc092865 (patch) | |
| tree | 32653827212dc696683391ee1fe6c4b88b2666c8 | |
| parent | 77c59d4a159cc9f1d992ef096ba7fa0d9e7e548a (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.cpp | 7 | ||||
| -rw-r--r-- | tests/diagnostics/vk-bindings.slang | 7 | ||||
| -rw-r--r-- | tests/diagnostics/vk-bindings.slang.expected | 6 |
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 = { } |
