1[require]
2VK_KHR_spirv_1_4
3VK_KHR_storage_buffer_storage_class
4
5[compute shader spirv]
6OpCapability Shader
7OpMemoryModel Logical GLSL450
8OpEntryPoint GLCompute %main "main" %ssbo
9OpExecutionMode %main LocalSize 1 1 1
10
11OpDecorate %struct Block
12OpMemberDecorate %struct 0 Offset 0
13OpMemberDecorate %struct 1 Offset 16
14OpMemberDecorate %struct 2 Offset 32
15OpMemberDecorate %struct 3 Offset 48
16OpMemberDecorate %struct 4 Offset 64
17OpDecorate %ssbo DescriptorSet 0
18OpDecorate %ssbo Binding 0
19
20%void = OpTypeVoid
21%int = OpTypeInt 32 0
22%int_0 = OpConstant %int 0
23%int_1 = OpConstant %int 1
24%int_2 = OpConstant %int 2
25%int_3 = OpConstant %int 3
26%int_4 = OpConstant %int 4
27%int4 = OpTypeVector %int 4
28%ptr_ssbo_int = OpTypePointer StorageBuffer %int
29
30%struct = OpTypeStruct %int4 %int %int %int %int
31%ptr_ssbo_struct = OpTypePointer StorageBuffer %struct
32%ssbo = OpVariable %ptr_ssbo_struct StorageBuffer
33
34%void_fn = OpTypeFunction %void
35%main = OpFunction %void None %void_fn
36%entry = OpLabel
37%src_gep0 = OpAccessChain %ptr_ssbo_int %ssbo %int_0 %int_0
38%dst_gep0 = OpAccessChain %ptr_ssbo_int %ssbo %int_1
39OpCopyMemory %dst_gep0 %src_gep0 Aligned 16 Aligned 4
40%src_gep1 = OpAccessChain %ptr_ssbo_int %ssbo %int_0 %int_1
41%dst_gep1 = OpAccessChain %ptr_ssbo_int %ssbo %int_2
42OpCopyMemory %dst_gep1 %src_gep1 Aligned 16 Aligned 4
43%src_gep2 = OpAccessChain %ptr_ssbo_int %ssbo %int_0 %int_2
44%dst_gep2 = OpAccessChain %ptr_ssbo_int %ssbo %int_3
45OpCopyMemory %dst_gep2 %src_gep2 Aligned 16 Aligned 4
46%src_gep3 = OpAccessChain %ptr_ssbo_int %ssbo %int_0 %int_3
47%dst_gep3 = OpAccessChain %ptr_ssbo_int %ssbo %int_4
48OpCopyMemory %dst_gep3 %src_gep3 Aligned 16 Aligned 4
49OpReturn
50OpFunctionEnd
51
52[test]
53ssbo 0:0 68
54ssbo 0:0 subdata uint 0 1 2 3 4
55
56compute entrypoint main
57compute 1 1 1
58
59probe ssbo uint 0:0 16 == 1
60probe ssbo uint 0:0 32 == 2
61probe ssbo uint 0:0 48 == 3
62probe ssbo uint 0:0 64 == 4
63