Split input blocks in compute shaders into flat variables.
Component: Vulkan
VK-GL-CTS Issue: 1967
Affects:
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.ssbo_comparisons_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.wg_comparisons_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.ssbo_comparisons_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.wg_comparisons_not_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.ssbo_comparisons_diff
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrdiff.wg_comparisons_diff
Change-Id: I228583843148e36a33d7f469cb90f628eb432c37
OpCapability Shader
OpCapability VariablePointersStorageBuffer
OpMemoryModel Logical GLSL450
-OpEntryPoint GLCompute %main "main" %in_var %diff_var %n_var %input_var
+OpEntryPoint GLCompute %main "main" %in_var %diff_var %n_var %lid_var %gid_var
OpExecutionMode %main LocalSize 4 1 1
OpDecorate %struct_4 Block
OpDecorate %n_var DescriptorSet 0
OpDecorate %n_var Binding 2
-OpDecorate %input_struct Block
-OpMemberDecorate %input_struct 0 BuiltIn LocalInvocationId
-OpMemberDecorate %input_struct 1 BuiltIn WorkgroupId
+OpDecorate %lid_var BuiltIn LocalInvocationId
+OpDecorate %gid_var BuiltIn WorkgroupId
%void = OpTypeVoid
%bool = OpTypeBool
%int_17 = OpConstant %int 17
%int3 = OpTypeVector %int 3
-%input_struct = OpTypeStruct %int3 %int3
-%ptr_input_struct = OpTypePointer Input %input_struct
%ptr_input_int3 = OpTypePointer Input %int3
%array_4 = OpTypeArray %int %int_4
%in_var = OpVariable %ptr_struct_4 StorageBuffer
%diff_var = OpVariable %ptr_struct_17 StorageBuffer
%n_var = OpVariable %ptr_n_struct Uniform
-%input_var = OpVariable %ptr_input_struct Input
+%lid_var = OpVariable %ptr_input_int3 Input
+%gid_var = OpVariable %ptr_input_int3 Input
%void_fn = OpTypeFunction %void
%main = OpFunction %void None %void_fn
%entry = OpLabel
%n_gep = OpAccessChain %ptr_n %n_var %int_0
%n = OpLoad %int %n_gep
-%gid_gep = OpAccessChain %ptr_input_int3 %input_var %int_1
-%gid = OpLoad %int3 %gid_gep
+%gid = OpLoad %int3 %gid_var
%gid_x = OpCompositeExtract %int %gid 0
-%lid_gep = OpAccessChain %ptr_input_int3 %input_var %int_0
-%lid = OpLoad %int3 %lid_gep
+%lid = OpLoad %int3 %lid_var
%lid_x = OpCompositeExtract %int %lid 0
%array_gep_0 = OpAccessChain %ptr_array_4 %in_var %int_0 %int_0
%array_gep = OpAccessChain %ptr_array_4 %in_var %int_0 %gid_x
OpCapability Shader
OpCapability VariablePointers
OpMemoryModel Logical GLSL450
-OpEntryPoint GLCompute %main "main" %wg_var %diff_var %input_var
+OpEntryPoint GLCompute %main "main" %wg_var %diff_var %lid_var %gid_var
OpExecutionMode %main LocalSize 16 4 1
OpDecorate %struct_17 Block
OpDecorate %diff_var DescriptorSet 0
OpDecorate %diff_var Binding 0
-OpDecorate %input_struct Block
-OpMemberDecorate %input_struct 0 BuiltIn LocalInvocationId
-OpMemberDecorate %input_struct 1 BuiltIn GlobalInvocationId
+OpDecorate %lid_var BuiltIn LocalInvocationId
+OpDecorate %gid_var BuiltIn GlobalInvocationId
%void = OpTypeVoid
%bool = OpTypeBool
%int_64 = OpConstant %int 64
%int3 = OpTypeVector %int 3
-%input_struct = OpTypeStruct %int3 %int3
-%ptr_input_struct = OpTypePointer Input %input_struct
%ptr_input_int3 = OpTypePointer Input %int3
%array_4 = OpTypeArray %int %int_4
%wg_var = OpVariable %ptr_array_array_4 Workgroup
%diff_var = OpVariable %ptr_struct_17 StorageBuffer
-%input_var = OpVariable %ptr_input_struct Input
+%lid_var = OpVariable %ptr_input_int3 Input
+%gid_var = OpVariable %ptr_input_int3 Input
%void_fn = OpTypeFunction %void
%main = OpFunction %void None %void_fn
%entry = OpLabel
-%gid_gep = OpAccessChain %ptr_input_int3 %input_var %int_1
-%gid = OpLoad %int3 %gid_gep
+%gid = OpLoad %int3 %gid_var
%gid_x = OpCompositeExtract %int %gid 0
%gid_y = OpCompositeExtract %int %gid 1
-%lid_gep = OpAccessChain %ptr_input_int3 %input_var %int_0
-%lid = OpLoad %int3 %lid_gep
+%lid = OpLoad %int3 %lid_var
%lid_x = OpCompositeExtract %int %lid 0
%lid_y = OpCompositeExtract %int %lid 1
%array_gep_0 = OpAccessChain %ptr_array_4 %wg_var %int_0
OpCapability Shader
OpCapability VariablePointersStorageBuffer
OpMemoryModel Logical GLSL450
-OpEntryPoint GLCompute %main "main" %in_var %equal_var %n_var %input_var
+OpEntryPoint GLCompute %main "main" %in_var %equal_var %n_var %lid_var %gid_var
OpExecutionMode %main LocalSize 4 1 1
OpDecorate %struct_4 Block
OpDecorate %n_var DescriptorSet 0
OpDecorate %n_var Binding 2
-OpDecorate %input_struct Block
-OpMemberDecorate %input_struct 0 BuiltIn LocalInvocationId
-OpMemberDecorate %input_struct 1 BuiltIn WorkgroupId
+OpDecorate %lid_var BuiltIn LocalInvocationId
+OpDecorate %gid_var BuiltIn WorkgroupId
%void = OpTypeVoid
%bool = OpTypeBool
%int_17 = OpConstant %int 17
%int3 = OpTypeVector %int 3
-%input_struct = OpTypeStruct %int3 %int3
-%ptr_input_struct = OpTypePointer Input %input_struct
%ptr_input_int3 = OpTypePointer Input %int3
%array_4 = OpTypeArray %int %int_4
%in_var = OpVariable %ptr_struct_4 StorageBuffer
%equal_var = OpVariable %ptr_struct_17 StorageBuffer
%n_var = OpVariable %ptr_n_struct Uniform
-%input_var = OpVariable %ptr_input_struct Input
+%lid_var = OpVariable %ptr_input_int3 Input
+%gid_var = OpVariable %ptr_input_int3 Input
%void_fn = OpTypeFunction %void
%main = OpFunction %void None %void_fn
%entry = OpLabel
%n_gep = OpAccessChain %ptr_n %n_var %int_0
%n = OpLoad %int %n_gep
-%gid_gep = OpAccessChain %ptr_input_int3 %input_var %int_1
-%gid = OpLoad %int3 %gid_gep
+%gid = OpLoad %int3 %gid_var
%gid_x = OpCompositeExtract %int %gid 0
-%lid_gep = OpAccessChain %ptr_input_int3 %input_var %int_0
-%lid = OpLoad %int3 %lid_gep
+%lid = OpLoad %int3 %lid_var
%lid_x = OpCompositeExtract %int %lid 0
%array_gep_0 = OpAccessChain %ptr_array_4 %in_var %int_0 %int_0
%array_gep = OpAccessChain %ptr_array_4 %in_var %int_0 %gid_x
OpCapability Shader
OpCapability VariablePointers
OpMemoryModel Logical GLSL450
-OpEntryPoint GLCompute %main "main" %wg_var %equal_var %input_var
+OpEntryPoint GLCompute %main "main" %wg_var %equal_var %lid_var %gid_var
OpExecutionMode %main LocalSize 16 4 1
OpDecorate %struct_17 Block
OpDecorate %equal_var DescriptorSet 0
OpDecorate %equal_var Binding 0
-OpDecorate %input_struct Block
-OpMemberDecorate %input_struct 0 BuiltIn LocalInvocationId
-OpMemberDecorate %input_struct 1 BuiltIn GlobalInvocationId
+OpDecorate %lid_var BuiltIn LocalInvocationId
+OpDecorate %gid_var BuiltIn GlobalInvocationId
%void = OpTypeVoid
%bool = OpTypeBool
%int_64 = OpConstant %int 64
%int3 = OpTypeVector %int 3
-%input_struct = OpTypeStruct %int3 %int3
-%ptr_input_struct = OpTypePointer Input %input_struct
%ptr_input_int3 = OpTypePointer Input %int3
%array_4 = OpTypeArray %int %int_4
%wg_var = OpVariable %ptr_array_array_4 Workgroup
%equal_var = OpVariable %ptr_struct_17 StorageBuffer
-%input_var = OpVariable %ptr_input_struct Input
+%lid_var = OpVariable %ptr_input_int3 Input
+%gid_var = OpVariable %ptr_input_int3 Input
%void_fn = OpTypeFunction %void
%main = OpFunction %void None %void_fn
%entry = OpLabel
-%gid_gep = OpAccessChain %ptr_input_int3 %input_var %int_1
-%gid = OpLoad %int3 %gid_gep
+%gid = OpLoad %int3 %gid_var
%gid_x = OpCompositeExtract %int %gid 0
%gid_y = OpCompositeExtract %int %gid 1
-%lid_gep = OpAccessChain %ptr_input_int3 %input_var %int_0
-%lid = OpLoad %int3 %lid_gep
+%lid = OpLoad %int3 %lid_var
%lid_x = OpCompositeExtract %int %lid 0
%lid_y = OpCompositeExtract %int %lid 1
%array_gep_0 = OpAccessChain %ptr_array_4 %wg_var %int_0
OpCapability Shader
OpCapability VariablePointersStorageBuffer
OpMemoryModel Logical GLSL450
-OpEntryPoint GLCompute %main "main" %in_var %not_equal_var %n_var %input_var
+OpEntryPoint GLCompute %main "main" %in_var %not_equal_var %n_var %lid_var %gid_var
OpExecutionMode %main LocalSize 4 1 1
OpDecorate %struct_4 Block
OpDecorate %n_var DescriptorSet 0
OpDecorate %n_var Binding 2
-OpDecorate %input_struct Block
-OpMemberDecorate %input_struct 0 BuiltIn LocalInvocationId
-OpMemberDecorate %input_struct 1 BuiltIn WorkgroupId
+OpDecorate %lid_var BuiltIn LocalInvocationId
+OpDecorate %gid_var BuiltIn WorkgroupId
%void = OpTypeVoid
%bool = OpTypeBool
%int_17 = OpConstant %int 17
%int3 = OpTypeVector %int 3
-%input_struct = OpTypeStruct %int3 %int3
-%ptr_input_struct = OpTypePointer Input %input_struct
%ptr_input_int3 = OpTypePointer Input %int3
%array_4 = OpTypeArray %int %int_4
%in_var = OpVariable %ptr_struct_4 StorageBuffer
%not_equal_var = OpVariable %ptr_struct_17 StorageBuffer
%n_var = OpVariable %ptr_n_struct Uniform
-%input_var = OpVariable %ptr_input_struct Input
+%lid_var = OpVariable %ptr_input_int3 Input
+%gid_var = OpVariable %ptr_input_int3 Input
%void_fn = OpTypeFunction %void
%main = OpFunction %void None %void_fn
%entry = OpLabel
%n_gep = OpAccessChain %ptr_n %n_var %int_0
%n = OpLoad %int %n_gep
-%gid_gep = OpAccessChain %ptr_input_int3 %input_var %int_1
-%gid = OpLoad %int3 %gid_gep
+%gid = OpLoad %int3 %gid_var
%gid_x = OpCompositeExtract %int %gid 0
-%lid_gep = OpAccessChain %ptr_input_int3 %input_var %int_0
-%lid = OpLoad %int3 %lid_gep
+%lid = OpLoad %int3 %lid_var
%lid_x = OpCompositeExtract %int %lid 0
%array_gep_0 = OpAccessChain %ptr_array_4 %in_var %int_0 %int_0
%array_gep = OpAccessChain %ptr_array_4 %in_var %int_0 %gid_x
OpCapability Shader
OpCapability VariablePointers
OpMemoryModel Logical GLSL450
-OpEntryPoint GLCompute %main "main" %wg_var %not_equal_var %input_var
+OpEntryPoint GLCompute %main "main" %wg_var %not_equal_var %lid_var %gid_var
OpExecutionMode %main LocalSize 16 4 1
OpDecorate %struct_17 Block
OpDecorate %not_equal_var DescriptorSet 0
OpDecorate %not_equal_var Binding 0
-OpDecorate %input_struct Block
-OpMemberDecorate %input_struct 0 BuiltIn LocalInvocationId
-OpMemberDecorate %input_struct 1 BuiltIn GlobalInvocationId
+OpDecorate %lid_var BuiltIn LocalInvocationId
+OpDecorate %gid_var BuiltIn GlobalInvocationId
%void = OpTypeVoid
%bool = OpTypeBool
%wg_var = OpVariable %ptr_array_array_4 Workgroup
%not_equal_var = OpVariable %ptr_struct_17 StorageBuffer
-%input_var = OpVariable %ptr_input_struct Input
+%lid_var = OpVariable %ptr_input_int3 Input
+%gid_var = OpVariable %ptr_input_int3 Input
%void_fn = OpTypeFunction %void
%main = OpFunction %void None %void_fn
%entry = OpLabel
-%gid_gep = OpAccessChain %ptr_input_int3 %input_var %int_1
-%gid = OpLoad %int3 %gid_gep
+%gid = OpLoad %int3 %gid_var
%gid_x = OpCompositeExtract %int %gid 0
%gid_y = OpCompositeExtract %int %gid 1
-%lid_gep = OpAccessChain %ptr_input_int3 %input_var %int_0
-%lid = OpLoad %int3 %lid_gep
+%lid = OpLoad %int3 %lid_var
%lid_x = OpCompositeExtract %int %lid 0
%lid_y = OpCompositeExtract %int %lid 1
%array_gep_0 = OpAccessChain %ptr_array_4 %wg_var %int_0