summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-reflection-api.cpp
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-02-03 10:14:04 +0800
committerGitHub <noreply@github.com>2024-02-02 18:14:04 -0800
commita67cb0609587c230746b52567ff5775cab215220 (patch)
treeaf943e2926c7279fb825ead81d74e4fe0f55795d /source/slang/slang-reflection-api.cpp
parent6c8626c171a0bc40e8f2d3a15b0563d4085431c1 (diff)
GLSL Passthrough support for SSBO types (#3446)
* GLSL Passthrough support for SSBO types * GLSL Passthrough support for SSBO types * Correctly apply glsl local size layout to entry points during lowering * Test for glsl layout correctness * typo * Reflect GLSL SSBO as raw buffers * Functional test for glsl ssbo * Allow allow glsl for render tests * Functional test for ssbo passthrough * Functional test for ssbo passthrough with spirv-direct * fix windows build error --------- Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/slang-reflection-api.cpp')
-rw-r--r--source/slang/slang-reflection-api.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/source/slang/slang-reflection-api.cpp b/source/slang/slang-reflection-api.cpp
index f0540deb3..28b22b833 100644
--- a/source/slang/slang-reflection-api.cpp
+++ b/source/slang/slang-reflection-api.cpp
@@ -168,6 +168,11 @@ static SlangParameterCategory maybeRemapParameterCategory(
return SLANG_PARAMETER_CATEGORY_DESCRIPTOR_TABLE_SLOT;
break;
+ case SLANG_TYPE_KIND_SHADER_STORAGE_BUFFER:
+ if (category == SLANG_PARAMETER_CATEGORY_UNIFORM)
+ return SLANG_PARAMETER_CATEGORY_DESCRIPTOR_TABLE_SLOT;
+ break;
+
// TODO: implement more helpers here
default:
@@ -382,6 +387,7 @@ SLANG_API SlangTypeKind spReflectionType_GetKind(SlangReflectionType* inType)
CASE(HLSLRWByteAddressBufferType);
CASE(HLSLRasterizerOrderedByteAddressBufferType);
CASE(UntypedBufferResourceType);
+ CASE(GLSLShaderStorageBufferType);
#undef CASE
else if (const auto arrayType = as<ArrayExpressionType>(type))
@@ -668,6 +674,7 @@ SLANG_API SlangResourceShape spReflectionType_GetResourceShape(SlangReflectionTy
CASE(HLSLRasterizerOrderedByteAddressBufferType, SLANG_BYTE_ADDRESS_BUFFER, SLANG_RESOURCE_ACCESS_RASTER_ORDERED);
CASE(RaytracingAccelerationStructureType, SLANG_ACCELERATION_STRUCTURE, SLANG_RESOURCE_ACCESS_READ);
CASE(UntypedBufferResourceType, SLANG_BYTE_ADDRESS_BUFFER, SLANG_RESOURCE_ACCESS_READ);
+ CASE(GLSLShaderStorageBufferType, SLANG_BYTE_ADDRESS_BUFFER, SLANG_RESOURCE_ACCESS_READ_WRITE);
#undef CASE
return SLANG_RESOURCE_NONE;
@@ -703,9 +710,7 @@ SLANG_API SlangResourceAccess spReflectionType_GetResourceAccess(SlangReflection
CASE(HLSLRWByteAddressBufferType, SLANG_BYTE_ADDRESS_BUFFER, SLANG_RESOURCE_ACCESS_READ_WRITE);
CASE(HLSLRasterizerOrderedByteAddressBufferType, SLANG_BYTE_ADDRESS_BUFFER, SLANG_RESOURCE_ACCESS_RASTER_ORDERED);
CASE(UntypedBufferResourceType, SLANG_BYTE_ADDRESS_BUFFER, SLANG_RESOURCE_ACCESS_READ);
-
- // This isn't entirely accurate, but I can live with it for now
- CASE(GLSLShaderStorageBufferType, SLANG_STRUCTURED_BUFFER, SLANG_RESOURCE_ACCESS_READ_WRITE);
+ CASE(GLSLShaderStorageBufferType, SLANG_BYTE_ADDRESS_BUFFER, SLANG_RESOURCE_ACCESS_READ_WRITE);
#undef CASE
return SLANG_RESOURCE_ACCESS_NONE;
@@ -1310,6 +1315,11 @@ namespace Slang
return SLANG_BINDING_TYPE_MUTABLE_RAW_BUFFER;
}
}
+ else if( as<GLSLShaderStorageBufferType>(type) )
+ {
+ // TODO Immutable buffers
+ return SLANG_BINDING_TYPE_MUTABLE_RAW_BUFFER;
+ }
else if( as<ConstantBufferType>(type) )
{
return SLANG_BINDING_TYPE_CONSTANT_BUFFER;