yes
This commit is contained in:
+118
@@ -0,0 +1,118 @@
|
||||
[require]
|
||||
VK_KHR_spirv_1_4
|
||||
|
||||
[compute shader spirv]
|
||||
; Use the IterationMultiple loop control.
|
||||
; Generated from with modified loop control:
|
||||
;
|
||||
; #version 430
|
||||
;
|
||||
;
|
||||
; layout(std430, binding = 0) buffer input_buffer
|
||||
; {
|
||||
; int in_size;
|
||||
; ivec4 data_SSBO[];
|
||||
; };
|
||||
;
|
||||
; layout(std430, binding = 1) buffer output_buffer
|
||||
; {
|
||||
; int out_size;
|
||||
; ivec4 out_SSBO[];
|
||||
; };
|
||||
;
|
||||
; void main() {
|
||||
; for( int i = 0; i < in_size; ++i ) {
|
||||
; out_SSBO[i] = data_SSBO[i];
|
||||
; }
|
||||
; }
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %_ %__0
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpSource GLSL 430
|
||||
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
|
||||
OpSourceExtension "GL_GOOGLE_include_directive"
|
||||
OpName %main "main"
|
||||
OpName %i "i"
|
||||
OpName %input_buffer "input_buffer"
|
||||
OpMemberName %input_buffer 0 "in_size"
|
||||
OpMemberName %input_buffer 1 "data_SSBO"
|
||||
OpName %_ ""
|
||||
OpName %output_buffer "output_buffer"
|
||||
OpMemberName %output_buffer 0 "out_size"
|
||||
OpMemberName %output_buffer 1 "out_SSBO"
|
||||
OpName %__0 ""
|
||||
OpDecorate %_runtimearr_v4int ArrayStride 16
|
||||
OpMemberDecorate %input_buffer 0 Offset 0
|
||||
OpMemberDecorate %input_buffer 1 Offset 16
|
||||
OpDecorate %input_buffer Block
|
||||
OpDecorate %_ DescriptorSet 0
|
||||
OpDecorate %_ Binding 0
|
||||
OpDecorate %_runtimearr_v4int_0 ArrayStride 16
|
||||
OpMemberDecorate %output_buffer 0 Offset 0
|
||||
OpMemberDecorate %output_buffer 1 Offset 16
|
||||
OpDecorate %output_buffer Block
|
||||
OpDecorate %__0 DescriptorSet 0
|
||||
OpDecorate %__0 Binding 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_runtimearr_v4int = OpTypeRuntimeArray %v4int
|
||||
%input_buffer = OpTypeStruct %int %_runtimearr_v4int
|
||||
%_ptr_StorageBuffer_input_buffer = OpTypePointer StorageBuffer %input_buffer
|
||||
%_ = OpVariable %_ptr_StorageBuffer_input_buffer StorageBuffer
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%bool = OpTypeBool
|
||||
%_runtimearr_v4int_0 = OpTypeRuntimeArray %v4int
|
||||
%output_buffer = OpTypeStruct %int %_runtimearr_v4int_0
|
||||
%_ptr_StorageBuffer_output_buffer = OpTypePointer StorageBuffer %output_buffer
|
||||
%__0 = OpVariable %_ptr_StorageBuffer_output_buffer StorageBuffer
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function
|
||||
OpStore %i %int_0
|
||||
OpBranch %10
|
||||
%10 = OpLabel
|
||||
OpLoopMerge %12 %13 IterationMultiple 3
|
||||
OpBranch %14
|
||||
%14 = OpLabel
|
||||
%15 = OpLoad %int %i
|
||||
%23 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_0
|
||||
%24 = OpLoad %int %23
|
||||
%26 = OpSLessThan %bool %15 %24
|
||||
OpBranchConditional %26 %11 %12
|
||||
%11 = OpLabel
|
||||
%32 = OpLoad %int %i
|
||||
%33 = OpLoad %int %i
|
||||
%35 = OpAccessChain %_ptr_StorageBuffer_v4int %_ %int_1 %33
|
||||
%36 = OpLoad %v4int %35
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v4int %__0 %int_1 %32
|
||||
OpStore %37 %36
|
||||
OpBranch %13
|
||||
%13 = OpLabel
|
||||
%38 = OpLoad %int %i
|
||||
%39 = OpIAdd %int %38 %int_1
|
||||
OpStore %i %39
|
||||
OpBranch %10
|
||||
%12 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
||||
[test]
|
||||
ssbo 0:0 112
|
||||
ssbo 0:0 subdata int 0 6 0 0 0
|
||||
ssbo 0:0 subdata int 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
ssbo 0:1 112
|
||||
ssbo 0:1 subdata int 0 6 0 0 0
|
||||
ssbo 0:1 subdata int 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
|
||||
compute entrypoint main
|
||||
compute 1 1 1
|
||||
|
||||
probe ssbo int 0:1 16 == 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
@@ -0,0 +1,118 @@
|
||||
[require]
|
||||
VK_KHR_spirv_1_4
|
||||
|
||||
[compute shader spirv]
|
||||
; Use the MaxIterations loop control.
|
||||
; Generated from with modified loop control:
|
||||
;
|
||||
; #version 430
|
||||
;
|
||||
;
|
||||
; layout(std430, binding = 0) buffer input_buffer
|
||||
; {
|
||||
; int in_size;
|
||||
; ivec4 data_SSBO[];
|
||||
; };
|
||||
;
|
||||
; layout(std430, binding = 1) buffer output_buffer
|
||||
; {
|
||||
; int out_size;
|
||||
; ivec4 out_SSBO[];
|
||||
; };
|
||||
;
|
||||
; void main() {
|
||||
; for( int i = 0; i < in_size; ++i ) {
|
||||
; out_SSBO[i] = data_SSBO[i];
|
||||
; }
|
||||
; }
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %_ %__0
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpSource GLSL 430
|
||||
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
|
||||
OpSourceExtension "GL_GOOGLE_include_directive"
|
||||
OpName %main "main"
|
||||
OpName %i "i"
|
||||
OpName %input_buffer "input_buffer"
|
||||
OpMemberName %input_buffer 0 "in_size"
|
||||
OpMemberName %input_buffer 1 "data_SSBO"
|
||||
OpName %_ ""
|
||||
OpName %output_buffer "output_buffer"
|
||||
OpMemberName %output_buffer 0 "out_size"
|
||||
OpMemberName %output_buffer 1 "out_SSBO"
|
||||
OpName %__0 ""
|
||||
OpDecorate %_runtimearr_v4int ArrayStride 16
|
||||
OpMemberDecorate %input_buffer 0 Offset 0
|
||||
OpMemberDecorate %input_buffer 1 Offset 16
|
||||
OpDecorate %input_buffer Block
|
||||
OpDecorate %_ DescriptorSet 0
|
||||
OpDecorate %_ Binding 0
|
||||
OpDecorate %_runtimearr_v4int_0 ArrayStride 16
|
||||
OpMemberDecorate %output_buffer 0 Offset 0
|
||||
OpMemberDecorate %output_buffer 1 Offset 16
|
||||
OpDecorate %output_buffer Block
|
||||
OpDecorate %__0 DescriptorSet 0
|
||||
OpDecorate %__0 Binding 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_runtimearr_v4int = OpTypeRuntimeArray %v4int
|
||||
%input_buffer = OpTypeStruct %int %_runtimearr_v4int
|
||||
%_ptr_StorageBuffer_input_buffer = OpTypePointer StorageBuffer %input_buffer
|
||||
%_ = OpVariable %_ptr_StorageBuffer_input_buffer StorageBuffer
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%bool = OpTypeBool
|
||||
%_runtimearr_v4int_0 = OpTypeRuntimeArray %v4int
|
||||
%output_buffer = OpTypeStruct %int %_runtimearr_v4int_0
|
||||
%_ptr_StorageBuffer_output_buffer = OpTypePointer StorageBuffer %output_buffer
|
||||
%__0 = OpVariable %_ptr_StorageBuffer_output_buffer StorageBuffer
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function
|
||||
OpStore %i %int_0
|
||||
OpBranch %10
|
||||
%10 = OpLabel
|
||||
OpLoopMerge %12 %13 MaxIterations 6
|
||||
OpBranch %14
|
||||
%14 = OpLabel
|
||||
%15 = OpLoad %int %i
|
||||
%23 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_0
|
||||
%24 = OpLoad %int %23
|
||||
%26 = OpSLessThan %bool %15 %24
|
||||
OpBranchConditional %26 %11 %12
|
||||
%11 = OpLabel
|
||||
%32 = OpLoad %int %i
|
||||
%33 = OpLoad %int %i
|
||||
%35 = OpAccessChain %_ptr_StorageBuffer_v4int %_ %int_1 %33
|
||||
%36 = OpLoad %v4int %35
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v4int %__0 %int_1 %32
|
||||
OpStore %37 %36
|
||||
OpBranch %13
|
||||
%13 = OpLabel
|
||||
%38 = OpLoad %int %i
|
||||
%39 = OpIAdd %int %38 %int_1
|
||||
OpStore %i %39
|
||||
OpBranch %10
|
||||
%12 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
||||
[test]
|
||||
ssbo 0:0 112
|
||||
ssbo 0:0 subdata int 0 6 0 0 0
|
||||
ssbo 0:0 subdata int 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
ssbo 0:1 112
|
||||
ssbo 0:1 subdata int 0 6 0 0 0
|
||||
ssbo 0:1 subdata int 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
|
||||
compute entrypoint main
|
||||
compute 1 1 1
|
||||
|
||||
probe ssbo int 0:1 16 == 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
@@ -0,0 +1,118 @@
|
||||
[require]
|
||||
VK_KHR_spirv_1_4
|
||||
|
||||
[compute shader spirv]
|
||||
; Use the MinIterations loop control.
|
||||
; Generated from with modified loop control:
|
||||
;
|
||||
; #version 430
|
||||
;
|
||||
;
|
||||
; layout(std430, binding = 0) buffer input_buffer
|
||||
; {
|
||||
; int in_size;
|
||||
; ivec4 data_SSBO[];
|
||||
; };
|
||||
;
|
||||
; layout(std430, binding = 1) buffer output_buffer
|
||||
; {
|
||||
; int out_size;
|
||||
; ivec4 out_SSBO[];
|
||||
; };
|
||||
;
|
||||
; void main() {
|
||||
; for( int i = 0; i < in_size; ++i ) {
|
||||
; out_SSBO[i] = data_SSBO[i];
|
||||
; }
|
||||
; }
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %_ %__0
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpSource GLSL 430
|
||||
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
|
||||
OpSourceExtension "GL_GOOGLE_include_directive"
|
||||
OpName %main "main"
|
||||
OpName %i "i"
|
||||
OpName %input_buffer "input_buffer"
|
||||
OpMemberName %input_buffer 0 "in_size"
|
||||
OpMemberName %input_buffer 1 "data_SSBO"
|
||||
OpName %_ ""
|
||||
OpName %output_buffer "output_buffer"
|
||||
OpMemberName %output_buffer 0 "out_size"
|
||||
OpMemberName %output_buffer 1 "out_SSBO"
|
||||
OpName %__0 ""
|
||||
OpDecorate %_runtimearr_v4int ArrayStride 16
|
||||
OpMemberDecorate %input_buffer 0 Offset 0
|
||||
OpMemberDecorate %input_buffer 1 Offset 16
|
||||
OpDecorate %input_buffer Block
|
||||
OpDecorate %_ DescriptorSet 0
|
||||
OpDecorate %_ Binding 0
|
||||
OpDecorate %_runtimearr_v4int_0 ArrayStride 16
|
||||
OpMemberDecorate %output_buffer 0 Offset 0
|
||||
OpMemberDecorate %output_buffer 1 Offset 16
|
||||
OpDecorate %output_buffer Block
|
||||
OpDecorate %__0 DescriptorSet 0
|
||||
OpDecorate %__0 Binding 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_runtimearr_v4int = OpTypeRuntimeArray %v4int
|
||||
%input_buffer = OpTypeStruct %int %_runtimearr_v4int
|
||||
%_ptr_StorageBuffer_input_buffer = OpTypePointer StorageBuffer %input_buffer
|
||||
%_ = OpVariable %_ptr_StorageBuffer_input_buffer StorageBuffer
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%bool = OpTypeBool
|
||||
%_runtimearr_v4int_0 = OpTypeRuntimeArray %v4int
|
||||
%output_buffer = OpTypeStruct %int %_runtimearr_v4int_0
|
||||
%_ptr_StorageBuffer_output_buffer = OpTypePointer StorageBuffer %output_buffer
|
||||
%__0 = OpVariable %_ptr_StorageBuffer_output_buffer StorageBuffer
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function
|
||||
OpStore %i %int_0
|
||||
OpBranch %10
|
||||
%10 = OpLabel
|
||||
OpLoopMerge %12 %13 MinIterations 4
|
||||
OpBranch %14
|
||||
%14 = OpLabel
|
||||
%15 = OpLoad %int %i
|
||||
%23 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_0
|
||||
%24 = OpLoad %int %23
|
||||
%26 = OpSLessThan %bool %15 %24
|
||||
OpBranchConditional %26 %11 %12
|
||||
%11 = OpLabel
|
||||
%32 = OpLoad %int %i
|
||||
%33 = OpLoad %int %i
|
||||
%35 = OpAccessChain %_ptr_StorageBuffer_v4int %_ %int_1 %33
|
||||
%36 = OpLoad %v4int %35
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v4int %__0 %int_1 %32
|
||||
OpStore %37 %36
|
||||
OpBranch %13
|
||||
%13 = OpLabel
|
||||
%38 = OpLoad %int %i
|
||||
%39 = OpIAdd %int %38 %int_1
|
||||
OpStore %i %39
|
||||
OpBranch %10
|
||||
%12 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
||||
[test]
|
||||
ssbo 0:0 112
|
||||
ssbo 0:0 subdata int 0 6 0 0 0
|
||||
ssbo 0:0 subdata int 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
ssbo 0:1 112
|
||||
ssbo 0:1 subdata int 0 6 0 0 0
|
||||
ssbo 0:1 subdata int 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
|
||||
compute entrypoint main
|
||||
compute 1 1 1
|
||||
|
||||
probe ssbo int 0:1 16 == 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
@@ -0,0 +1,118 @@
|
||||
[require]
|
||||
VK_KHR_spirv_1_4
|
||||
|
||||
[compute shader spirv]
|
||||
; Use the PartialCount loop control.
|
||||
; Generated from with modified loop control:
|
||||
;
|
||||
; #version 430
|
||||
;
|
||||
;
|
||||
; layout(std430, binding = 0) buffer input_buffer
|
||||
; {
|
||||
; int in_size;
|
||||
; ivec4 data_SSBO[];
|
||||
; };
|
||||
;
|
||||
; layout(std430, binding = 1) buffer output_buffer
|
||||
; {
|
||||
; int out_size;
|
||||
; ivec4 out_SSBO[];
|
||||
; };
|
||||
;
|
||||
; void main() {
|
||||
; for( int i = 0; i < in_size; ++i ) {
|
||||
; out_SSBO[i] = data_SSBO[i];
|
||||
; }
|
||||
; }
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %_ %__0
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpSource GLSL 430
|
||||
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
|
||||
OpSourceExtension "GL_GOOGLE_include_directive"
|
||||
OpName %main "main"
|
||||
OpName %i "i"
|
||||
OpName %input_buffer "input_buffer"
|
||||
OpMemberName %input_buffer 0 "in_size"
|
||||
OpMemberName %input_buffer 1 "data_SSBO"
|
||||
OpName %_ ""
|
||||
OpName %output_buffer "output_buffer"
|
||||
OpMemberName %output_buffer 0 "out_size"
|
||||
OpMemberName %output_buffer 1 "out_SSBO"
|
||||
OpName %__0 ""
|
||||
OpDecorate %_runtimearr_v4int ArrayStride 16
|
||||
OpMemberDecorate %input_buffer 0 Offset 0
|
||||
OpMemberDecorate %input_buffer 1 Offset 16
|
||||
OpDecorate %input_buffer Block
|
||||
OpDecorate %_ DescriptorSet 0
|
||||
OpDecorate %_ Binding 0
|
||||
OpDecorate %_runtimearr_v4int_0 ArrayStride 16
|
||||
OpMemberDecorate %output_buffer 0 Offset 0
|
||||
OpMemberDecorate %output_buffer 1 Offset 16
|
||||
OpDecorate %output_buffer Block
|
||||
OpDecorate %__0 DescriptorSet 0
|
||||
OpDecorate %__0 Binding 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_runtimearr_v4int = OpTypeRuntimeArray %v4int
|
||||
%input_buffer = OpTypeStruct %int %_runtimearr_v4int
|
||||
%_ptr_StorageBuffer_input_buffer = OpTypePointer StorageBuffer %input_buffer
|
||||
%_ = OpVariable %_ptr_StorageBuffer_input_buffer StorageBuffer
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%bool = OpTypeBool
|
||||
%_runtimearr_v4int_0 = OpTypeRuntimeArray %v4int
|
||||
%output_buffer = OpTypeStruct %int %_runtimearr_v4int_0
|
||||
%_ptr_StorageBuffer_output_buffer = OpTypePointer StorageBuffer %output_buffer
|
||||
%__0 = OpVariable %_ptr_StorageBuffer_output_buffer StorageBuffer
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function
|
||||
OpStore %i %int_0
|
||||
OpBranch %10
|
||||
%10 = OpLabel
|
||||
OpLoopMerge %12 %13 PartialCount 4
|
||||
OpBranch %14
|
||||
%14 = OpLabel
|
||||
%15 = OpLoad %int %i
|
||||
%23 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_0
|
||||
%24 = OpLoad %int %23
|
||||
%26 = OpSLessThan %bool %15 %24
|
||||
OpBranchConditional %26 %11 %12
|
||||
%11 = OpLabel
|
||||
%32 = OpLoad %int %i
|
||||
%33 = OpLoad %int %i
|
||||
%35 = OpAccessChain %_ptr_StorageBuffer_v4int %_ %int_1 %33
|
||||
%36 = OpLoad %v4int %35
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v4int %__0 %int_1 %32
|
||||
OpStore %37 %36
|
||||
OpBranch %13
|
||||
%13 = OpLabel
|
||||
%38 = OpLoad %int %i
|
||||
%39 = OpIAdd %int %38 %int_1
|
||||
OpStore %i %39
|
||||
OpBranch %10
|
||||
%12 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
||||
[test]
|
||||
ssbo 0:0 112
|
||||
ssbo 0:0 subdata int 0 6 0 0 0
|
||||
ssbo 0:0 subdata int 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
ssbo 0:1 112
|
||||
ssbo 0:1 subdata int 0 6 0 0 0
|
||||
ssbo 0:1 subdata int 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
|
||||
compute entrypoint main
|
||||
compute 1 1 1
|
||||
|
||||
probe ssbo int 0:1 16 == 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
@@ -0,0 +1,118 @@
|
||||
[require]
|
||||
VK_KHR_spirv_1_4
|
||||
|
||||
[compute shader spirv]
|
||||
; Use the PeelCount loop control.
|
||||
; Generated from with modified loop control:
|
||||
;
|
||||
; #version 430
|
||||
;
|
||||
;
|
||||
; layout(std430, binding = 0) buffer input_buffer
|
||||
; {
|
||||
; int in_size;
|
||||
; ivec4 data_SSBO[];
|
||||
; };
|
||||
;
|
||||
; layout(std430, binding = 1) buffer output_buffer
|
||||
; {
|
||||
; int out_size;
|
||||
; ivec4 out_SSBO[];
|
||||
; };
|
||||
;
|
||||
; void main() {
|
||||
; for( int i = 0; i < in_size; ++i ) {
|
||||
; out_SSBO[i] = data_SSBO[i];
|
||||
; }
|
||||
; }
|
||||
OpCapability Shader
|
||||
%1 = OpExtInstImport "GLSL.std.450"
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %_ %__0
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpSource GLSL 430
|
||||
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
|
||||
OpSourceExtension "GL_GOOGLE_include_directive"
|
||||
OpName %main "main"
|
||||
OpName %i "i"
|
||||
OpName %input_buffer "input_buffer"
|
||||
OpMemberName %input_buffer 0 "in_size"
|
||||
OpMemberName %input_buffer 1 "data_SSBO"
|
||||
OpName %_ ""
|
||||
OpName %output_buffer "output_buffer"
|
||||
OpMemberName %output_buffer 0 "out_size"
|
||||
OpMemberName %output_buffer 1 "out_SSBO"
|
||||
OpName %__0 ""
|
||||
OpDecorate %_runtimearr_v4int ArrayStride 16
|
||||
OpMemberDecorate %input_buffer 0 Offset 0
|
||||
OpMemberDecorate %input_buffer 1 Offset 16
|
||||
OpDecorate %input_buffer Block
|
||||
OpDecorate %_ DescriptorSet 0
|
||||
OpDecorate %_ Binding 0
|
||||
OpDecorate %_runtimearr_v4int_0 ArrayStride 16
|
||||
OpMemberDecorate %output_buffer 0 Offset 0
|
||||
OpMemberDecorate %output_buffer 1 Offset 16
|
||||
OpDecorate %output_buffer Block
|
||||
OpDecorate %__0 DescriptorSet 0
|
||||
OpDecorate %__0 Binding 1
|
||||
%void = OpTypeVoid
|
||||
%3 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_runtimearr_v4int = OpTypeRuntimeArray %v4int
|
||||
%input_buffer = OpTypeStruct %int %_runtimearr_v4int
|
||||
%_ptr_StorageBuffer_input_buffer = OpTypePointer StorageBuffer %input_buffer
|
||||
%_ = OpVariable %_ptr_StorageBuffer_input_buffer StorageBuffer
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%bool = OpTypeBool
|
||||
%_runtimearr_v4int_0 = OpTypeRuntimeArray %v4int
|
||||
%output_buffer = OpTypeStruct %int %_runtimearr_v4int_0
|
||||
%_ptr_StorageBuffer_output_buffer = OpTypePointer StorageBuffer %output_buffer
|
||||
%__0 = OpVariable %_ptr_StorageBuffer_output_buffer StorageBuffer
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
|
||||
%main = OpFunction %void None %3
|
||||
%5 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function
|
||||
OpStore %i %int_0
|
||||
OpBranch %10
|
||||
%10 = OpLabel
|
||||
OpLoopMerge %12 %13 PeelCount 2
|
||||
OpBranch %14
|
||||
%14 = OpLabel
|
||||
%15 = OpLoad %int %i
|
||||
%23 = OpAccessChain %_ptr_StorageBuffer_int %_ %int_0
|
||||
%24 = OpLoad %int %23
|
||||
%26 = OpSLessThan %bool %15 %24
|
||||
OpBranchConditional %26 %11 %12
|
||||
%11 = OpLabel
|
||||
%32 = OpLoad %int %i
|
||||
%33 = OpLoad %int %i
|
||||
%35 = OpAccessChain %_ptr_StorageBuffer_v4int %_ %int_1 %33
|
||||
%36 = OpLoad %v4int %35
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v4int %__0 %int_1 %32
|
||||
OpStore %37 %36
|
||||
OpBranch %13
|
||||
%13 = OpLabel
|
||||
%38 = OpLoad %int %i
|
||||
%39 = OpIAdd %int %38 %int_1
|
||||
OpStore %i %39
|
||||
OpBranch %10
|
||||
%12 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
||||
[test]
|
||||
ssbo 0:0 112
|
||||
ssbo 0:0 subdata int 0 6 0 0 0
|
||||
ssbo 0:0 subdata int 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
ssbo 0:1 112
|
||||
ssbo 0:1 subdata int 0 6 0 0 0
|
||||
ssbo 0:1 subdata int 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
|
||||
compute entrypoint main
|
||||
compute 1 1 1
|
||||
|
||||
probe ssbo int 0:1 16 == 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
||||
Reference in New Issue
Block a user