SPIRV-Cross/shaders-no-opt/asm/comp/nonuniform-bracket-handling.vk.nocompat.asm.comp
Hans-Kristian Arntzen 532f65583e Rewrite how non-uniform qualifiers are handled.
Remove all shenanigans with propagation, and only consume nonuniform
qualifiers exactly where needed (last minute).
2021-04-22 16:03:08 +02:00

300 lines
14 KiB
Plaintext

; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 233
; Schema: 0
OpCapability Shader
OpCapability SampledBuffer
OpCapability ImageBuffer
OpCapability ImageQuery
OpCapability StorageImageWriteWithoutFormat
OpCapability GroupNonUniformBallot
OpCapability RuntimeDescriptorArray
OpCapability UniformTexelBufferArrayDynamicIndexing
OpCapability StorageTexelBufferArrayDynamicIndexing
OpCapability UniformTexelBufferArrayNonUniformIndexing
OpCapability StorageTexelBufferArrayNonUniformIndexing
OpCapability PhysicalStorageBufferAddresses
OpExtension "SPV_EXT_descriptor_indexing"
OpExtension "SPV_KHR_physical_storage_buffer"
OpMemoryModel PhysicalStorageBuffer64 GLSL450
OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID
OpExecutionMode %main LocalSize 1 1 1
OpName %main "main"
OpName %RootConstants "RootConstants"
OpName %registers "registers"
OpName %SSBO_Offsets "SSBO_Offsets"
OpDecorate %RootConstants Block
OpMemberDecorate %RootConstants 0 Offset 0
OpMemberDecorate %RootConstants 1 Offset 4
OpMemberDecorate %RootConstants 2 Offset 8
OpMemberDecorate %RootConstants 3 Offset 12
OpMemberDecorate %RootConstants 4 Offset 16
OpMemberDecorate %RootConstants 5 Offset 20
OpMemberDecorate %RootConstants 6 Offset 24
OpMemberDecorate %RootConstants 7 Offset 28
OpDecorate %_runtimearr_v2uint ArrayStride 8
OpMemberDecorate %SSBO_Offsets 0 Offset 0
OpDecorate %SSBO_Offsets Block
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 0
OpDecorate %13 NonWritable
OpDecorate %13 Restrict
OpDecorate %18 DescriptorSet 1
OpDecorate %18 Binding 0
OpDecorate %22 DescriptorSet 4
OpDecorate %22 Binding 0
OpDecorate %26 DescriptorSet 4
OpDecorate %26 Binding 0
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
OpDecorate %148 NonUniform
OpDecorate %149 NonUniform
OpDecorate %172 NonUniform
OpDecorate %173 NonUniform
OpDecorate %196 NonUniform
OpDecorate %197 NonUniform
OpDecorate %205 NonUniform
OpDecorate %212 NonUniform
%void = OpTypeVoid
%2 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%RootConstants = OpTypeStruct %uint %uint %uint %uint %uint %uint %uint %uint
%_ptr_PushConstant_RootConstants = OpTypePointer PushConstant %RootConstants
%registers = OpVariable %_ptr_PushConstant_RootConstants PushConstant
%v2uint = OpTypeVector %uint 2
%_runtimearr_v2uint = OpTypeRuntimeArray %v2uint
%SSBO_Offsets = OpTypeStruct %_runtimearr_v2uint
%_ptr_StorageBuffer_SSBO_Offsets = OpTypePointer StorageBuffer %SSBO_Offsets
%13 = OpVariable %_ptr_StorageBuffer_SSBO_Offsets StorageBuffer
%float = OpTypeFloat 32
%15 = OpTypeImage %float Buffer 0 0 0 1 Unknown
%_runtimearr_15 = OpTypeRuntimeArray %15
%_ptr_UniformConstant__runtimearr_15 = OpTypePointer UniformConstant %_runtimearr_15
%18 = OpVariable %_ptr_UniformConstant__runtimearr_15 UniformConstant
%19 = OpTypeImage %float Buffer 0 0 0 2 R32f
%_runtimearr_19 = OpTypeRuntimeArray %19
%_ptr_UniformConstant__runtimearr_19 = OpTypePointer UniformConstant %_runtimearr_19
%22 = OpVariable %_ptr_UniformConstant__runtimearr_19 UniformConstant
%23 = OpTypeImage %uint Buffer 0 0 0 2 R32ui
%_runtimearr_23 = OpTypeRuntimeArray %23
%_ptr_UniformConstant__runtimearr_23 = OpTypePointer UniformConstant %_runtimearr_23
%26 = OpVariable %_ptr_UniformConstant__runtimearr_23 UniformConstant
%_ptr_UniformConstant_23 = OpTypePointer UniformConstant %23
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_4 = OpConstant %uint 4
%uint_2 = OpConstant %uint 2
%uint_3 = OpConstant %uint 3
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
%uint_0 = OpConstant %uint 0
%_ptr_UniformConstant_19 = OpTypePointer UniformConstant %19
%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
%uint_1 = OpConstant %uint 1
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
%_ptr_Input_uint = OpTypePointer Input %uint
%bool = OpTypeBool
%uint_4294967295 = OpConstant %uint 4294967295
%v4float = OpTypeVector %float 4
%uint_1024 = OpConstant %uint 1024
%uint_2048 = OpConstant %uint 2048
%_ptr_Image_uint = OpTypePointer Image %uint
%uint_40 = OpConstant %uint 40
%uint_50 = OpConstant %uint 50
%uint_70 = OpConstant %uint 70
%main = OpFunction %void None %2
%4 = OpLabel
OpBranch %231
%231 = OpLabel
%30 = OpAccessChain %_ptr_PushConstant_uint %registers %uint_4
%32 = OpLoad %uint %30
%33 = OpIAdd %uint %32 %uint_2
%28 = OpAccessChain %_ptr_UniformConstant_23 %26 %33
%35 = OpLoad %23 %28
%36 = OpGroupNonUniformBroadcastFirst %uint %uint_3 %33
%39 = OpAccessChain %_ptr_StorageBuffer_v2uint %13 %uint_0 %36
%41 = OpLoad %v2uint %39
%44 = OpAccessChain %_ptr_PushConstant_uint %registers %uint_4
%45 = OpLoad %uint %44
%43 = OpAccessChain %_ptr_UniformConstant_19 %22 %45
%46 = OpLoad %19 %43
%47 = OpGroupNonUniformBroadcastFirst %uint %uint_3 %45
%48 = OpAccessChain %_ptr_StorageBuffer_v2uint %13 %uint_0 %47
%49 = OpLoad %v2uint %48
%52 = OpAccessChain %_ptr_PushConstant_uint %registers %uint_1
%54 = OpLoad %uint %52
%55 = OpIAdd %uint %54 %uint_1
%51 = OpAccessChain %_ptr_UniformConstant_15 %18 %55
%56 = OpLoad %15 %51
%57 = OpGroupNonUniformBroadcastFirst %uint %uint_3 %55
%58 = OpAccessChain %_ptr_StorageBuffer_v2uint %13 %uint_0 %57
%59 = OpLoad %v2uint %58
%64 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
%65 = OpLoad %uint %64
%66 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_1
%67 = OpLoad %uint %66
%68 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_2
%69 = OpLoad %uint %68
%70 = OpIAdd %uint %65 %uint_4
%71 = OpCompositeExtract %uint %49 0
%72 = OpCompositeExtract %uint %49 1
%73 = OpIAdd %uint %70 %71
%75 = OpULessThan %bool %70 %72
%76 = OpSelect %uint %75 %73 %uint_4294967295
%79 = OpImageRead %v4float %46 %76
%80 = OpCompositeExtract %float %79 0
%81 = OpCompositeExtract %float %79 1
%82 = OpCompositeExtract %float %79 2
%83 = OpCompositeExtract %float %79 3
%84 = OpIAdd %uint %65 %uint_1024
%86 = OpCompositeExtract %uint %49 0
%87 = OpCompositeExtract %uint %49 1
%88 = OpIAdd %uint %84 %86
%89 = OpULessThan %bool %84 %87
%90 = OpSelect %uint %89 %88 %uint_4294967295
%91 = OpCompositeConstruct %v4float %80 %81 %82 %83
OpImageWrite %46 %90 %91
%92 = OpIAdd %uint %65 %uint_2
%93 = OpCompositeExtract %uint %59 0
%94 = OpCompositeExtract %uint %59 1
%95 = OpIAdd %uint %92 %93
%96 = OpULessThan %bool %92 %94
%97 = OpSelect %uint %96 %95 %uint_4294967295
%98 = OpImageFetch %v4float %56 %97
%99 = OpCompositeExtract %float %98 0
%100 = OpCompositeExtract %float %98 1
%101 = OpCompositeExtract %float %98 2
%102 = OpCompositeExtract %float %98 3
%103 = OpIAdd %uint %65 %uint_2048
%105 = OpCompositeExtract %uint %49 0
%106 = OpCompositeExtract %uint %49 1
%107 = OpIAdd %uint %103 %105
%108 = OpULessThan %bool %103 %106
%109 = OpSelect %uint %108 %107 %uint_4294967295
%110 = OpCompositeConstruct %v4float %99 %100 %101 %102
OpImageWrite %46 %109 %110
%111 = OpCompositeExtract %uint %41 0
%112 = OpCompositeExtract %uint %41 1
%113 = OpIAdd %uint %65 %111
%114 = OpULessThan %bool %65 %112
%115 = OpSelect %uint %114 %113 %uint_4294967295
%117 = OpImageTexelPointer %_ptr_Image_uint %28 %115 %uint_0
%118 = OpAtomicIAdd %uint %117 %uint_1 %uint_0 %uint_40
%120 = OpCompositeExtract %uint %41 0
%121 = OpCompositeExtract %uint %41 1
%122 = OpIAdd %uint %67 %120
%123 = OpULessThan %bool %67 %121
%124 = OpSelect %uint %123 %122 %uint_4294967295
%125 = OpImageTexelPointer %_ptr_Image_uint %28 %124 %uint_0
%126 = OpAtomicCompareExchange %uint %125 %uint_1 %uint_0 %uint_0 %uint_50 %uint_40
%128 = OpCompositeExtract %uint %49 1
%129 = OpConvertUToF %float %128
%130 = OpCompositeExtract %uint %49 0
%131 = OpCompositeExtract %uint %49 1
%132 = OpIAdd %uint %uint_0 %130
%133 = OpULessThan %bool %uint_0 %131
%134 = OpSelect %uint %133 %132 %uint_4294967295
%135 = OpCompositeConstruct %v4float %129 %129 %129 %129
OpImageWrite %46 %134 %135
%136 = OpCompositeExtract %uint %59 1
%137 = OpConvertUToF %float %136
%138 = OpCompositeExtract %uint %49 0
%139 = OpCompositeExtract %uint %49 1
%140 = OpIAdd %uint %uint_1 %138
%141 = OpULessThan %bool %uint_1 %139
%142 = OpSelect %uint %141 %140 %uint_4294967295
%143 = OpCompositeConstruct %v4float %137 %137 %137 %137
OpImageWrite %46 %142 %143
%144 = OpIAdd %uint %69 %uint_0
%146 = OpAccessChain %_ptr_PushConstant_uint %registers %uint_4
%147 = OpLoad %uint %146
%148 = OpIAdd %uint %147 %144
%145 = OpAccessChain %_ptr_UniformConstant_19 %22 %148
%149 = OpLoad %19 %145
%150 = OpAccessChain %_ptr_StorageBuffer_v2uint %13 %uint_0 %148
%151 = OpLoad %v2uint %150
%152 = OpCompositeExtract %uint %151 0
%153 = OpCompositeExtract %uint %151 1
%154 = OpIAdd %uint %70 %152
%155 = OpULessThan %bool %70 %153
%156 = OpSelect %uint %155 %154 %uint_4294967295
%157 = OpImageRead %v4float %149 %156
%158 = OpCompositeExtract %float %157 0
%159 = OpCompositeExtract %float %157 1
%160 = OpCompositeExtract %float %157 2
%161 = OpCompositeExtract %float %157 3
%162 = OpCompositeExtract %uint %151 0
%163 = OpCompositeExtract %uint %151 1
%164 = OpIAdd %uint %84 %162
%165 = OpULessThan %bool %84 %163
%166 = OpSelect %uint %165 %164 %uint_4294967295
%167 = OpCompositeConstruct %v4float %158 %159 %160 %161
OpImageWrite %149 %166 %167
%168 = OpIAdd %uint %69 %uint_0
%170 = OpAccessChain %_ptr_PushConstant_uint %registers %uint_1
%171 = OpLoad %uint %170
%172 = OpIAdd %uint %171 %168
%169 = OpAccessChain %_ptr_UniformConstant_15 %18 %172
%173 = OpLoad %15 %169
%174 = OpAccessChain %_ptr_StorageBuffer_v2uint %13 %uint_0 %172
%175 = OpLoad %v2uint %174
%176 = OpCompositeExtract %uint %175 0
%177 = OpCompositeExtract %uint %175 1
%178 = OpIAdd %uint %70 %176
%179 = OpULessThan %bool %70 %177
%180 = OpSelect %uint %179 %178 %uint_4294967295
%181 = OpImageFetch %v4float %173 %180
%182 = OpCompositeExtract %float %181 0
%183 = OpCompositeExtract %float %181 1
%184 = OpCompositeExtract %float %181 2
%185 = OpCompositeExtract %float %181 3
%186 = OpCompositeExtract %uint %151 0
%187 = OpCompositeExtract %uint %151 1
%188 = OpIAdd %uint %103 %186
%189 = OpULessThan %bool %103 %187
%190 = OpSelect %uint %189 %188 %uint_4294967295
%191 = OpCompositeConstruct %v4float %182 %183 %184 %185
OpImageWrite %149 %190 %191
%192 = OpIAdd %uint %69 %uint_0
%194 = OpAccessChain %_ptr_PushConstant_uint %registers %uint_4
%195 = OpLoad %uint %194
%196 = OpIAdd %uint %195 %192
%193 = OpAccessChain %_ptr_UniformConstant_23 %26 %196
%197 = OpLoad %23 %193
%198 = OpAccessChain %_ptr_StorageBuffer_v2uint %13 %uint_0 %196
%199 = OpLoad %v2uint %198
%200 = OpCompositeExtract %uint %199 0
%201 = OpCompositeExtract %uint %199 1
%202 = OpIAdd %uint %67 %200
%203 = OpULessThan %bool %67 %201
%204 = OpSelect %uint %203 %202 %uint_4294967295
%205 = OpImageTexelPointer %_ptr_Image_uint %193 %204 %uint_0
%206 = OpAtomicIAdd %uint %205 %uint_1 %uint_0 %uint_40
%207 = OpCompositeExtract %uint %199 0
%208 = OpCompositeExtract %uint %199 1
%209 = OpIAdd %uint %67 %207
%210 = OpULessThan %bool %67 %208
%211 = OpSelect %uint %210 %209 %uint_4294967295
%212 = OpImageTexelPointer %_ptr_Image_uint %193 %211 %uint_0
%213 = OpAtomicCompareExchange %uint %212 %uint_1 %uint_0 %uint_0 %uint_70 %uint_40
%215 = OpCompositeExtract %uint %151 1
%216 = OpConvertUToF %float %215
%217 = OpCompositeExtract %uint %49 0
%218 = OpCompositeExtract %uint %49 1
%219 = OpIAdd %uint %uint_2 %217
%220 = OpULessThan %bool %uint_2 %218
%221 = OpSelect %uint %220 %219 %uint_4294967295
%222 = OpCompositeConstruct %v4float %216 %216 %216 %216
OpImageWrite %46 %221 %222
%223 = OpCompositeExtract %uint %175 1
%224 = OpConvertUToF %float %223
%225 = OpCompositeExtract %uint %49 0
%226 = OpCompositeExtract %uint %49 1
%227 = OpIAdd %uint %uint_3 %225
%228 = OpULessThan %bool %uint_3 %226
%229 = OpSelect %uint %228 %227 %uint_4294967295
%230 = OpCompositeConstruct %v4float %224 %224 %224 %224
OpImageWrite %46 %229 %230
OpReturn
OpFunctionEnd