diff options
| -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 = { } |
