summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-11-21 14:07:23 -0800
committerGitHub <noreply@github.com>2024-11-21 14:07:23 -0800
commitfdf061e278720ec066a1fac8f1f35a22e817bf2d (patch)
treedb6cc05613afacdb9c67a26695355ff1b0086d79 /source/slang/hlsl.meta.slang
parentdcc7c6f009afc0f55e79ced050b772ea9d3b25ae (diff)
Add datalayout for constant buffers. (#5608)
* Add datalayout for constant buffers. * Fixes. * Fix test. * Fix glsl codegen. * Update spirv-specific doc. * Fix test. * Fix binding in the presense of specialization constants. * address comments. * Add a test for constant buffer layout.
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang9
1 files changed, 8 insertions, 1 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 7eb4af135..84beb3b4b 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -10,12 +10,14 @@ void __requireGLSLExtension(String extensionName);
/// Represents an interface for buffer data layout.
/// This interface is used as a base for defining specific data layouts for buffers.
[sealed]
+__magic_type(IBufferDataLayoutType)
interface IBufferDataLayout
{
}
/// @category misc_types
__intrinsic_type($(kIROp_DefaultBufferLayoutType))
+__magic_type(DefaultDataLayoutType)
struct DefaultDataLayout : IBufferDataLayout
{};
@@ -23,6 +25,7 @@ struct DefaultDataLayout : IBufferDataLayout
__intrinsic_type($(kIROp_Std140BufferLayoutType))
[require(spirv)]
[require(glsl)]
+__magic_type(Std140DataLayoutType)
struct Std140DataLayout : IBufferDataLayout
{};
@@ -30,11 +33,13 @@ struct Std140DataLayout : IBufferDataLayout
__intrinsic_type($(kIROp_Std430BufferLayoutType))
[require(spirv)]
[require(glsl)]
+__magic_type(Std430DataLayoutType)
struct Std430DataLayout : IBufferDataLayout
{};
/// @category misc_types
__intrinsic_type($(kIROp_ScalarBufferLayoutType))
+__magic_type(ScalarDataLayoutType)
struct ScalarDataLayout : IBufferDataLayout
{};
@@ -20588,7 +20593,7 @@ const char* kDynamicResourceCastableTypes[] = {
"SamplerState", "SamplerComparisonState",
- "ConstantBuffer<T>", "TextureBuffer<T>",
+ "ConstantBuffer<T, L>", "TextureBuffer<T>",
};
for (auto typeName : kDynamicResourceCastableTypes) {
@@ -20596,6 +20601,8 @@ for (auto typeName : kDynamicResourceCastableTypes) {
if (strstr(typeName, "StructuredBuffer<T, L>"))
sb << "__generic<T, L : IBufferDataLayout = DefaultDataLayout>\n";
+ else if (strstr(typeName, "ConstantBuffer<T, L>"))
+ sb << "__generic<T, L : IBufferDataLayout = DefaultDataLayout>\n";
else if (strstr(typeName, "Buffer<T>"))
sb << "__generic<T>\n";
}}}}