yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Yong HeHandle getEquivalentStructuredBuffer(castDynamicResource) in byte address legalization pass. (#8567)b6422e50c

master
1.0 KiB38 linesraw
1//TEST:SIMPLE(filecheck=CHECK): -target spirv
2
3// CHECK: OpAccessChain %_ptr_StorageBuffer_RWStructuredBuffer %resourceHandles
4
5[vk::binding(0, 0)]
6__DynamicResource<__DynamicResourceKind.General> resourceHandles[];
7
8[vk::binding(0, 1)]
9__DynamicResource<__DynamicResourceKind.Sampler> samplerHandles[];
10
11export T getDescriptorFromHandle<T>(DescriptorHandle<T> handle) where T : IOpaqueDescriptor
12{
13    __target_switch
14    {
15    case spirv:
16        if (T.kind == DescriptorKind.Sampler) {
17            return samplerHandles[((uint2)handle).x].asOpaqueDescriptor<T>();
18        }
19        else {
20            return resourceHandles[((uint2)handle).x].asOpaqueDescriptor<T>();
21        }
22    default:
23        return defaultGetDescriptorFromHandle(handle);
24    }
25}
26
27// test.slang
28struct PushConstant
29{
30    RWByteAddressBuffer.Handle test_buffer;
31};
32[[vk::push_constant]] PushConstant constant;
33
34[shader("fragment")]
35void main_test_fs(float2 fragment_coord: SV_Position, out float4 color: SV_Target)
36{
37    color = float4(constant.test_buffer.Load<uint3>(0), 1.0);
38}