fix(vulkan): remove atomic memory semantics (#8391)

This commit is contained in:
atlv 2025-10-29 13:21:56 -04:00 committed by GitHub
parent ddcd89fd69
commit 7a2afeb014
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 741 additions and 747 deletions

View File

@ -111,6 +111,10 @@ SamplerDescriptor {
- Align copies b/w textures and buffers via a single intermediate buffer per copy when `D3D12_FEATURE_DATA_D3D12_OPTIONS13.UnrestrictedBufferTextureCopyPitchSupported` is `false`. By @ErichDonGubler in [#7721](https://github.com/gfx-rs/wgpu/pull/7721).
#### Vulkan
- Fixed a validation error regarding atomic memory semantics. By @atlv24 in [#8391](https://github.com/gfx-rs/wgpu/pull/8391).
#### hal
- `DropCallback`s are now called after dropping all other fields of their parent structs. By @jerzywilczek in [#8353](https://github.com/gfx-rs/wgpu/pull/8353)

View File

@ -3543,6 +3543,7 @@ impl BlockContext<'_> {
}
_ => unimplemented!(),
};
let mut cas_instr = Instruction::new(spirv::Op::AtomicCompareExchange);
cas_instr.set_type(scalar_type_id);
cas_instr.set_result(cas_result_id);

View File

@ -79,11 +79,10 @@ impl crate::AddressSpace {
self,
) -> (spirv::MemorySemantics, spirv::Scope) {
match self {
Self::Storage { .. } => (spirv::MemorySemantics::UNIFORM_MEMORY, spirv::Scope::Device),
Self::WorkGroup => (
spirv::MemorySemantics::WORKGROUP_MEMORY,
spirv::Scope::Workgroup,
),
Self::Storage { .. } => (spirv::MemorySemantics::empty(), spirv::Scope::Device),
Self::WorkGroup => (spirv::MemorySemantics::empty(), spirv::Scope::Workgroup),
Self::Uniform => (spirv::MemorySemantics::empty(), spirv::Scope::Device),
Self::Handle => (spirv::MemorySemantics::empty(), spirv::Scope::Device),
_ => (spirv::MemorySemantics::empty(), spirv::Scope::Invocation),
}
}

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 173
; Bound: 172
OpCapability Shader
OpCapability Int64Atomics
OpCapability Int64
@ -9,9 +9,9 @@ OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %19 "test_atomic_compare_exchange_i64"
OpEntryPoint GLCompute %104 "test_atomic_compare_exchange_u64"
OpEntryPoint GLCompute %103 "test_atomic_compare_exchange_u64"
OpExecutionMode %19 LocalSize 1 1 1
OpExecutionMode %104 LocalSize 1 1 1
OpExecutionMode %103 LocalSize 1 1 1
OpDecorate %5 ArrayStride 8
OpDecorate %8 ArrayStride 8
OpMemberDecorate %10 0 Offset 0
@ -62,20 +62,19 @@ OpMemberDecorate %16 0 Offset 0
%64 = OpTypePointer StorageBuffer %4
%68 = OpTypeInt 32 1
%67 = OpConstant %68 1
%69 = OpConstant %3 64
%105 = OpTypePointer StorageBuffer %8
%107 = OpConstant %7 10
%110 = OpTypePointer Function %7
%111 = OpConstantNull %7
%113 = OpConstantNull %9
%137 = OpTypePointer StorageBuffer %7
%104 = OpTypePointer StorageBuffer %8
%106 = OpConstant %7 10
%109 = OpTypePointer Function %7
%110 = OpConstantNull %7
%112 = OpConstantNull %9
%136 = OpTypePointer StorageBuffer %7
%19 = OpFunction %2 None %20
%18 = OpLabel
%27 = OpVariable %28 Function %22
%29 = OpVariable %30 Function %31
%32 = OpVariable %33 Function %34
%46 = OpVariable %41 Function %45
%74 = OpVariable %41 Function %45
%73 = OpVariable %41 Function %45
%23 = OpAccessChain %21 %12 %22
OpBranch %35
%35 = OpLabel
@ -109,163 +108,163 @@ OpBranch %61
%61 = OpLabel
%63 = OpLoad %3 %27
%65 = OpAccessChain %64 %23 %63
%66 = OpAtomicLoad %4 %65 %67 %69
%66 = OpAtomicLoad %4 %65 %67 %22
OpStore %29 %66
OpStore %32 %24
OpBranch %70
%70 = OpLabel
OpLoopMerge %71 %73 None
OpBranch %75
%75 = OpLabel
%76 = OpLoad %40 %74
%77 = OpIEqual %42 %43 %76
%78 = OpAll %9 %77
OpSelectionMerge %79 None
OpBranchConditional %78 %71 %79
%79 = OpLabel
%80 = OpCompositeExtract %3 %76 1
%81 = OpIEqual %9 %80 %22
%82 = OpSelect %3 %81 %26 %22
%83 = OpCompositeConstruct %40 %82 %26
%84 = OpISub %40 %76 %83
OpStore %74 %84
OpBranch %72
%72 = OpLabel
%85 = OpLoad %9 %32
%86 = OpLogicalNot %9 %85
OpSelectionMerge %87 None
OpBranchConditional %86 %87 %88
%88 = OpLabel
OpBranch %69
%69 = OpLabel
OpLoopMerge %70 %72 None
OpBranch %74
%74 = OpLabel
%75 = OpLoad %40 %73
%76 = OpIEqual %42 %43 %75
%77 = OpAll %9 %76
OpSelectionMerge %78 None
OpBranchConditional %77 %70 %78
%78 = OpLabel
%79 = OpCompositeExtract %3 %75 1
%80 = OpIEqual %9 %79 %22
%81 = OpSelect %3 %80 %26 %22
%82 = OpCompositeConstruct %40 %81 %26
%83 = OpISub %40 %75 %82
OpStore %73 %83
OpBranch %71
%71 = OpLabel
%84 = OpLoad %9 %32
%85 = OpLogicalNot %9 %84
OpSelectionMerge %86 None
OpBranchConditional %85 %86 %87
%87 = OpLabel
OpBranch %70
%86 = OpLabel
OpBranch %88
%88 = OpLabel
%90 = OpLoad %4 %29
%91 = OpIAdd %4 %90 %25
%92 = OpLoad %3 %27
%93 = OpLoad %4 %29
%95 = OpAccessChain %64 %23 %92
%96 = OpAtomicCompareExchange %4 %95 %67 %22 %22 %91 %93
%97 = OpIEqual %9 %96 %93
%94 = OpCompositeConstruct %10 %96 %97
%98 = OpCompositeExtract %4 %94 0
OpStore %29 %98
%99 = OpCompositeExtract %9 %94 1
OpStore %32 %99
OpBranch %89
%89 = OpLabel
%91 = OpLoad %4 %29
%92 = OpIAdd %4 %91 %25
%93 = OpLoad %3 %27
%94 = OpLoad %4 %29
%96 = OpAccessChain %64 %23 %93
%97 = OpAtomicCompareExchange %4 %96 %67 %69 %69 %92 %94
%98 = OpIEqual %9 %97 %94
%95 = OpCompositeConstruct %10 %97 %98
%99 = OpCompositeExtract %4 %95 0
OpStore %29 %99
%100 = OpCompositeExtract %9 %95 1
OpStore %32 %100
OpBranch %90
%90 = OpLabel
OpBranch %73
%73 = OpLabel
OpBranch %70
%71 = OpLabel
OpBranch %72
%72 = OpLabel
OpBranch %69
%70 = OpLabel
OpBranch %62
%62 = OpLabel
OpBranch %39
%39 = OpLabel
%101 = OpLoad %3 %27
%102 = OpIAdd %3 %101 %26
OpStore %27 %102
%100 = OpLoad %3 %27
%101 = OpIAdd %3 %100 %26
OpStore %27 %101
OpBranch %36
%37 = OpLabel
OpReturn
OpFunctionEnd
%104 = OpFunction %2 None %20
%103 = OpLabel
%108 = OpVariable %28 Function %22
%109 = OpVariable %110 Function %111
%112 = OpVariable %33 Function %113
%119 = OpVariable %41 Function %45
%144 = OpVariable %41 Function %45
%106 = OpAccessChain %105 %15 %22
%103 = OpFunction %2 None %20
%102 = OpLabel
%107 = OpVariable %28 Function %22
%108 = OpVariable %109 Function %110
%111 = OpVariable %33 Function %112
%118 = OpVariable %41 Function %45
%143 = OpVariable %41 Function %45
%105 = OpAccessChain %104 %15 %22
OpBranch %113
%113 = OpLabel
OpBranch %114
%114 = OpLabel
OpBranch %115
%115 = OpLabel
OpLoopMerge %116 %118 None
OpBranch %120
%120 = OpLabel
%121 = OpLoad %40 %119
%122 = OpIEqual %42 %43 %121
%123 = OpAll %9 %122
OpSelectionMerge %124 None
OpBranchConditional %123 %116 %124
%124 = OpLabel
%125 = OpCompositeExtract %3 %121 1
%126 = OpIEqual %9 %125 %22
%127 = OpSelect %3 %126 %26 %22
%128 = OpCompositeConstruct %40 %127 %26
%129 = OpISub %40 %121 %128
OpStore %119 %129
OpBranch %117
%117 = OpLabel
%130 = OpLoad %3 %108
%131 = OpULessThan %9 %130 %6
OpSelectionMerge %132 None
OpBranchConditional %131 %132 %133
%133 = OpLabel
OpLoopMerge %115 %117 None
OpBranch %119
%119 = OpLabel
%120 = OpLoad %40 %118
%121 = OpIEqual %42 %43 %120
%122 = OpAll %9 %121
OpSelectionMerge %123 None
OpBranchConditional %122 %115 %123
%123 = OpLabel
%124 = OpCompositeExtract %3 %120 1
%125 = OpIEqual %9 %124 %22
%126 = OpSelect %3 %125 %26 %22
%127 = OpCompositeConstruct %40 %126 %26
%128 = OpISub %40 %120 %127
OpStore %118 %128
OpBranch %116
%116 = OpLabel
%129 = OpLoad %3 %107
%130 = OpULessThan %9 %129 %6
OpSelectionMerge %131 None
OpBranchConditional %130 %131 %132
%132 = OpLabel
OpBranch %134
%134 = OpLabel
%136 = OpLoad %3 %108
%138 = OpAccessChain %137 %106 %136
%139 = OpAtomicLoad %7 %138 %67 %69
OpStore %109 %139
OpStore %112 %24
OpBranch %140
%140 = OpLabel
OpLoopMerge %141 %143 None
OpBranch %145
%145 = OpLabel
%146 = OpLoad %40 %144
%147 = OpIEqual %42 %43 %146
%148 = OpAll %9 %147
OpSelectionMerge %149 None
OpBranchConditional %148 %141 %149
%149 = OpLabel
%150 = OpCompositeExtract %3 %146 1
%151 = OpIEqual %9 %150 %22
%152 = OpSelect %3 %151 %26 %22
%153 = OpCompositeConstruct %40 %152 %26
%154 = OpISub %40 %146 %153
OpStore %144 %154
OpBranch %142
%142 = OpLabel
%155 = OpLoad %9 %112
%156 = OpLogicalNot %9 %155
OpSelectionMerge %157 None
OpBranchConditional %156 %157 %158
%158 = OpLabel
OpBranch %115
%131 = OpLabel
OpBranch %133
%133 = OpLabel
%135 = OpLoad %3 %107
%137 = OpAccessChain %136 %105 %135
%138 = OpAtomicLoad %7 %137 %67 %22
OpStore %108 %138
OpStore %111 %24
OpBranch %139
%139 = OpLabel
OpLoopMerge %140 %142 None
OpBranch %144
%144 = OpLabel
%145 = OpLoad %40 %143
%146 = OpIEqual %42 %43 %145
%147 = OpAll %9 %146
OpSelectionMerge %148 None
OpBranchConditional %147 %140 %148
%148 = OpLabel
%149 = OpCompositeExtract %3 %145 1
%150 = OpIEqual %9 %149 %22
%151 = OpSelect %3 %150 %26 %22
%152 = OpCompositeConstruct %40 %151 %26
%153 = OpISub %40 %145 %152
OpStore %143 %153
OpBranch %141
%141 = OpLabel
%154 = OpLoad %9 %111
%155 = OpLogicalNot %9 %154
OpSelectionMerge %156 None
OpBranchConditional %155 %156 %157
%157 = OpLabel
OpBranch %140
%156 = OpLabel
OpBranch %158
%158 = OpLabel
%160 = OpLoad %7 %108
%161 = OpIAdd %7 %160 %106
%162 = OpLoad %3 %107
%163 = OpLoad %7 %108
%165 = OpAccessChain %136 %105 %162
%166 = OpAtomicCompareExchange %7 %165 %67 %22 %22 %161 %163
%167 = OpIEqual %9 %166 %163
%164 = OpCompositeConstruct %11 %166 %167
%168 = OpCompositeExtract %7 %164 0
OpStore %108 %168
%169 = OpCompositeExtract %9 %164 1
OpStore %111 %169
OpBranch %159
%159 = OpLabel
%161 = OpLoad %7 %109
%162 = OpIAdd %7 %161 %107
%163 = OpLoad %3 %108
%164 = OpLoad %7 %109
%166 = OpAccessChain %137 %106 %163
%167 = OpAtomicCompareExchange %7 %166 %67 %69 %69 %162 %164
%168 = OpIEqual %9 %167 %164
%165 = OpCompositeConstruct %11 %167 %168
%169 = OpCompositeExtract %7 %165 0
OpStore %109 %169
%170 = OpCompositeExtract %9 %165 1
OpStore %112 %170
OpBranch %160
%160 = OpLabel
OpBranch %143
%143 = OpLabel
OpBranch %140
%141 = OpLabel
OpBranch %135
%135 = OpLabel
OpBranch %118
%118 = OpLabel
%171 = OpLoad %3 %108
%172 = OpIAdd %3 %171 %26
OpStore %108 %172
OpBranch %115
%116 = OpLabel
OpBranch %142
%142 = OpLabel
OpBranch %139
%140 = OpLabel
OpBranch %134
%134 = OpLabel
OpBranch %117
%117 = OpLabel
%170 = OpLoad %3 %107
%171 = OpIAdd %3 %170 %26
OpStore %107 %171
OpBranch %114
%115 = OpLabel
OpReturn
OpFunctionEnd

View File

@ -1,15 +1,15 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 174
; Bound: 173
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %18 "test_atomic_compare_exchange_i32"
OpEntryPoint GLCompute %105 "test_atomic_compare_exchange_u32"
OpEntryPoint GLCompute %104 "test_atomic_compare_exchange_u32"
OpExecutionMode %18 LocalSize 1 1 1
OpExecutionMode %105 LocalSize 1 1 1
OpExecutionMode %104 LocalSize 1 1 1
OpDecorate %5 ArrayStride 4
OpDecorate %7 ArrayStride 4
OpMemberDecorate %9 0 Offset 0
@ -59,18 +59,17 @@ OpMemberDecorate %15 0 Offset 0
%45 = OpConstantComposite %40 %44 %44
%64 = OpTypePointer StorageBuffer %4
%67 = OpConstant %4 1
%68 = OpConstant %3 64
%106 = OpTypePointer StorageBuffer %7
%110 = OpConstantNull %3
%112 = OpConstantNull %8
%136 = OpTypePointer StorageBuffer %3
%105 = OpTypePointer StorageBuffer %7
%109 = OpConstantNull %3
%111 = OpConstantNull %8
%135 = OpTypePointer StorageBuffer %3
%18 = OpFunction %2 None %19
%17 = OpLabel
%27 = OpVariable %28 Function %21
%29 = OpVariable %30 Function %31
%32 = OpVariable %33 Function %34
%46 = OpVariable %41 Function %45
%73 = OpVariable %41 Function %45
%72 = OpVariable %41 Function %45
%22 = OpAccessChain %20 %11 %21
OpBranch %35
%35 = OpLabel
@ -104,167 +103,167 @@ OpBranch %61
%61 = OpLabel
%63 = OpLoad %3 %27
%65 = OpAccessChain %64 %22 %63
%66 = OpAtomicLoad %4 %65 %67 %68
%66 = OpAtomicLoad %4 %65 %67 %21
OpStore %29 %66
OpStore %32 %23
OpBranch %69
%69 = OpLabel
OpLoopMerge %70 %72 None
OpBranch %74
%74 = OpLabel
%75 = OpLoad %40 %73
%76 = OpIEqual %42 %43 %75
%77 = OpAll %8 %76
OpSelectionMerge %78 None
OpBranchConditional %77 %70 %78
%78 = OpLabel
%79 = OpCompositeExtract %3 %75 1
%80 = OpIEqual %8 %79 %21
%81 = OpSelect %3 %80 %26 %21
%82 = OpCompositeConstruct %40 %81 %26
%83 = OpISub %40 %75 %82
OpStore %73 %83
OpBranch %71
%71 = OpLabel
%84 = OpLoad %8 %32
%85 = OpLogicalNot %8 %84
OpSelectionMerge %86 None
OpBranchConditional %85 %86 %87
%87 = OpLabel
OpBranch %68
%68 = OpLabel
OpLoopMerge %69 %71 None
OpBranch %73
%73 = OpLabel
%74 = OpLoad %40 %72
%75 = OpIEqual %42 %43 %74
%76 = OpAll %8 %75
OpSelectionMerge %77 None
OpBranchConditional %76 %69 %77
%77 = OpLabel
%78 = OpCompositeExtract %3 %74 1
%79 = OpIEqual %8 %78 %21
%80 = OpSelect %3 %79 %26 %21
%81 = OpCompositeConstruct %40 %80 %26
%82 = OpISub %40 %74 %81
OpStore %72 %82
OpBranch %70
%70 = OpLabel
%83 = OpLoad %8 %32
%84 = OpLogicalNot %8 %83
OpSelectionMerge %85 None
OpBranchConditional %84 %85 %86
%86 = OpLabel
OpBranch %69
%85 = OpLabel
OpBranch %87
%87 = OpLabel
%89 = OpLoad %4 %29
%90 = OpBitcast %24 %89
%91 = OpFAdd %24 %90 %25
%92 = OpBitcast %4 %91
%93 = OpLoad %3 %27
%94 = OpLoad %4 %29
%96 = OpAccessChain %64 %22 %93
%97 = OpAtomicCompareExchange %4 %96 %67 %21 %21 %92 %94
%98 = OpIEqual %8 %97 %94
%95 = OpCompositeConstruct %9 %97 %98
%99 = OpCompositeExtract %4 %95 0
OpStore %29 %99
%100 = OpCompositeExtract %8 %95 1
OpStore %32 %100
OpBranch %88
%88 = OpLabel
%90 = OpLoad %4 %29
%91 = OpBitcast %24 %90
%92 = OpFAdd %24 %91 %25
%93 = OpBitcast %4 %92
%94 = OpLoad %3 %27
%95 = OpLoad %4 %29
%97 = OpAccessChain %64 %22 %94
%98 = OpAtomicCompareExchange %4 %97 %67 %68 %68 %93 %95
%99 = OpIEqual %8 %98 %95
%96 = OpCompositeConstruct %9 %98 %99
%100 = OpCompositeExtract %4 %96 0
OpStore %29 %100
%101 = OpCompositeExtract %8 %96 1
OpStore %32 %101
OpBranch %89
%89 = OpLabel
OpBranch %72
%72 = OpLabel
OpBranch %69
%70 = OpLabel
OpBranch %71
%71 = OpLabel
OpBranch %68
%69 = OpLabel
OpBranch %62
%62 = OpLabel
OpBranch %39
%39 = OpLabel
%102 = OpLoad %3 %27
%103 = OpIAdd %3 %102 %26
OpStore %27 %103
%101 = OpLoad %3 %27
%102 = OpIAdd %3 %101 %26
OpStore %27 %102
OpBranch %36
%37 = OpLabel
OpReturn
OpFunctionEnd
%105 = OpFunction %2 None %19
%104 = OpLabel
%108 = OpVariable %28 Function %21
%109 = OpVariable %28 Function %110
%111 = OpVariable %33 Function %112
%118 = OpVariable %41 Function %45
%143 = OpVariable %41 Function %45
%107 = OpAccessChain %106 %14 %21
%104 = OpFunction %2 None %19
%103 = OpLabel
%107 = OpVariable %28 Function %21
%108 = OpVariable %28 Function %109
%110 = OpVariable %33 Function %111
%117 = OpVariable %41 Function %45
%142 = OpVariable %41 Function %45
%106 = OpAccessChain %105 %14 %21
OpBranch %112
%112 = OpLabel
OpBranch %113
%113 = OpLabel
OpBranch %114
%114 = OpLabel
OpLoopMerge %115 %117 None
OpBranch %119
%119 = OpLabel
%120 = OpLoad %40 %118
%121 = OpIEqual %42 %43 %120
%122 = OpAll %8 %121
OpSelectionMerge %123 None
OpBranchConditional %122 %115 %123
%123 = OpLabel
%124 = OpCompositeExtract %3 %120 1
%125 = OpIEqual %8 %124 %21
%126 = OpSelect %3 %125 %26 %21
%127 = OpCompositeConstruct %40 %126 %26
%128 = OpISub %40 %120 %127
OpStore %118 %128
OpBranch %116
%116 = OpLabel
%129 = OpLoad %3 %108
%130 = OpULessThan %8 %129 %6
OpSelectionMerge %131 None
OpBranchConditional %130 %131 %132
%132 = OpLabel
OpLoopMerge %114 %116 None
OpBranch %118
%118 = OpLabel
%119 = OpLoad %40 %117
%120 = OpIEqual %42 %43 %119
%121 = OpAll %8 %120
OpSelectionMerge %122 None
OpBranchConditional %121 %114 %122
%122 = OpLabel
%123 = OpCompositeExtract %3 %119 1
%124 = OpIEqual %8 %123 %21
%125 = OpSelect %3 %124 %26 %21
%126 = OpCompositeConstruct %40 %125 %26
%127 = OpISub %40 %119 %126
OpStore %117 %127
OpBranch %115
%115 = OpLabel
%128 = OpLoad %3 %107
%129 = OpULessThan %8 %128 %6
OpSelectionMerge %130 None
OpBranchConditional %129 %130 %131
%131 = OpLabel
OpBranch %133
%133 = OpLabel
%135 = OpLoad %3 %108
%137 = OpAccessChain %136 %107 %135
%138 = OpAtomicLoad %3 %137 %67 %68
OpStore %109 %138
OpStore %111 %23
OpBranch %139
%139 = OpLabel
OpLoopMerge %140 %142 None
OpBranch %144
%144 = OpLabel
%145 = OpLoad %40 %143
%146 = OpIEqual %42 %43 %145
%147 = OpAll %8 %146
OpSelectionMerge %148 None
OpBranchConditional %147 %140 %148
%148 = OpLabel
%149 = OpCompositeExtract %3 %145 1
%150 = OpIEqual %8 %149 %21
%151 = OpSelect %3 %150 %26 %21
%152 = OpCompositeConstruct %40 %151 %26
%153 = OpISub %40 %145 %152
OpStore %143 %153
OpBranch %141
%141 = OpLabel
%154 = OpLoad %8 %111
%155 = OpLogicalNot %8 %154
OpSelectionMerge %156 None
OpBranchConditional %155 %156 %157
%157 = OpLabel
OpBranch %114
%130 = OpLabel
OpBranch %132
%132 = OpLabel
%134 = OpLoad %3 %107
%136 = OpAccessChain %135 %106 %134
%137 = OpAtomicLoad %3 %136 %67 %21
OpStore %108 %137
OpStore %110 %23
OpBranch %138
%138 = OpLabel
OpLoopMerge %139 %141 None
OpBranch %143
%143 = OpLabel
%144 = OpLoad %40 %142
%145 = OpIEqual %42 %43 %144
%146 = OpAll %8 %145
OpSelectionMerge %147 None
OpBranchConditional %146 %139 %147
%147 = OpLabel
%148 = OpCompositeExtract %3 %144 1
%149 = OpIEqual %8 %148 %21
%150 = OpSelect %3 %149 %26 %21
%151 = OpCompositeConstruct %40 %150 %26
%152 = OpISub %40 %144 %151
OpStore %142 %152
OpBranch %140
%140 = OpLabel
%153 = OpLoad %8 %110
%154 = OpLogicalNot %8 %153
OpSelectionMerge %155 None
OpBranchConditional %154 %155 %156
%156 = OpLabel
OpBranch %139
%155 = OpLabel
OpBranch %157
%157 = OpLabel
%159 = OpLoad %3 %108
%160 = OpBitcast %24 %159
%161 = OpFAdd %24 %160 %25
%162 = OpBitcast %3 %161
%163 = OpLoad %3 %107
%164 = OpLoad %3 %108
%166 = OpAccessChain %135 %106 %163
%167 = OpAtomicCompareExchange %3 %166 %67 %21 %21 %162 %164
%168 = OpIEqual %8 %167 %164
%165 = OpCompositeConstruct %10 %167 %168
%169 = OpCompositeExtract %3 %165 0
OpStore %108 %169
%170 = OpCompositeExtract %8 %165 1
OpStore %110 %170
OpBranch %158
%158 = OpLabel
%160 = OpLoad %3 %109
%161 = OpBitcast %24 %160
%162 = OpFAdd %24 %161 %25
%163 = OpBitcast %3 %162
%164 = OpLoad %3 %108
%165 = OpLoad %3 %109
%167 = OpAccessChain %136 %107 %164
%168 = OpAtomicCompareExchange %3 %167 %67 %68 %68 %163 %165
%169 = OpIEqual %8 %168 %165
%166 = OpCompositeConstruct %10 %168 %169
%170 = OpCompositeExtract %3 %166 0
OpStore %109 %170
%171 = OpCompositeExtract %8 %166 1
OpStore %111 %171
OpBranch %159
%159 = OpLabel
OpBranch %142
%142 = OpLabel
OpBranch %139
%140 = OpLabel
OpBranch %134
%134 = OpLabel
OpBranch %117
%117 = OpLabel
%172 = OpLoad %3 %108
%173 = OpIAdd %3 %172 %26
OpStore %108 %173
OpBranch %114
%115 = OpLabel
OpBranch %141
%141 = OpLabel
OpBranch %138
%139 = OpLabel
OpBranch %133
%133 = OpLabel
OpBranch %116
%116 = OpLabel
%171 = OpLoad %3 %107
%172 = OpIAdd %3 %171 %26
OpStore %107 %172
OpBranch %113
%114 = OpLabel
OpReturn
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 62
; Bound: 61
OpCapability Shader
OpCapability AtomicFloat32AddEXT
OpExtension "SPV_KHR_storage_buffer_storage_class"
@ -52,9 +52,8 @@ OpDecorate %19 BuiltIn LocalInvocationId
%31 = OpConstant %3 1.5
%34 = OpTypeInt 32 1
%33 = OpConstant %34 1
%35 = OpConstant %6 64
%36 = OpConstant %6 1
%40 = OpConstant %6 264
%35 = OpConstant %6 1
%39 = OpConstant %6 264
%22 = OpFunction %2 None %23
%18 = OpLabel
%21 = OpLoad %8 %19
@ -63,36 +62,36 @@ OpDecorate %19 BuiltIn LocalInvocationId
%30 = OpAccessChain %29 %15 %25
OpBranch %32
%32 = OpLabel
OpAtomicStore %26 %33 %35 %31
%37 = OpAccessChain %24 %28 %36
OpAtomicStore %37 %33 %35 %31
%38 = OpAccessChain %24 %30 %25
OpAtomicStore %38 %33 %35 %31
%39 = OpAccessChain %24 %30 %36 %36
OpAtomicStore %39 %33 %35 %31
OpControlBarrier %5 %5 %40
%41 = OpAtomicLoad %3 %26 %33 %35
%42 = OpAccessChain %24 %28 %36
%43 = OpAtomicLoad %3 %42 %33 %35
%44 = OpAccessChain %24 %30 %25
%45 = OpAtomicLoad %3 %44 %33 %35
%46 = OpAccessChain %24 %30 %36 %36
%47 = OpAtomicLoad %3 %46 %33 %35
OpControlBarrier %5 %5 %40
%48 = OpAtomicFAddEXT %3 %26 %33 %35 %31
%50 = OpAccessChain %24 %28 %36
%49 = OpAtomicFAddEXT %3 %50 %33 %35 %31
%52 = OpAccessChain %24 %30 %25
%51 = OpAtomicFAddEXT %3 %52 %33 %35 %31
%54 = OpAccessChain %24 %30 %36 %36
%53 = OpAtomicFAddEXT %3 %54 %33 %35 %31
OpControlBarrier %5 %5 %40
%55 = OpAtomicExchange %3 %26 %33 %35 %31
%57 = OpAccessChain %24 %28 %36
%56 = OpAtomicExchange %3 %57 %33 %35 %31
%59 = OpAccessChain %24 %30 %25
%58 = OpAtomicExchange %3 %59 %33 %35 %31
%61 = OpAccessChain %24 %30 %36 %36
%60 = OpAtomicExchange %3 %61 %33 %35 %31
OpAtomicStore %26 %33 %25 %31
%36 = OpAccessChain %24 %28 %35
OpAtomicStore %36 %33 %25 %31
%37 = OpAccessChain %24 %30 %25
OpAtomicStore %37 %33 %25 %31
%38 = OpAccessChain %24 %30 %35 %35
OpAtomicStore %38 %33 %25 %31
OpControlBarrier %5 %5 %39
%40 = OpAtomicLoad %3 %26 %33 %25
%41 = OpAccessChain %24 %28 %35
%42 = OpAtomicLoad %3 %41 %33 %25
%43 = OpAccessChain %24 %30 %25
%44 = OpAtomicLoad %3 %43 %33 %25
%45 = OpAccessChain %24 %30 %35 %35
%46 = OpAtomicLoad %3 %45 %33 %25
OpControlBarrier %5 %5 %39
%47 = OpAtomicFAddEXT %3 %26 %33 %25 %31
%49 = OpAccessChain %24 %28 %35
%48 = OpAtomicFAddEXT %3 %49 %33 %25 %31
%51 = OpAccessChain %24 %30 %25
%50 = OpAtomicFAddEXT %3 %51 %33 %25 %31
%53 = OpAccessChain %24 %30 %35 %35
%52 = OpAtomicFAddEXT %3 %53 %33 %25 %31
OpControlBarrier %5 %5 %39
%54 = OpAtomicExchange %3 %26 %33 %25 %31
%56 = OpAccessChain %24 %28 %35
%55 = OpAtomicExchange %3 %56 %33 %25 %31
%58 = OpAccessChain %24 %30 %25
%57 = OpAtomicExchange %3 %58 %33 %25 %31
%60 = OpAccessChain %24 %30 %35 %35
%59 = OpAtomicExchange %3 %60 %33 %25 %31
OpReturn
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 67
; Bound: 66
OpCapability Shader
OpCapability Int64Atomics
OpCapability Int64
@ -60,9 +60,8 @@ OpDecorate %22 BuiltIn LocalInvocationId
%36 = OpConstant %3 1
%41 = OpTypeInt 32 1
%40 = OpConstant %41 1
%42 = OpConstant %6 64
%46 = OpConstant %6 1
%54 = OpConstant %6 264
%45 = OpConstant %6 1
%53 = OpConstant %6 264
%25 = OpFunction %2 None %26
%21 = OpLabel
%24 = OpLoad %8 %22
@ -73,29 +72,29 @@ OpDecorate %22 BuiltIn LocalInvocationId
OpBranch %37
%37 = OpLabel
%38 = OpLoad %3 %35
%39 = OpAtomicUMax %3 %29 %40 %42 %38
%43 = OpLoad %3 %35
%44 = OpIAdd %3 %36 %43
%47 = OpAccessChain %27 %31 %46
%45 = OpAtomicUMax %3 %47 %40 %42 %44
%49 = OpAccessChain %27 %33 %28
%48 = OpAtomicUMax %3 %49 %40 %42 %36
%50 = OpCompositeExtract %6 %24 0
%51 = OpUConvert %3 %50
%53 = OpAccessChain %27 %33 %46 %46
%52 = OpAtomicUMax %3 %53 %40 %42 %51
OpControlBarrier %5 %5 %54
%55 = OpLoad %3 %35
%56 = OpAtomicUMin %3 %29 %40 %42 %55
%57 = OpLoad %3 %35
%58 = OpIAdd %3 %36 %57
%60 = OpAccessChain %27 %31 %46
%59 = OpAtomicUMin %3 %60 %40 %42 %58
%62 = OpAccessChain %27 %33 %28
%61 = OpAtomicUMin %3 %62 %40 %42 %36
%63 = OpCompositeExtract %6 %24 0
%64 = OpUConvert %3 %63
%66 = OpAccessChain %27 %33 %46 %46
%65 = OpAtomicUMin %3 %66 %40 %42 %64
%39 = OpAtomicUMax %3 %29 %40 %28 %38
%42 = OpLoad %3 %35
%43 = OpIAdd %3 %36 %42
%46 = OpAccessChain %27 %31 %45
%44 = OpAtomicUMax %3 %46 %40 %28 %43
%48 = OpAccessChain %27 %33 %28
%47 = OpAtomicUMax %3 %48 %40 %28 %36
%49 = OpCompositeExtract %6 %24 0
%50 = OpUConvert %3 %49
%52 = OpAccessChain %27 %33 %45 %45
%51 = OpAtomicUMax %3 %52 %40 %28 %50
OpControlBarrier %5 %5 %53
%54 = OpLoad %3 %35
%55 = OpAtomicUMin %3 %29 %40 %28 %54
%56 = OpLoad %3 %35
%57 = OpIAdd %3 %36 %56
%59 = OpAccessChain %27 %31 %45
%58 = OpAtomicUMin %3 %59 %40 %28 %57
%61 = OpAccessChain %27 %33 %28
%60 = OpAtomicUMin %3 %61 %40 %28 %36
%62 = OpCompositeExtract %6 %24 0
%63 = OpUConvert %3 %62
%65 = OpAccessChain %27 %33 %45 %45
%64 = OpAtomicUMin %3 %65 %40 %28 %63
OpReturn
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 227
; Bound: 225
OpCapability Shader
OpCapability Int64Atomics
OpCapability Int64
@ -75,12 +75,10 @@ OpDecorate %29 BuiltIn LocalInvocationId
%55 = OpConstant %7 264
%58 = OpTypeInt 32 1
%57 = OpConstant %58 1
%59 = OpConstant %7 64
%60 = OpTypePointer StorageBuffer %4
%61 = OpConstant %7 1
%65 = OpConstant %58 2
%66 = OpConstant %7 256
%67 = OpTypePointer Workgroup %4
%59 = OpTypePointer StorageBuffer %4
%60 = OpConstant %7 1
%64 = OpConstant %58 2
%65 = OpTypePointer Workgroup %4
%32 = OpFunction %2 None %33
%28 = OpLabel
%31 = OpLoad %9 %29
@ -102,183 +100,183 @@ OpBranch %53
OpControlBarrier %6 %6 %55
OpBranch %56
%56 = OpLabel
OpAtomicStore %36 %57 %59 %41
%62 = OpAccessChain %60 %38 %61
OpAtomicStore %62 %57 %59 %42
%63 = OpAccessChain %34 %40 %35
OpAtomicStore %63 %57 %59 %41
%64 = OpAccessChain %60 %40 %61 %61
OpAtomicStore %64 %57 %59 %42
OpAtomicStore %22 %65 %66 %41
%68 = OpAccessChain %67 %24 %61
OpAtomicStore %68 %65 %66 %42
%69 = OpAccessChain %23 %26 %35
OpAtomicStore %69 %65 %66 %41
%70 = OpAccessChain %67 %26 %61 %61
OpAtomicStore %70 %65 %66 %42
OpAtomicStore %36 %57 %35 %41
%61 = OpAccessChain %59 %38 %60
OpAtomicStore %61 %57 %35 %42
%62 = OpAccessChain %34 %40 %35
OpAtomicStore %62 %57 %35 %41
%63 = OpAccessChain %59 %40 %60 %60
OpAtomicStore %63 %57 %35 %42
OpAtomicStore %22 %64 %35 %41
%66 = OpAccessChain %65 %24 %60
OpAtomicStore %66 %64 %35 %42
%67 = OpAccessChain %23 %26 %35
OpAtomicStore %67 %64 %35 %41
%68 = OpAccessChain %65 %26 %60 %60
OpAtomicStore %68 %64 %35 %42
OpControlBarrier %6 %6 %55
%71 = OpAtomicLoad %3 %36 %57 %59
%72 = OpAccessChain %60 %38 %61
%73 = OpAtomicLoad %4 %72 %57 %59
%74 = OpAccessChain %34 %40 %35
%75 = OpAtomicLoad %3 %74 %57 %59
%76 = OpAccessChain %60 %40 %61 %61
%77 = OpAtomicLoad %4 %76 %57 %59
%78 = OpAtomicLoad %3 %22 %65 %66
%79 = OpAccessChain %67 %24 %61
%80 = OpAtomicLoad %4 %79 %65 %66
%81 = OpAccessChain %23 %26 %35
%82 = OpAtomicLoad %3 %81 %65 %66
%83 = OpAccessChain %67 %26 %61 %61
%84 = OpAtomicLoad %4 %83 %65 %66
%69 = OpAtomicLoad %3 %36 %57 %35
%70 = OpAccessChain %59 %38 %60
%71 = OpAtomicLoad %4 %70 %57 %35
%72 = OpAccessChain %34 %40 %35
%73 = OpAtomicLoad %3 %72 %57 %35
%74 = OpAccessChain %59 %40 %60 %60
%75 = OpAtomicLoad %4 %74 %57 %35
%76 = OpAtomicLoad %3 %22 %64 %35
%77 = OpAccessChain %65 %24 %60
%78 = OpAtomicLoad %4 %77 %64 %35
%79 = OpAccessChain %23 %26 %35
%80 = OpAtomicLoad %3 %79 %64 %35
%81 = OpAccessChain %65 %26 %60 %60
%82 = OpAtomicLoad %4 %81 %64 %35
OpControlBarrier %6 %6 %55
%85 = OpAtomicIAdd %3 %36 %57 %59 %41
%87 = OpAccessChain %60 %38 %61
%86 = OpAtomicIAdd %4 %87 %57 %59 %42
%89 = OpAccessChain %34 %40 %35
%88 = OpAtomicIAdd %3 %89 %57 %59 %41
%91 = OpAccessChain %60 %40 %61 %61
%90 = OpAtomicIAdd %4 %91 %57 %59 %42
%92 = OpAtomicIAdd %3 %22 %65 %66 %41
%94 = OpAccessChain %67 %24 %61
%93 = OpAtomicIAdd %4 %94 %65 %66 %42
%96 = OpAccessChain %23 %26 %35
%95 = OpAtomicIAdd %3 %96 %65 %66 %41
%98 = OpAccessChain %67 %26 %61 %61
%97 = OpAtomicIAdd %4 %98 %65 %66 %42
%83 = OpAtomicIAdd %3 %36 %57 %35 %41
%85 = OpAccessChain %59 %38 %60
%84 = OpAtomicIAdd %4 %85 %57 %35 %42
%87 = OpAccessChain %34 %40 %35
%86 = OpAtomicIAdd %3 %87 %57 %35 %41
%89 = OpAccessChain %59 %40 %60 %60
%88 = OpAtomicIAdd %4 %89 %57 %35 %42
%90 = OpAtomicIAdd %3 %22 %64 %35 %41
%92 = OpAccessChain %65 %24 %60
%91 = OpAtomicIAdd %4 %92 %64 %35 %42
%94 = OpAccessChain %23 %26 %35
%93 = OpAtomicIAdd %3 %94 %64 %35 %41
%96 = OpAccessChain %65 %26 %60 %60
%95 = OpAtomicIAdd %4 %96 %64 %35 %42
OpControlBarrier %6 %6 %55
%99 = OpAtomicISub %3 %36 %57 %59 %41
%101 = OpAccessChain %60 %38 %61
%100 = OpAtomicISub %4 %101 %57 %59 %42
%103 = OpAccessChain %34 %40 %35
%102 = OpAtomicISub %3 %103 %57 %59 %41
%105 = OpAccessChain %60 %40 %61 %61
%104 = OpAtomicISub %4 %105 %57 %59 %42
%106 = OpAtomicISub %3 %22 %65 %66 %41
%108 = OpAccessChain %67 %24 %61
%107 = OpAtomicISub %4 %108 %65 %66 %42
%110 = OpAccessChain %23 %26 %35
%109 = OpAtomicISub %3 %110 %65 %66 %41
%112 = OpAccessChain %67 %26 %61 %61
%111 = OpAtomicISub %4 %112 %65 %66 %42
%97 = OpAtomicISub %3 %36 %57 %35 %41
%99 = OpAccessChain %59 %38 %60
%98 = OpAtomicISub %4 %99 %57 %35 %42
%101 = OpAccessChain %34 %40 %35
%100 = OpAtomicISub %3 %101 %57 %35 %41
%103 = OpAccessChain %59 %40 %60 %60
%102 = OpAtomicISub %4 %103 %57 %35 %42
%104 = OpAtomicISub %3 %22 %64 %35 %41
%106 = OpAccessChain %65 %24 %60
%105 = OpAtomicISub %4 %106 %64 %35 %42
%108 = OpAccessChain %23 %26 %35
%107 = OpAtomicISub %3 %108 %64 %35 %41
%110 = OpAccessChain %65 %26 %60 %60
%109 = OpAtomicISub %4 %110 %64 %35 %42
OpControlBarrier %6 %6 %55
%113 = OpAtomicUMax %3 %36 %57 %59 %41
%115 = OpAccessChain %60 %38 %61
%114 = OpAtomicSMax %4 %115 %57 %59 %42
%117 = OpAccessChain %34 %40 %35
%116 = OpAtomicUMax %3 %117 %57 %59 %41
%119 = OpAccessChain %60 %40 %61 %61
%118 = OpAtomicSMax %4 %119 %57 %59 %42
%120 = OpAtomicUMax %3 %22 %65 %66 %41
%122 = OpAccessChain %67 %24 %61
%121 = OpAtomicSMax %4 %122 %65 %66 %42
%124 = OpAccessChain %23 %26 %35
%123 = OpAtomicUMax %3 %124 %65 %66 %41
%126 = OpAccessChain %67 %26 %61 %61
%125 = OpAtomicSMax %4 %126 %65 %66 %42
%111 = OpAtomicUMax %3 %36 %57 %35 %41
%113 = OpAccessChain %59 %38 %60
%112 = OpAtomicSMax %4 %113 %57 %35 %42
%115 = OpAccessChain %34 %40 %35
%114 = OpAtomicUMax %3 %115 %57 %35 %41
%117 = OpAccessChain %59 %40 %60 %60
%116 = OpAtomicSMax %4 %117 %57 %35 %42
%118 = OpAtomicUMax %3 %22 %64 %35 %41
%120 = OpAccessChain %65 %24 %60
%119 = OpAtomicSMax %4 %120 %64 %35 %42
%122 = OpAccessChain %23 %26 %35
%121 = OpAtomicUMax %3 %122 %64 %35 %41
%124 = OpAccessChain %65 %26 %60 %60
%123 = OpAtomicSMax %4 %124 %64 %35 %42
OpControlBarrier %6 %6 %55
%127 = OpAtomicUMin %3 %36 %57 %59 %41
%129 = OpAccessChain %60 %38 %61
%128 = OpAtomicSMin %4 %129 %57 %59 %42
%131 = OpAccessChain %34 %40 %35
%130 = OpAtomicUMin %3 %131 %57 %59 %41
%133 = OpAccessChain %60 %40 %61 %61
%132 = OpAtomicSMin %4 %133 %57 %59 %42
%134 = OpAtomicUMin %3 %22 %65 %66 %41
%136 = OpAccessChain %67 %24 %61
%135 = OpAtomicSMin %4 %136 %65 %66 %42
%138 = OpAccessChain %23 %26 %35
%137 = OpAtomicUMin %3 %138 %65 %66 %41
%140 = OpAccessChain %67 %26 %61 %61
%139 = OpAtomicSMin %4 %140 %65 %66 %42
%125 = OpAtomicUMin %3 %36 %57 %35 %41
%127 = OpAccessChain %59 %38 %60
%126 = OpAtomicSMin %4 %127 %57 %35 %42
%129 = OpAccessChain %34 %40 %35
%128 = OpAtomicUMin %3 %129 %57 %35 %41
%131 = OpAccessChain %59 %40 %60 %60
%130 = OpAtomicSMin %4 %131 %57 %35 %42
%132 = OpAtomicUMin %3 %22 %64 %35 %41
%134 = OpAccessChain %65 %24 %60
%133 = OpAtomicSMin %4 %134 %64 %35 %42
%136 = OpAccessChain %23 %26 %35
%135 = OpAtomicUMin %3 %136 %64 %35 %41
%138 = OpAccessChain %65 %26 %60 %60
%137 = OpAtomicSMin %4 %138 %64 %35 %42
OpControlBarrier %6 %6 %55
%141 = OpAtomicAnd %3 %36 %57 %59 %41
%143 = OpAccessChain %60 %38 %61
%142 = OpAtomicAnd %4 %143 %57 %59 %42
%145 = OpAccessChain %34 %40 %35
%144 = OpAtomicAnd %3 %145 %57 %59 %41
%147 = OpAccessChain %60 %40 %61 %61
%146 = OpAtomicAnd %4 %147 %57 %59 %42
%148 = OpAtomicAnd %3 %22 %65 %66 %41
%150 = OpAccessChain %67 %24 %61
%149 = OpAtomicAnd %4 %150 %65 %66 %42
%152 = OpAccessChain %23 %26 %35
%151 = OpAtomicAnd %3 %152 %65 %66 %41
%154 = OpAccessChain %67 %26 %61 %61
%153 = OpAtomicAnd %4 %154 %65 %66 %42
%139 = OpAtomicAnd %3 %36 %57 %35 %41
%141 = OpAccessChain %59 %38 %60
%140 = OpAtomicAnd %4 %141 %57 %35 %42
%143 = OpAccessChain %34 %40 %35
%142 = OpAtomicAnd %3 %143 %57 %35 %41
%145 = OpAccessChain %59 %40 %60 %60
%144 = OpAtomicAnd %4 %145 %57 %35 %42
%146 = OpAtomicAnd %3 %22 %64 %35 %41
%148 = OpAccessChain %65 %24 %60
%147 = OpAtomicAnd %4 %148 %64 %35 %42
%150 = OpAccessChain %23 %26 %35
%149 = OpAtomicAnd %3 %150 %64 %35 %41
%152 = OpAccessChain %65 %26 %60 %60
%151 = OpAtomicAnd %4 %152 %64 %35 %42
OpControlBarrier %6 %6 %55
%155 = OpAtomicOr %3 %36 %57 %59 %41
%157 = OpAccessChain %60 %38 %61
%156 = OpAtomicOr %4 %157 %57 %59 %42
%159 = OpAccessChain %34 %40 %35
%158 = OpAtomicOr %3 %159 %57 %59 %41
%161 = OpAccessChain %60 %40 %61 %61
%160 = OpAtomicOr %4 %161 %57 %59 %42
%162 = OpAtomicOr %3 %22 %65 %66 %41
%164 = OpAccessChain %67 %24 %61
%163 = OpAtomicOr %4 %164 %65 %66 %42
%166 = OpAccessChain %23 %26 %35
%165 = OpAtomicOr %3 %166 %65 %66 %41
%168 = OpAccessChain %67 %26 %61 %61
%167 = OpAtomicOr %4 %168 %65 %66 %42
%153 = OpAtomicOr %3 %36 %57 %35 %41
%155 = OpAccessChain %59 %38 %60
%154 = OpAtomicOr %4 %155 %57 %35 %42
%157 = OpAccessChain %34 %40 %35
%156 = OpAtomicOr %3 %157 %57 %35 %41
%159 = OpAccessChain %59 %40 %60 %60
%158 = OpAtomicOr %4 %159 %57 %35 %42
%160 = OpAtomicOr %3 %22 %64 %35 %41
%162 = OpAccessChain %65 %24 %60
%161 = OpAtomicOr %4 %162 %64 %35 %42
%164 = OpAccessChain %23 %26 %35
%163 = OpAtomicOr %3 %164 %64 %35 %41
%166 = OpAccessChain %65 %26 %60 %60
%165 = OpAtomicOr %4 %166 %64 %35 %42
OpControlBarrier %6 %6 %55
%169 = OpAtomicXor %3 %36 %57 %59 %41
%171 = OpAccessChain %60 %38 %61
%170 = OpAtomicXor %4 %171 %57 %59 %42
%173 = OpAccessChain %34 %40 %35
%172 = OpAtomicXor %3 %173 %57 %59 %41
%175 = OpAccessChain %60 %40 %61 %61
%174 = OpAtomicXor %4 %175 %57 %59 %42
%176 = OpAtomicXor %3 %22 %65 %66 %41
%178 = OpAccessChain %67 %24 %61
%177 = OpAtomicXor %4 %178 %65 %66 %42
%180 = OpAccessChain %23 %26 %35
%179 = OpAtomicXor %3 %180 %65 %66 %41
%182 = OpAccessChain %67 %26 %61 %61
%181 = OpAtomicXor %4 %182 %65 %66 %42
%183 = OpAtomicExchange %3 %36 %57 %59 %41
%185 = OpAccessChain %60 %38 %61
%184 = OpAtomicExchange %4 %185 %57 %59 %42
%187 = OpAccessChain %34 %40 %35
%186 = OpAtomicExchange %3 %187 %57 %59 %41
%189 = OpAccessChain %60 %40 %61 %61
%188 = OpAtomicExchange %4 %189 %57 %59 %42
%190 = OpAtomicExchange %3 %22 %65 %66 %41
%192 = OpAccessChain %67 %24 %61
%191 = OpAtomicExchange %4 %192 %65 %66 %42
%194 = OpAccessChain %23 %26 %35
%193 = OpAtomicExchange %3 %194 %65 %66 %41
%196 = OpAccessChain %67 %26 %61 %61
%195 = OpAtomicExchange %4 %196 %65 %66 %42
%198 = OpAtomicCompareExchange %3 %36 %57 %59 %59 %43 %41
%199 = OpIEqual %10 %198 %41
%197 = OpCompositeConstruct %11 %198 %199
%201 = OpAccessChain %60 %38 %61
%202 = OpAtomicCompareExchange %4 %201 %57 %59 %59 %44 %42
%203 = OpIEqual %10 %202 %42
%200 = OpCompositeConstruct %12 %202 %203
%205 = OpAccessChain %34 %40 %35
%206 = OpAtomicCompareExchange %3 %205 %57 %59 %59 %43 %41
%207 = OpIEqual %10 %206 %41
%204 = OpCompositeConstruct %11 %206 %207
%209 = OpAccessChain %60 %40 %61 %61
%210 = OpAtomicCompareExchange %4 %209 %57 %59 %59 %44 %42
%211 = OpIEqual %10 %210 %42
%208 = OpCompositeConstruct %12 %210 %211
%213 = OpAtomicCompareExchange %3 %22 %65 %66 %66 %43 %41
%214 = OpIEqual %10 %213 %41
%212 = OpCompositeConstruct %11 %213 %214
%216 = OpAccessChain %67 %24 %61
%217 = OpAtomicCompareExchange %4 %216 %65 %66 %66 %44 %42
%218 = OpIEqual %10 %217 %42
%215 = OpCompositeConstruct %12 %217 %218
%220 = OpAccessChain %23 %26 %35
%221 = OpAtomicCompareExchange %3 %220 %65 %66 %66 %43 %41
%222 = OpIEqual %10 %221 %41
%219 = OpCompositeConstruct %11 %221 %222
%224 = OpAccessChain %67 %26 %61 %61
%225 = OpAtomicCompareExchange %4 %224 %65 %66 %66 %44 %42
%226 = OpIEqual %10 %225 %42
%223 = OpCompositeConstruct %12 %225 %226
%167 = OpAtomicXor %3 %36 %57 %35 %41
%169 = OpAccessChain %59 %38 %60
%168 = OpAtomicXor %4 %169 %57 %35 %42
%171 = OpAccessChain %34 %40 %35
%170 = OpAtomicXor %3 %171 %57 %35 %41
%173 = OpAccessChain %59 %40 %60 %60
%172 = OpAtomicXor %4 %173 %57 %35 %42
%174 = OpAtomicXor %3 %22 %64 %35 %41
%176 = OpAccessChain %65 %24 %60
%175 = OpAtomicXor %4 %176 %64 %35 %42
%178 = OpAccessChain %23 %26 %35
%177 = OpAtomicXor %3 %178 %64 %35 %41
%180 = OpAccessChain %65 %26 %60 %60
%179 = OpAtomicXor %4 %180 %64 %35 %42
%181 = OpAtomicExchange %3 %36 %57 %35 %41
%183 = OpAccessChain %59 %38 %60
%182 = OpAtomicExchange %4 %183 %57 %35 %42
%185 = OpAccessChain %34 %40 %35
%184 = OpAtomicExchange %3 %185 %57 %35 %41
%187 = OpAccessChain %59 %40 %60 %60
%186 = OpAtomicExchange %4 %187 %57 %35 %42
%188 = OpAtomicExchange %3 %22 %64 %35 %41
%190 = OpAccessChain %65 %24 %60
%189 = OpAtomicExchange %4 %190 %64 %35 %42
%192 = OpAccessChain %23 %26 %35
%191 = OpAtomicExchange %3 %192 %64 %35 %41
%194 = OpAccessChain %65 %26 %60 %60
%193 = OpAtomicExchange %4 %194 %64 %35 %42
%196 = OpAtomicCompareExchange %3 %36 %57 %35 %35 %43 %41
%197 = OpIEqual %10 %196 %41
%195 = OpCompositeConstruct %11 %196 %197
%199 = OpAccessChain %59 %38 %60
%200 = OpAtomicCompareExchange %4 %199 %57 %35 %35 %44 %42
%201 = OpIEqual %10 %200 %42
%198 = OpCompositeConstruct %12 %200 %201
%203 = OpAccessChain %34 %40 %35
%204 = OpAtomicCompareExchange %3 %203 %57 %35 %35 %43 %41
%205 = OpIEqual %10 %204 %41
%202 = OpCompositeConstruct %11 %204 %205
%207 = OpAccessChain %59 %40 %60 %60
%208 = OpAtomicCompareExchange %4 %207 %57 %35 %35 %44 %42
%209 = OpIEqual %10 %208 %42
%206 = OpCompositeConstruct %12 %208 %209
%211 = OpAtomicCompareExchange %3 %22 %64 %35 %35 %43 %41
%212 = OpIEqual %10 %211 %41
%210 = OpCompositeConstruct %11 %211 %212
%214 = OpAccessChain %65 %24 %60
%215 = OpAtomicCompareExchange %4 %214 %64 %35 %35 %44 %42
%216 = OpIEqual %10 %215 %42
%213 = OpCompositeConstruct %12 %215 %216
%218 = OpAccessChain %23 %26 %35
%219 = OpAtomicCompareExchange %3 %218 %64 %35 %35 %43 %41
%220 = OpIEqual %10 %219 %41
%217 = OpCompositeConstruct %11 %219 %220
%222 = OpAccessChain %65 %26 %60 %60
%223 = OpAtomicCompareExchange %4 %222 %64 %35 %35 %44 %42
%224 = OpIEqual %10 %223 %42
%221 = OpCompositeConstruct %12 %223 %224
OpReturn
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 221
; Bound: 219
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
@ -69,10 +69,8 @@ OpDecorate %28 BuiltIn LocalInvocationId
%47 = OpConstantNull %8
%48 = OpTypeVector %9 3
%53 = OpConstant %3 264
%55 = OpConstant %3 64
%56 = OpTypePointer StorageBuffer %4
%60 = OpConstant %3 256
%61 = OpTypePointer Workgroup %4
%55 = OpTypePointer StorageBuffer %4
%59 = OpTypePointer Workgroup %4
%31 = OpFunction %2 None %32
%27 = OpLabel
%30 = OpLoad %8 %28
@ -94,183 +92,183 @@ OpBranch %51
OpControlBarrier %6 %6 %53
OpBranch %54
%54 = OpLabel
OpAtomicStore %35 %41 %55 %40
%57 = OpAccessChain %56 %37 %40
OpAtomicStore %57 %41 %55 %41
%58 = OpAccessChain %33 %39 %34
OpAtomicStore %58 %41 %55 %40
%59 = OpAccessChain %56 %39 %40 %40
OpAtomicStore %59 %41 %55 %41
OpAtomicStore %21 %42 %60 %40
%62 = OpAccessChain %61 %23 %40
OpAtomicStore %62 %42 %60 %41
%63 = OpAccessChain %22 %25 %34
OpAtomicStore %63 %42 %60 %40
%64 = OpAccessChain %61 %25 %40 %40
OpAtomicStore %64 %42 %60 %41
OpAtomicStore %35 %41 %34 %40
%56 = OpAccessChain %55 %37 %40
OpAtomicStore %56 %41 %34 %41
%57 = OpAccessChain %33 %39 %34
OpAtomicStore %57 %41 %34 %40
%58 = OpAccessChain %55 %39 %40 %40
OpAtomicStore %58 %41 %34 %41
OpAtomicStore %21 %42 %34 %40
%60 = OpAccessChain %59 %23 %40
OpAtomicStore %60 %42 %34 %41
%61 = OpAccessChain %22 %25 %34
OpAtomicStore %61 %42 %34 %40
%62 = OpAccessChain %59 %25 %40 %40
OpAtomicStore %62 %42 %34 %41
OpControlBarrier %6 %6 %53
%65 = OpAtomicLoad %3 %35 %41 %55
%66 = OpAccessChain %56 %37 %40
%67 = OpAtomicLoad %4 %66 %41 %55
%68 = OpAccessChain %33 %39 %34
%69 = OpAtomicLoad %3 %68 %41 %55
%70 = OpAccessChain %56 %39 %40 %40
%71 = OpAtomicLoad %4 %70 %41 %55
%72 = OpAtomicLoad %3 %21 %42 %60
%73 = OpAccessChain %61 %23 %40
%74 = OpAtomicLoad %4 %73 %42 %60
%75 = OpAccessChain %22 %25 %34
%76 = OpAtomicLoad %3 %75 %42 %60
%77 = OpAccessChain %61 %25 %40 %40
%78 = OpAtomicLoad %4 %77 %42 %60
%63 = OpAtomicLoad %3 %35 %41 %34
%64 = OpAccessChain %55 %37 %40
%65 = OpAtomicLoad %4 %64 %41 %34
%66 = OpAccessChain %33 %39 %34
%67 = OpAtomicLoad %3 %66 %41 %34
%68 = OpAccessChain %55 %39 %40 %40
%69 = OpAtomicLoad %4 %68 %41 %34
%70 = OpAtomicLoad %3 %21 %42 %34
%71 = OpAccessChain %59 %23 %40
%72 = OpAtomicLoad %4 %71 %42 %34
%73 = OpAccessChain %22 %25 %34
%74 = OpAtomicLoad %3 %73 %42 %34
%75 = OpAccessChain %59 %25 %40 %40
%76 = OpAtomicLoad %4 %75 %42 %34
OpControlBarrier %6 %6 %53
%79 = OpAtomicIAdd %3 %35 %41 %55 %40
%81 = OpAccessChain %56 %37 %40
%80 = OpAtomicIAdd %4 %81 %41 %55 %41
%83 = OpAccessChain %33 %39 %34
%82 = OpAtomicIAdd %3 %83 %41 %55 %40
%85 = OpAccessChain %56 %39 %40 %40
%84 = OpAtomicIAdd %4 %85 %41 %55 %41
%86 = OpAtomicIAdd %3 %21 %42 %60 %40
%88 = OpAccessChain %61 %23 %40
%87 = OpAtomicIAdd %4 %88 %42 %60 %41
%90 = OpAccessChain %22 %25 %34
%89 = OpAtomicIAdd %3 %90 %42 %60 %40
%92 = OpAccessChain %61 %25 %40 %40
%91 = OpAtomicIAdd %4 %92 %42 %60 %41
%77 = OpAtomicIAdd %3 %35 %41 %34 %40
%79 = OpAccessChain %55 %37 %40
%78 = OpAtomicIAdd %4 %79 %41 %34 %41
%81 = OpAccessChain %33 %39 %34
%80 = OpAtomicIAdd %3 %81 %41 %34 %40
%83 = OpAccessChain %55 %39 %40 %40
%82 = OpAtomicIAdd %4 %83 %41 %34 %41
%84 = OpAtomicIAdd %3 %21 %42 %34 %40
%86 = OpAccessChain %59 %23 %40
%85 = OpAtomicIAdd %4 %86 %42 %34 %41
%88 = OpAccessChain %22 %25 %34
%87 = OpAtomicIAdd %3 %88 %42 %34 %40
%90 = OpAccessChain %59 %25 %40 %40
%89 = OpAtomicIAdd %4 %90 %42 %34 %41
OpControlBarrier %6 %6 %53
%93 = OpAtomicISub %3 %35 %41 %55 %40
%95 = OpAccessChain %56 %37 %40
%94 = OpAtomicISub %4 %95 %41 %55 %41
%97 = OpAccessChain %33 %39 %34
%96 = OpAtomicISub %3 %97 %41 %55 %40
%99 = OpAccessChain %56 %39 %40 %40
%98 = OpAtomicISub %4 %99 %41 %55 %41
%100 = OpAtomicISub %3 %21 %42 %60 %40
%102 = OpAccessChain %61 %23 %40
%101 = OpAtomicISub %4 %102 %42 %60 %41
%104 = OpAccessChain %22 %25 %34
%103 = OpAtomicISub %3 %104 %42 %60 %40
%106 = OpAccessChain %61 %25 %40 %40
%105 = OpAtomicISub %4 %106 %42 %60 %41
%91 = OpAtomicISub %3 %35 %41 %34 %40
%93 = OpAccessChain %55 %37 %40
%92 = OpAtomicISub %4 %93 %41 %34 %41
%95 = OpAccessChain %33 %39 %34
%94 = OpAtomicISub %3 %95 %41 %34 %40
%97 = OpAccessChain %55 %39 %40 %40
%96 = OpAtomicISub %4 %97 %41 %34 %41
%98 = OpAtomicISub %3 %21 %42 %34 %40
%100 = OpAccessChain %59 %23 %40
%99 = OpAtomicISub %4 %100 %42 %34 %41
%102 = OpAccessChain %22 %25 %34
%101 = OpAtomicISub %3 %102 %42 %34 %40
%104 = OpAccessChain %59 %25 %40 %40
%103 = OpAtomicISub %4 %104 %42 %34 %41
OpControlBarrier %6 %6 %53
%107 = OpAtomicUMax %3 %35 %41 %55 %40
%109 = OpAccessChain %56 %37 %40
%108 = OpAtomicSMax %4 %109 %41 %55 %41
%111 = OpAccessChain %33 %39 %34
%110 = OpAtomicUMax %3 %111 %41 %55 %40
%113 = OpAccessChain %56 %39 %40 %40
%112 = OpAtomicSMax %4 %113 %41 %55 %41
%114 = OpAtomicUMax %3 %21 %42 %60 %40
%116 = OpAccessChain %61 %23 %40
%115 = OpAtomicSMax %4 %116 %42 %60 %41
%118 = OpAccessChain %22 %25 %34
%117 = OpAtomicUMax %3 %118 %42 %60 %40
%120 = OpAccessChain %61 %25 %40 %40
%119 = OpAtomicSMax %4 %120 %42 %60 %41
%105 = OpAtomicUMax %3 %35 %41 %34 %40
%107 = OpAccessChain %55 %37 %40
%106 = OpAtomicSMax %4 %107 %41 %34 %41
%109 = OpAccessChain %33 %39 %34
%108 = OpAtomicUMax %3 %109 %41 %34 %40
%111 = OpAccessChain %55 %39 %40 %40
%110 = OpAtomicSMax %4 %111 %41 %34 %41
%112 = OpAtomicUMax %3 %21 %42 %34 %40
%114 = OpAccessChain %59 %23 %40
%113 = OpAtomicSMax %4 %114 %42 %34 %41
%116 = OpAccessChain %22 %25 %34
%115 = OpAtomicUMax %3 %116 %42 %34 %40
%118 = OpAccessChain %59 %25 %40 %40
%117 = OpAtomicSMax %4 %118 %42 %34 %41
OpControlBarrier %6 %6 %53
%121 = OpAtomicUMin %3 %35 %41 %55 %40
%123 = OpAccessChain %56 %37 %40
%122 = OpAtomicSMin %4 %123 %41 %55 %41
%125 = OpAccessChain %33 %39 %34
%124 = OpAtomicUMin %3 %125 %41 %55 %40
%127 = OpAccessChain %56 %39 %40 %40
%126 = OpAtomicSMin %4 %127 %41 %55 %41
%128 = OpAtomicUMin %3 %21 %42 %60 %40
%130 = OpAccessChain %61 %23 %40
%129 = OpAtomicSMin %4 %130 %42 %60 %41
%132 = OpAccessChain %22 %25 %34
%131 = OpAtomicUMin %3 %132 %42 %60 %40
%134 = OpAccessChain %61 %25 %40 %40
%133 = OpAtomicSMin %4 %134 %42 %60 %41
%119 = OpAtomicUMin %3 %35 %41 %34 %40
%121 = OpAccessChain %55 %37 %40
%120 = OpAtomicSMin %4 %121 %41 %34 %41
%123 = OpAccessChain %33 %39 %34
%122 = OpAtomicUMin %3 %123 %41 %34 %40
%125 = OpAccessChain %55 %39 %40 %40
%124 = OpAtomicSMin %4 %125 %41 %34 %41
%126 = OpAtomicUMin %3 %21 %42 %34 %40
%128 = OpAccessChain %59 %23 %40
%127 = OpAtomicSMin %4 %128 %42 %34 %41
%130 = OpAccessChain %22 %25 %34
%129 = OpAtomicUMin %3 %130 %42 %34 %40
%132 = OpAccessChain %59 %25 %40 %40
%131 = OpAtomicSMin %4 %132 %42 %34 %41
OpControlBarrier %6 %6 %53
%135 = OpAtomicAnd %3 %35 %41 %55 %40
%137 = OpAccessChain %56 %37 %40
%136 = OpAtomicAnd %4 %137 %41 %55 %41
%139 = OpAccessChain %33 %39 %34
%138 = OpAtomicAnd %3 %139 %41 %55 %40
%141 = OpAccessChain %56 %39 %40 %40
%140 = OpAtomicAnd %4 %141 %41 %55 %41
%142 = OpAtomicAnd %3 %21 %42 %60 %40
%144 = OpAccessChain %61 %23 %40
%143 = OpAtomicAnd %4 %144 %42 %60 %41
%146 = OpAccessChain %22 %25 %34
%145 = OpAtomicAnd %3 %146 %42 %60 %40
%148 = OpAccessChain %61 %25 %40 %40
%147 = OpAtomicAnd %4 %148 %42 %60 %41
%133 = OpAtomicAnd %3 %35 %41 %34 %40
%135 = OpAccessChain %55 %37 %40
%134 = OpAtomicAnd %4 %135 %41 %34 %41
%137 = OpAccessChain %33 %39 %34
%136 = OpAtomicAnd %3 %137 %41 %34 %40
%139 = OpAccessChain %55 %39 %40 %40
%138 = OpAtomicAnd %4 %139 %41 %34 %41
%140 = OpAtomicAnd %3 %21 %42 %34 %40
%142 = OpAccessChain %59 %23 %40
%141 = OpAtomicAnd %4 %142 %42 %34 %41
%144 = OpAccessChain %22 %25 %34
%143 = OpAtomicAnd %3 %144 %42 %34 %40
%146 = OpAccessChain %59 %25 %40 %40
%145 = OpAtomicAnd %4 %146 %42 %34 %41
OpControlBarrier %6 %6 %53
%149 = OpAtomicOr %3 %35 %41 %55 %40
%151 = OpAccessChain %56 %37 %40
%150 = OpAtomicOr %4 %151 %41 %55 %41
%153 = OpAccessChain %33 %39 %34
%152 = OpAtomicOr %3 %153 %41 %55 %40
%155 = OpAccessChain %56 %39 %40 %40
%154 = OpAtomicOr %4 %155 %41 %55 %41
%156 = OpAtomicOr %3 %21 %42 %60 %40
%158 = OpAccessChain %61 %23 %40
%157 = OpAtomicOr %4 %158 %42 %60 %41
%160 = OpAccessChain %22 %25 %34
%159 = OpAtomicOr %3 %160 %42 %60 %40
%162 = OpAccessChain %61 %25 %40 %40
%161 = OpAtomicOr %4 %162 %42 %60 %41
%147 = OpAtomicOr %3 %35 %41 %34 %40
%149 = OpAccessChain %55 %37 %40
%148 = OpAtomicOr %4 %149 %41 %34 %41
%151 = OpAccessChain %33 %39 %34
%150 = OpAtomicOr %3 %151 %41 %34 %40
%153 = OpAccessChain %55 %39 %40 %40
%152 = OpAtomicOr %4 %153 %41 %34 %41
%154 = OpAtomicOr %3 %21 %42 %34 %40
%156 = OpAccessChain %59 %23 %40
%155 = OpAtomicOr %4 %156 %42 %34 %41
%158 = OpAccessChain %22 %25 %34
%157 = OpAtomicOr %3 %158 %42 %34 %40
%160 = OpAccessChain %59 %25 %40 %40
%159 = OpAtomicOr %4 %160 %42 %34 %41
OpControlBarrier %6 %6 %53
%163 = OpAtomicXor %3 %35 %41 %55 %40
%165 = OpAccessChain %56 %37 %40
%164 = OpAtomicXor %4 %165 %41 %55 %41
%167 = OpAccessChain %33 %39 %34
%166 = OpAtomicXor %3 %167 %41 %55 %40
%169 = OpAccessChain %56 %39 %40 %40
%168 = OpAtomicXor %4 %169 %41 %55 %41
%170 = OpAtomicXor %3 %21 %42 %60 %40
%172 = OpAccessChain %61 %23 %40
%171 = OpAtomicXor %4 %172 %42 %60 %41
%174 = OpAccessChain %22 %25 %34
%173 = OpAtomicXor %3 %174 %42 %60 %40
%176 = OpAccessChain %61 %25 %40 %40
%175 = OpAtomicXor %4 %176 %42 %60 %41
%177 = OpAtomicExchange %3 %35 %41 %55 %40
%179 = OpAccessChain %56 %37 %40
%178 = OpAtomicExchange %4 %179 %41 %55 %41
%181 = OpAccessChain %33 %39 %34
%180 = OpAtomicExchange %3 %181 %41 %55 %40
%183 = OpAccessChain %56 %39 %40 %40
%182 = OpAtomicExchange %4 %183 %41 %55 %41
%184 = OpAtomicExchange %3 %21 %42 %60 %40
%186 = OpAccessChain %61 %23 %40
%185 = OpAtomicExchange %4 %186 %42 %60 %41
%188 = OpAccessChain %22 %25 %34
%187 = OpAtomicExchange %3 %188 %42 %60 %40
%190 = OpAccessChain %61 %25 %40 %40
%189 = OpAtomicExchange %4 %190 %42 %60 %41
%192 = OpAtomicCompareExchange %3 %35 %41 %55 %55 %6 %40
%193 = OpIEqual %9 %192 %40
%191 = OpCompositeConstruct %10 %192 %193
%195 = OpAccessChain %56 %37 %40
%196 = OpAtomicCompareExchange %4 %195 %41 %55 %55 %42 %41
%197 = OpIEqual %9 %196 %41
%194 = OpCompositeConstruct %11 %196 %197
%199 = OpAccessChain %33 %39 %34
%200 = OpAtomicCompareExchange %3 %199 %41 %55 %55 %6 %40
%201 = OpIEqual %9 %200 %40
%198 = OpCompositeConstruct %10 %200 %201
%203 = OpAccessChain %56 %39 %40 %40
%204 = OpAtomicCompareExchange %4 %203 %41 %55 %55 %42 %41
%205 = OpIEqual %9 %204 %41
%202 = OpCompositeConstruct %11 %204 %205
%207 = OpAtomicCompareExchange %3 %21 %42 %60 %60 %6 %40
%208 = OpIEqual %9 %207 %40
%206 = OpCompositeConstruct %10 %207 %208
%210 = OpAccessChain %61 %23 %40
%211 = OpAtomicCompareExchange %4 %210 %42 %60 %60 %42 %41
%212 = OpIEqual %9 %211 %41
%209 = OpCompositeConstruct %11 %211 %212
%214 = OpAccessChain %22 %25 %34
%215 = OpAtomicCompareExchange %3 %214 %42 %60 %60 %6 %40
%216 = OpIEqual %9 %215 %40
%213 = OpCompositeConstruct %10 %215 %216
%218 = OpAccessChain %61 %25 %40 %40
%219 = OpAtomicCompareExchange %4 %218 %42 %60 %60 %42 %41
%220 = OpIEqual %9 %219 %41
%217 = OpCompositeConstruct %11 %219 %220
%161 = OpAtomicXor %3 %35 %41 %34 %40
%163 = OpAccessChain %55 %37 %40
%162 = OpAtomicXor %4 %163 %41 %34 %41
%165 = OpAccessChain %33 %39 %34
%164 = OpAtomicXor %3 %165 %41 %34 %40
%167 = OpAccessChain %55 %39 %40 %40
%166 = OpAtomicXor %4 %167 %41 %34 %41
%168 = OpAtomicXor %3 %21 %42 %34 %40
%170 = OpAccessChain %59 %23 %40
%169 = OpAtomicXor %4 %170 %42 %34 %41
%172 = OpAccessChain %22 %25 %34
%171 = OpAtomicXor %3 %172 %42 %34 %40
%174 = OpAccessChain %59 %25 %40 %40
%173 = OpAtomicXor %4 %174 %42 %34 %41
%175 = OpAtomicExchange %3 %35 %41 %34 %40
%177 = OpAccessChain %55 %37 %40
%176 = OpAtomicExchange %4 %177 %41 %34 %41
%179 = OpAccessChain %33 %39 %34
%178 = OpAtomicExchange %3 %179 %41 %34 %40
%181 = OpAccessChain %55 %39 %40 %40
%180 = OpAtomicExchange %4 %181 %41 %34 %41
%182 = OpAtomicExchange %3 %21 %42 %34 %40
%184 = OpAccessChain %59 %23 %40
%183 = OpAtomicExchange %4 %184 %42 %34 %41
%186 = OpAccessChain %22 %25 %34
%185 = OpAtomicExchange %3 %186 %42 %34 %40
%188 = OpAccessChain %59 %25 %40 %40
%187 = OpAtomicExchange %4 %188 %42 %34 %41
%190 = OpAtomicCompareExchange %3 %35 %41 %34 %34 %6 %40
%191 = OpIEqual %9 %190 %40
%189 = OpCompositeConstruct %10 %190 %191
%193 = OpAccessChain %55 %37 %40
%194 = OpAtomicCompareExchange %4 %193 %41 %34 %34 %42 %41
%195 = OpIEqual %9 %194 %41
%192 = OpCompositeConstruct %11 %194 %195
%197 = OpAccessChain %33 %39 %34
%198 = OpAtomicCompareExchange %3 %197 %41 %34 %34 %6 %40
%199 = OpIEqual %9 %198 %40
%196 = OpCompositeConstruct %10 %198 %199
%201 = OpAccessChain %55 %39 %40 %40
%202 = OpAtomicCompareExchange %4 %201 %41 %34 %34 %42 %41
%203 = OpIEqual %9 %202 %41
%200 = OpCompositeConstruct %11 %202 %203
%205 = OpAtomicCompareExchange %3 %21 %42 %34 %34 %6 %40
%206 = OpIEqual %9 %205 %40
%204 = OpCompositeConstruct %10 %205 %206
%208 = OpAccessChain %59 %23 %40
%209 = OpAtomicCompareExchange %4 %208 %42 %34 %34 %42 %41
%210 = OpIEqual %9 %209 %41
%207 = OpCompositeConstruct %11 %209 %210
%212 = OpAccessChain %22 %25 %34
%213 = OpAtomicCompareExchange %3 %212 %42 %34 %34 %6 %40
%214 = OpIEqual %9 %213 %40
%211 = OpCompositeConstruct %10 %213 %214
%216 = OpAccessChain %59 %25 %40 %40
%217 = OpAtomicCompareExchange %4 %216 %42 %34 %34 %42 %41
%218 = OpIEqual %9 %217 %41
%215 = OpCompositeConstruct %11 %217 %218
OpReturn
OpFunctionEnd

View File

@ -31,7 +31,7 @@ OpDecorate %12 BuiltIn LocalInvocationId
%20 = OpConstant %4 1
%22 = OpTypePointer Image %4
%24 = OpConstant %6 0
%26 = OpConstant %8 4
%26 = OpConstant %8 1
%27 = OpConstant %6 2
%28 = OpConstant %6 264
%15 = OpFunction %2 None %16

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 54
; Bound: 53
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
@ -32,8 +32,7 @@ OpDecorate %14 BuiltIn LocalInvocationId
%24 = OpConstant %6 1
%26 = OpTypePointer Image %4
%28 = OpConstant %4 0
%30 = OpConstant %6 4
%41 = OpTypePointer Image %6
%40 = OpTypePointer Image %6
%17 = OpFunction %2 None %18
%13 = OpLabel
%16 = OpLoad %7 %14
@ -42,28 +41,28 @@ OpDecorate %14 BuiltIn LocalInvocationId
OpBranch %25
%25 = OpLabel
%27 = OpImageTexelPointer %26 %9 %22 %28
%29 = OpAtomicUMax %4 %27 %30 %28 %23
%31 = OpImageTexelPointer %26 %9 %22 %28
%32 = OpAtomicUMin %4 %31 %30 %28 %23
%33 = OpImageTexelPointer %26 %9 %22 %28
%34 = OpAtomicIAdd %4 %33 %30 %28 %23
%35 = OpImageTexelPointer %26 %9 %22 %28
%36 = OpAtomicAnd %4 %35 %30 %28 %23
%37 = OpImageTexelPointer %26 %9 %22 %28
%38 = OpAtomicOr %4 %37 %30 %28 %23
%39 = OpImageTexelPointer %26 %9 %22 %28
%40 = OpAtomicXor %4 %39 %30 %28 %23
%42 = OpImageTexelPointer %41 %11 %22 %28
%43 = OpAtomicSMax %6 %42 %30 %28 %24
%44 = OpImageTexelPointer %41 %11 %22 %28
%45 = OpAtomicSMin %6 %44 %30 %28 %24
%46 = OpImageTexelPointer %41 %11 %22 %28
%47 = OpAtomicIAdd %6 %46 %30 %28 %24
%48 = OpImageTexelPointer %41 %11 %22 %28
%49 = OpAtomicAnd %6 %48 %30 %28 %24
%50 = OpImageTexelPointer %41 %11 %22 %28
%51 = OpAtomicOr %6 %50 %30 %28 %24
%52 = OpImageTexelPointer %41 %11 %22 %28
%53 = OpAtomicXor %6 %52 %30 %28 %24
%29 = OpAtomicUMax %4 %27 %24 %28 %23
%30 = OpImageTexelPointer %26 %9 %22 %28
%31 = OpAtomicUMin %4 %30 %24 %28 %23
%32 = OpImageTexelPointer %26 %9 %22 %28
%33 = OpAtomicIAdd %4 %32 %24 %28 %23
%34 = OpImageTexelPointer %26 %9 %22 %28
%35 = OpAtomicAnd %4 %34 %24 %28 %23
%36 = OpImageTexelPointer %26 %9 %22 %28
%37 = OpAtomicOr %4 %36 %24 %28 %23
%38 = OpImageTexelPointer %26 %9 %22 %28
%39 = OpAtomicXor %4 %38 %24 %28 %23
%41 = OpImageTexelPointer %40 %11 %22 %28
%42 = OpAtomicSMax %6 %41 %24 %28 %24
%43 = OpImageTexelPointer %40 %11 %22 %28
%44 = OpAtomicSMin %6 %43 %24 %28 %24
%45 = OpImageTexelPointer %40 %11 %22 %28
%46 = OpAtomicIAdd %6 %45 %24 %28 %24
%47 = OpImageTexelPointer %40 %11 %22 %28
%48 = OpAtomicAnd %6 %47 %24 %28 %24
%49 = OpImageTexelPointer %40 %11 %22 %28
%50 = OpAtomicOr %6 %49 %24 %28 %24
%51 = OpImageTexelPointer %40 %11 %22 %28
%52 = OpAtomicXor %6 %51 %24 %28 %24
OpReturn
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 172
; Bound: 171
OpCapability Shader
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
@ -147,7 +147,6 @@ OpDecorate %116 BuiltIn LocalInvocationId
%155 = OpConstant %7 3
%158 = OpConstant %7 4
%170 = OpConstant %23 2
%171 = OpConstant %7 256
%53 = OpFunction %2 None %54
%52 = OpFunctionParameter %8
%51 = OpLabel
@ -249,6 +248,6 @@ OpStore %166 %107
%168 = OpConvertUToF %4 %167
%169 = OpAccessChain %128 %26 %149
OpStore %169 %168
OpAtomicStore %28 %170 %171 %18
OpAtomicStore %28 %170 %60 %18
OpReturn
OpFunctionEnd

View File

@ -28,7 +28,7 @@ OpDecorate %18 BuiltIn LocalInvocationId
%21 = OpConstantNull %17
%22 = OpTypeVector %5 3
%27 = OpConstant %4 264
%30 = OpConstant %4 256
%30 = OpConstant %4 0
%11 = OpFunction %2 None %12
%10 = OpLabel
OpBranch %15