summaryrefslogtreecommitdiff
path: root/source/slang/slang-type-layout.cpp
diff options
context:
space:
mode:
authorArielG-NV <159081215+ArielG-NV@users.noreply.github.com>2024-06-28 04:07:12 -0400
committerGitHub <noreply@github.com>2024-06-28 04:07:12 -0400
commite49419b0637a357d2e713a0435f0c5ad0c102487 (patch)
tree61f815078f7b3b6187abd28101cea76f611462a2 /source/slang/slang-type-layout.cpp
parentfd32b1879c8a4de7e97a99be7e0e8093ade8b340 (diff)
Implement HLSL resource bindings and default type `float4` to `SubpassInput<T>` (#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<T>` 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<T>. 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
Diffstat (limited to 'source/slang/slang-type-layout.cpp')
-rw-r--r--source/slang/slang-type-layout.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/source/slang/slang-type-layout.cpp b/source/slang/slang-type-layout.cpp
index 22aa3f304..293dce7c6 100644
--- a/source/slang/slang-type-layout.cpp
+++ b/source/slang/slang-type-layout.cpp
@@ -722,6 +722,9 @@ static LayoutResourceKind _getHLSLLayoutResourceKind(ShaderParameterKind kind)
{
switch (kind)
{
+ case ShaderParameterKind::SubpassInput:
+ return LayoutResourceKind::InputAttachmentIndex;
+
case ShaderParameterKind::ConstantBuffer:
return LayoutResourceKind::ConstantBuffer;
@@ -778,6 +781,13 @@ struct GLSLObjectLayoutRulesImpl : ObjectLayoutRulesImpl
}
}
+ switch (kind)
+ {
+ case ShaderParameterKind::SubpassInput:
+ return SimpleLayoutInfo(LayoutResourceKind::InputAttachmentIndex, slotCount);
+ default:
+ break;
+ }
return SimpleLayoutInfo(LayoutResourceKind::DescriptorTableSlot, slotCount);
}
};
@@ -4089,6 +4099,17 @@ static TypeLayoutResult _createTypeLayout(
type,
rules);
}
+ else if (as<SubpassInputType>(type))
+ {
+ // SubpassInputType fills 2 slots, 'shader resource' and 'input_attachment_index'
+ auto objLayout1 = rules->GetObjectLayout(ShaderParameterKind::Texture, context.objectLayoutOptions);
+ auto objLayout2 = rules->GetObjectLayout(ShaderParameterKind::SubpassInput, context.objectLayoutOptions);
+ objLayout1.layoutInfos.add(objLayout2.layoutInfos.getFirst());
+ return createSimpleTypeLayout(
+ objLayout1,
+ type,
+ rules);
+ }
else if (auto textureType = as<TextureType>(type))
{
// TODO: the logic here should really be defined by the rules,