yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
b6422e50c
master
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}