diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2024-02-03 10:14:04 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-02 18:14:04 -0800 |
| commit | a67cb0609587c230746b52567ff5775cab215220 (patch) | |
| tree | af943e2926c7279fb825ead81d74e4fe0f55795d /source/slang/slang-reflection-api.cpp | |
| parent | 6c8626c171a0bc40e8f2d3a15b0563d4085431c1 (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.cpp | 16 |
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; |
