|
| 1 | +#--- DescriptorSets.hlsl |
| 2 | + |
| 3 | +#if defined(__spirv__) || defined(__SPIRV__) |
| 4 | +#define REGISTER(Idx, Space) |
| 5 | +#else |
| 6 | +#define REGISTER(Idx, Space) : register(Idx, Space) |
| 7 | +#endif |
| 8 | + |
| 9 | +[[vk::binding(0)]] RWBuffer<float4> In REGISTER(u0, space0); |
| 10 | +[[vk::binding(1)]] RWBuffer<float4> Out1 REGISTER(u1, space4); |
| 11 | +[[vk::binding(0,1)]] RWBuffer<float4> Out2 REGISTER(u2, space4); |
| 12 | + |
| 13 | +[numthreads(1,1,1)] |
| 14 | +void main(uint GI : SV_GroupIndex) { |
| 15 | + Out1[GI] = In[GI] * In[GI]; |
| 16 | + Out2[GI] = In[GI] * In[GI] * In[GI]; |
| 17 | +} |
| 18 | +//--- DescriptorSets.yaml |
| 19 | +--- |
| 20 | +DispatchSize: [1, 1, 1] |
| 21 | +DescriptorSets: |
| 22 | + - Resources: |
| 23 | + - Access: ReadWrite |
| 24 | + Format: Float32 |
| 25 | + Channels: 4 |
| 26 | + Data: [ 2, 4, 6, 8] |
| 27 | + DirectXBinding: |
| 28 | + Register: 0 |
| 29 | + Space: 0 |
| 30 | + - Access: ReadWrite |
| 31 | + Format: Float32 |
| 32 | + Channels: 4 |
| 33 | + ZeroInitSize: 16 |
| 34 | + DirectXBinding: |
| 35 | + Register: 1 |
| 36 | + Space: 4 |
| 37 | + - Resources: |
| 38 | + - Access: ReadWrite |
| 39 | + Format: Float32 |
| 40 | + Channels: 4 |
| 41 | + ZeroInitSize: 16 |
| 42 | + DirectXBinding: |
| 43 | + Register: 2 |
| 44 | + Space: 4 |
| 45 | +... |
| 46 | +#--- end |
| 47 | + |
| 48 | +# UNSUPPORTED: Clang |
| 49 | +# RUN: split-file %s %t |
| 50 | +# RUN: %if DirectX %{ dxc -T cs_6_0 -Fo %t.dxil %t/DescriptorSets.hlsl %} |
| 51 | +# RUN: %if DirectX %{ %offloader %t/DescriptorSets.yaml %t.dxil | FileCheck %s %} |
| 52 | +# RUN: %if Vulkan %{ dxc -T cs_6_0 -spirv -fspv-target-env=vulkan1.1 -Fo %t.spv %t/DescriptorSets.hlsl %} |
| 53 | +# RUN: %if Vulkan %{ %offloader %t/DescriptorSets.yaml %t.spv | FileCheck %s %} |
| 54 | + |
| 55 | +# RUN: %if Metal %{ dxc -T cs_6_0 -Fo %t.dxil %t/DescriptorSets.hlsl %} |
| 56 | +# RUN: %if Metal %{ metal-shaderconverter %t.dxil -o=%t.metallib %} |
| 57 | +# RUN: %if Metal %{ %offloader %t/DescriptorSets.yaml %t.metallib | FileCheck %s %} |
| 58 | + |
| 59 | +# CHECK: Data: |
| 60 | +# CHECK: Data: [ 4, 16, 36, 64 ] |
| 61 | +# CHECK: Data: [ 8, 64, 216, 512 ] |
0 commit comments