From e49419b0637a357d2e713a0435f0c5ad0c102487 Mon Sep 17 00:00:00 2001 From: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Date: Fri, 28 Jun 2024 04:07:12 -0400 Subject: Implement HLSL resource bindings and default type `float4` to `SubpassInput` (#4462) * Add case to `emitVectorReshape` for `vector<>` type, `scalar` value 1. Add new case 2. Add test * fix warning * fix warning * Implement HLSL resource bindings and default type `float4` to `SubpassInput` fixes: #4440 1. Removed GLSLInputAttachmentIndexLayout modifier and the somewhat 'hacky' binding model 'Input Attachment' previously relied upon. This was changed to work with the slang-type-layout rules system. This change allows Slang automatic bindings, HLSL bindings, GLSL bindings, and translation of GLSL to and from HLSL bindings to work. 2. Added default argument `float4` to SubpassInput. 3. Merged glsl.meta and hlsl.meta SubpassInput logic. * fix InputAttachment attribute checks fix InputAttachment attribute checks for HLSL and GLSL syntax * remove unused var * validate attribute correctly Attributes do not have type information. We must check the type expression to validate attribute usage. * remove hacky validation type based validation before types are fully resolved is quite hacky and unstable to changes and wrapped types * fix warning * remove redundant `!= nullptr` * remove extra `!= nullptr` * fix some warnings/errors * subpass capability to limit to dxc & remove default values in some functions * revert logic to previous logic revert logic to return if we have a binding regardless of if a VarDecl is given the binding --- source/slang/slang-parser.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-parser.cpp') diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp index 3d9f1c199..e6913c6c0 100644 --- a/source/slang/slang-parser.cpp +++ b/source/slang/slang-parser.cpp @@ -8061,7 +8061,7 @@ namespace Slang GLSLLayoutLocalSizeAttribute* numThreadsAttrib = nullptr; GLSLLayoutDerivativeGroupQuadAttribute* derivativeGroupQuadAttrib = nullptr; GLSLLayoutDerivativeGroupLinearAttribute* derivativeGroupLinearAttrib = nullptr; - + GLSLInputAttachmentIndexLayoutAttribute* inputAttachmentIndexLayoutAttribute = nullptr; ImageFormat format; listBuilder.add(parser->astBuilder->create()); @@ -8115,6 +8115,17 @@ namespace Slang { derivativeGroupLinearAttrib = parser->astBuilder->create(); } + else if (nameText == "input_attachment_index") + { + inputAttachmentIndexLayoutAttribute = parser->astBuilder->create(); + if (AdvanceIf(parser, TokenType::OpAssign)) + { + auto token = parser->ReadToken(TokenType::IntegerLiteral); + auto intVal = getIntegerLiteralValue(token); + inputAttachmentIndexLayoutAttribute->location = intVal; + } + + } else if (nameText == "binding" || nameText == "set") { @@ -8165,7 +8176,6 @@ namespace Slang CASE(scalar, GLSLScalarModifier) CASE(offset, GLSLOffsetLayoutAttribute) CASE(location, GLSLLocationLayoutModifier) - CASE(input_attachment_index, GLSLInputAttachmentIndexLayoutModifier) { modifier = parser->astBuilder->create(); } @@ -8227,6 +8237,8 @@ namespace Slang listBuilder.add(derivativeGroupQuadAttrib); if(derivativeGroupLinearAttrib) listBuilder.add(derivativeGroupLinearAttrib); + if(inputAttachmentIndexLayoutAttribute) + listBuilder.add(inputAttachmentIndexLayoutAttribute); listBuilder.add(parser->astBuilder->create()); -- cgit v1.2.3