From a1fc2b11afabf914911056dc396a6349c7a31f29 Mon Sep 17 00:00:00 2001 From: atlas dostal Date: Tue, 21 Oct 2025 01:12:40 -0400 Subject: [PATCH 1/2] fix(vulkan): add atomic memory semantics --- CHANGELOG.md | 4 + naga/src/back/spv/block.rs | 17 +- naga/src/back/spv/helpers.rs | 17 +- naga/src/back/spv/image.rs | 3 +- .../wgsl-atomicCompareExchange-int64.spvasm | 220 ++++++------ .../out/spv/wgsl-atomicCompareExchange.spvasm | 220 ++++++------ .../out/spv/wgsl-atomicOps-float32.spvasm | 48 +-- .../spv/wgsl-atomicOps-int64-min-max.spvasm | 2 +- .../tests/out/spv/wgsl-atomicOps-int64.spvasm | 323 +++++++++--------- naga/tests/out/spv/wgsl-atomicOps.spvasm | 323 +++++++++--------- .../out/spv/wgsl-atomicTexture-int64.spvasm | 17 +- naga/tests/out/spv/wgsl-atomicTexture.spvasm | 26 +- naga/tests/out/spv/wgsl-globals.spvasm | 2 +- ...errides-atomicCompareExchangeWeak.f.spvasm | 8 +- 14 files changed, 637 insertions(+), 593 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74336fe90ea..e49ea17fab8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,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) diff --git a/naga/src/back/spv/block.rs b/naga/src/back/spv/block.rs index 7758d86c414..0d2d448e1ac 100644 --- a/naga/src/back/spv/block.rs +++ b/naga/src/back/spv/block.rs @@ -2324,7 +2324,8 @@ impl BlockContext<'_> { _ => None, }; let instruction = if let Some(space) = atomic_space { - let (semantics, scope) = space.to_spirv_semantics_and_scope(); + let (semantics, scope) = + space.to_spirv_semantics_and_scope(spirv::MemorySemantics::ACQUIRE); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); Instruction::atomic_load( @@ -3276,7 +3277,8 @@ impl BlockContext<'_> { _ => None, }; let instruction = if let Some(space) = atomic_space { - let (semantics, scope) = space.to_spirv_semantics_and_scope(); + let (semantics, scope) = space + .to_spirv_semantics_and_scope(spirv::MemorySemantics::RELEASE); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); Instruction::atomic_store( @@ -3375,7 +3377,8 @@ impl BlockContext<'_> { .inner_with(&self.ir_module.types) .pointer_space() .unwrap(); - let (semantics, scope) = space.to_spirv_semantics_and_scope(); + let (semantics, scope) = + space.to_spirv_semantics_and_scope(spirv::MemorySemantics::ACQUIRE_RELEASE); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); let value_id = self.cached[value]; @@ -3543,13 +3546,19 @@ impl BlockContext<'_> { } _ => unimplemented!(), }; + + let (semantics_unequal, _) = + space.to_spirv_semantics_and_scope(spirv::MemorySemantics::empty()); + let semantics_id_unequal = + self.get_index_constant(semantics_unequal.bits()); + let mut cas_instr = Instruction::new(spirv::Op::AtomicCompareExchange); cas_instr.set_type(scalar_type_id); cas_instr.set_result(cas_result_id); cas_instr.add_operand(pointer_id); cas_instr.add_operand(scope_constant_id); cas_instr.add_operand(semantics_id); // semantics if equal - cas_instr.add_operand(semantics_id); // semantics if not equal + cas_instr.add_operand(semantics_id_unequal); // semantics if not equal cas_instr.add_operand(value_id); cas_instr.add_operand(self.cached[cmp]); block.body.push(cas_instr); diff --git a/naga/src/back/spv/helpers.rs b/naga/src/back/spv/helpers.rs index 84e130efaa3..4ddb35d3aa3 100644 --- a/naga/src/back/spv/helpers.rs +++ b/naga/src/back/spv/helpers.rs @@ -75,15 +75,28 @@ pub(super) fn contains_builtin( } impl crate::AddressSpace { + /// The base semantic (ACQUIRE, RELEASE, ACQUIRE_RELEASE) must be supplied pub(super) const fn to_spirv_semantics_and_scope( self, + semantic: spirv::MemorySemantics, ) -> (spirv::MemorySemantics, spirv::Scope) { match self { - Self::Storage { .. } => (spirv::MemorySemantics::UNIFORM_MEMORY, spirv::Scope::Device), + Self::Storage { .. } => ( + spirv::MemorySemantics::UNIFORM_MEMORY.union(semantic), + spirv::Scope::Device, + ), Self::WorkGroup => ( - spirv::MemorySemantics::WORKGROUP_MEMORY, + spirv::MemorySemantics::WORKGROUP_MEMORY.union(semantic), spirv::Scope::Workgroup, ), + Self::Uniform => ( + spirv::MemorySemantics::UNIFORM_MEMORY.union(semantic), + spirv::Scope::Device, + ), + Self::Handle => ( + spirv::MemorySemantics::IMAGE_MEMORY.union(semantic), + spirv::Scope::Device, + ), _ => (spirv::MemorySemantics::empty(), spirv::Scope::Invocation), } } diff --git a/naga/src/back/spv/image.rs b/naga/src/back/spv/image.rs index 3aec1333f0c..cacbac08e3e 100644 --- a/naga/src/back/spv/image.rs +++ b/naga/src/back/spv/image.rs @@ -1363,7 +1363,8 @@ impl BlockContext<'_> { let result_type_id = self.get_expression_type_id(&self.fun_info[value].ty); let id = self.gen_id(); let space = crate::AddressSpace::Handle; - let (semantics, scope) = space.to_spirv_semantics_and_scope(); + let (semantics, scope) = + space.to_spirv_semantics_and_scope(spirv::MemorySemantics::ACQUIRE_RELEASE); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); let value_id = self.cached[value]; diff --git a/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm b/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm index ad89ea1943e..65c386e2771 100644 --- a/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm +++ b/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.0 ; Generator: rspirv -; Bound: 173 +; Bound: 175 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 %106 "test_atomic_compare_exchange_u64" OpExecutionMode %19 LocalSize 1 1 1 -OpExecutionMode %104 LocalSize 1 1 1 +OpExecutionMode %106 LocalSize 1 1 1 OpDecorate %5 ArrayStride 8 OpDecorate %8 ArrayStride 8 OpMemberDecorate %10 0 Offset 0 @@ -62,13 +62,15 @@ 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 +%69 = OpConstant %3 66 +%97 = OpConstant %3 72 +%100 = OpConstant %3 64 +%107 = OpTypePointer StorageBuffer %8 +%109 = OpConstant %7 10 +%112 = OpTypePointer Function %7 +%113 = OpConstantNull %7 +%115 = OpConstantNull %9 +%139 = OpTypePointer StorageBuffer %7 %19 = OpFunction %2 None %20 %18 = OpLabel %27 = OpVariable %28 Function %22 @@ -145,13 +147,13 @@ OpBranch %89 %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 +%98 = OpAtomicCompareExchange %4 %96 %67 %97 %100 %92 %94 +%99 = OpIEqual %9 %98 %94 +%95 = OpCompositeConstruct %10 %98 %99 +%101 = OpCompositeExtract %4 %95 0 +OpStore %29 %101 +%102 = OpCompositeExtract %9 %95 1 +OpStore %32 %102 OpBranch %90 %90 = OpLabel OpBranch %73 @@ -162,110 +164,110 @@ OpBranch %62 %62 = OpLabel OpBranch %39 %39 = OpLabel -%101 = OpLoad %3 %27 -%102 = OpIAdd %3 %101 %26 -OpStore %27 %102 +%103 = OpLoad %3 %27 +%104 = OpIAdd %3 %103 %26 +OpStore %27 %104 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 -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 +%106 = OpFunction %2 None %20 +%105 = OpLabel +%110 = OpVariable %28 Function %22 +%111 = OpVariable %112 Function %113 +%114 = OpVariable %33 Function %115 +%121 = OpVariable %41 Function %45 +%146 = OpVariable %41 Function %45 +%108 = OpAccessChain %107 %15 %22 +OpBranch %116 +%116 = OpLabel OpBranch %117 %117 = OpLabel -%130 = OpLoad %3 %108 -%131 = OpULessThan %9 %130 %6 -OpSelectionMerge %132 None -OpBranchConditional %131 %132 %133 -%133 = OpLabel -OpBranch %116 -%132 = OpLabel -OpBranch %134 +OpLoopMerge %118 %120 None +OpBranch %122 +%122 = OpLabel +%123 = OpLoad %40 %121 +%124 = OpIEqual %42 %43 %123 +%125 = OpAll %9 %124 +OpSelectionMerge %126 None +OpBranchConditional %125 %118 %126 +%126 = OpLabel +%127 = OpCompositeExtract %3 %123 1 +%128 = OpIEqual %9 %127 %22 +%129 = OpSelect %3 %128 %26 %22 +%130 = OpCompositeConstruct %40 %129 %26 +%131 = OpISub %40 %123 %130 +OpStore %121 %131 +OpBranch %119 +%119 = OpLabel +%132 = OpLoad %3 %110 +%133 = OpULessThan %9 %132 %6 +OpSelectionMerge %134 None +OpBranchConditional %133 %134 %135 +%135 = OpLabel +OpBranch %118 %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 %136 +%136 = OpLabel +%138 = OpLoad %3 %110 +%140 = OpAccessChain %139 %108 %138 +%141 = OpAtomicLoad %7 %140 %67 %69 +OpStore %111 %141 +OpStore %114 %24 OpBranch %142 %142 = OpLabel -%155 = OpLoad %9 %112 -%156 = OpLogicalNot %9 %155 -OpSelectionMerge %157 None -OpBranchConditional %156 %157 %158 -%158 = OpLabel -OpBranch %141 -%157 = OpLabel -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 +OpLoopMerge %143 %145 None +OpBranch %147 +%147 = OpLabel +%148 = OpLoad %40 %146 +%149 = OpIEqual %42 %43 %148 +%150 = OpAll %9 %149 +OpSelectionMerge %151 None +OpBranchConditional %150 %143 %151 +%151 = OpLabel +%152 = OpCompositeExtract %3 %148 1 +%153 = OpIEqual %9 %152 %22 +%154 = OpSelect %3 %153 %26 %22 +%155 = OpCompositeConstruct %40 %154 %26 +%156 = OpISub %40 %148 %155 +OpStore %146 %156 +OpBranch %144 +%144 = OpLabel +%157 = OpLoad %9 %114 +%158 = OpLogicalNot %9 %157 +OpSelectionMerge %159 None +OpBranchConditional %158 %159 %160 %160 = OpLabel OpBranch %143 +%159 = OpLabel +OpBranch %161 +%161 = OpLabel +%163 = OpLoad %7 %111 +%164 = OpIAdd %7 %163 %109 +%165 = OpLoad %3 %110 +%166 = OpLoad %7 %111 +%168 = OpAccessChain %139 %108 %165 +%169 = OpAtomicCompareExchange %7 %168 %67 %97 %100 %164 %166 +%170 = OpIEqual %9 %169 %166 +%167 = OpCompositeConstruct %11 %169 %170 +%171 = OpCompositeExtract %7 %167 0 +OpStore %111 %171 +%172 = OpCompositeExtract %9 %167 1 +OpStore %114 %172 +OpBranch %162 +%162 = OpLabel +OpBranch %145 +%145 = OpLabel +OpBranch %142 %143 = OpLabel -OpBranch %140 -%141 = OpLabel -OpBranch %135 -%135 = OpLabel -OpBranch %118 +OpBranch %137 +%137 = OpLabel +OpBranch %120 +%120 = OpLabel +%173 = OpLoad %3 %110 +%174 = OpIAdd %3 %173 %26 +OpStore %110 %174 +OpBranch %117 %118 = OpLabel -%171 = OpLoad %3 %108 -%172 = OpIAdd %3 %171 %26 -OpStore %108 %172 -OpBranch %115 -%116 = OpLabel OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm b/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm index e0e32c85d82..d9b4ce3d360 100644 --- a/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm +++ b/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm @@ -1,15 +1,15 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 174 +; Bound: 176 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 %107 "test_atomic_compare_exchange_u32" OpExecutionMode %18 LocalSize 1 1 1 -OpExecutionMode %105 LocalSize 1 1 1 +OpExecutionMode %107 LocalSize 1 1 1 OpDecorate %5 ArrayStride 4 OpDecorate %7 ArrayStride 4 OpMemberDecorate %9 0 Offset 0 @@ -59,11 +59,13 @@ 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 +%68 = OpConstant %3 66 +%98 = OpConstant %3 72 +%101 = OpConstant %3 64 +%108 = OpTypePointer StorageBuffer %7 +%112 = OpConstantNull %3 +%114 = OpConstantNull %8 +%138 = OpTypePointer StorageBuffer %3 %18 = OpFunction %2 None %19 %17 = OpLabel %27 = OpVariable %28 Function %21 @@ -142,13 +144,13 @@ OpBranch %88 %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 +%99 = OpAtomicCompareExchange %4 %97 %67 %98 %101 %93 %95 +%100 = OpIEqual %8 %99 %95 +%96 = OpCompositeConstruct %9 %99 %100 +%102 = OpCompositeExtract %4 %96 0 +OpStore %29 %102 +%103 = OpCompositeExtract %8 %96 1 +OpStore %32 %103 OpBranch %89 %89 = OpLabel OpBranch %72 @@ -159,112 +161,112 @@ OpBranch %62 %62 = OpLabel OpBranch %39 %39 = OpLabel -%102 = OpLoad %3 %27 -%103 = OpIAdd %3 %102 %26 -OpStore %27 %103 +%104 = OpLoad %3 %27 +%105 = OpIAdd %3 %104 %26 +OpStore %27 %105 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 -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 +%107 = OpFunction %2 None %19 +%106 = OpLabel +%110 = OpVariable %28 Function %21 +%111 = OpVariable %28 Function %112 +%113 = OpVariable %33 Function %114 +%120 = OpVariable %41 Function %45 +%145 = OpVariable %41 Function %45 +%109 = OpAccessChain %108 %14 %21 +OpBranch %115 +%115 = OpLabel OpBranch %116 %116 = OpLabel -%129 = OpLoad %3 %108 -%130 = OpULessThan %8 %129 %6 -OpSelectionMerge %131 None -OpBranchConditional %130 %131 %132 -%132 = OpLabel -OpBranch %115 -%131 = OpLabel -OpBranch %133 +OpLoopMerge %117 %119 None +OpBranch %121 +%121 = OpLabel +%122 = OpLoad %40 %120 +%123 = OpIEqual %42 %43 %122 +%124 = OpAll %8 %123 +OpSelectionMerge %125 None +OpBranchConditional %124 %117 %125 +%125 = OpLabel +%126 = OpCompositeExtract %3 %122 1 +%127 = OpIEqual %8 %126 %21 +%128 = OpSelect %3 %127 %26 %21 +%129 = OpCompositeConstruct %40 %128 %26 +%130 = OpISub %40 %122 %129 +OpStore %120 %130 +OpBranch %118 +%118 = OpLabel +%131 = OpLoad %3 %110 +%132 = OpULessThan %8 %131 %6 +OpSelectionMerge %133 None +OpBranchConditional %132 %133 %134 +%134 = OpLabel +OpBranch %117 %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 %135 +%135 = OpLabel +%137 = OpLoad %3 %110 +%139 = OpAccessChain %138 %109 %137 +%140 = OpAtomicLoad %3 %139 %67 %68 +OpStore %111 %140 +OpStore %113 %23 OpBranch %141 %141 = OpLabel -%154 = OpLoad %8 %111 -%155 = OpLogicalNot %8 %154 -OpSelectionMerge %156 None -OpBranchConditional %155 %156 %157 -%157 = OpLabel -OpBranch %140 -%156 = OpLabel -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 +OpLoopMerge %142 %144 None +OpBranch %146 +%146 = OpLabel +%147 = OpLoad %40 %145 +%148 = OpIEqual %42 %43 %147 +%149 = OpAll %8 %148 +OpSelectionMerge %150 None +OpBranchConditional %149 %142 %150 +%150 = OpLabel +%151 = OpCompositeExtract %3 %147 1 +%152 = OpIEqual %8 %151 %21 +%153 = OpSelect %3 %152 %26 %21 +%154 = OpCompositeConstruct %40 %153 %26 +%155 = OpISub %40 %147 %154 +OpStore %145 %155 +OpBranch %143 +%143 = OpLabel +%156 = OpLoad %8 %113 +%157 = OpLogicalNot %8 %156 +OpSelectionMerge %158 None +OpBranchConditional %157 %158 %159 %159 = OpLabel OpBranch %142 +%158 = OpLabel +OpBranch %160 +%160 = OpLabel +%162 = OpLoad %3 %111 +%163 = OpBitcast %24 %162 +%164 = OpFAdd %24 %163 %25 +%165 = OpBitcast %3 %164 +%166 = OpLoad %3 %110 +%167 = OpLoad %3 %111 +%169 = OpAccessChain %138 %109 %166 +%170 = OpAtomicCompareExchange %3 %169 %67 %98 %101 %165 %167 +%171 = OpIEqual %8 %170 %167 +%168 = OpCompositeConstruct %10 %170 %171 +%172 = OpCompositeExtract %3 %168 0 +OpStore %111 %172 +%173 = OpCompositeExtract %8 %168 1 +OpStore %113 %173 +OpBranch %161 +%161 = OpLabel +OpBranch %144 +%144 = OpLabel +OpBranch %141 %142 = OpLabel -OpBranch %139 -%140 = OpLabel -OpBranch %134 -%134 = OpLabel -OpBranch %117 +OpBranch %136 +%136 = OpLabel +OpBranch %119 +%119 = OpLabel +%174 = OpLoad %3 %110 +%175 = OpIAdd %3 %174 %26 +OpStore %110 %175 +OpBranch %116 %117 = OpLabel -%172 = OpLoad %3 %108 -%173 = OpIAdd %3 %172 %26 -OpStore %108 %173 -OpBranch %114 -%115 = OpLabel OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm b/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm index 135274b0d83..b4fc52d73d5 100644 --- a/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 62 +; Bound: 64 OpCapability Shader OpCapability AtomicFloat32AddEXT OpExtension "SPV_KHR_storage_buffer_storage_class" @@ -52,9 +52,11 @@ OpDecorate %19 BuiltIn LocalInvocationId %31 = OpConstant %3 1.5 %34 = OpTypeInt 32 1 %33 = OpConstant %34 1 -%35 = OpConstant %6 64 +%35 = OpConstant %6 68 %36 = OpConstant %6 1 %40 = OpConstant %6 264 +%42 = OpConstant %6 66 +%50 = OpConstant %6 72 %22 = OpFunction %2 None %23 %18 = OpLabel %21 = OpLoad %8 %19 @@ -71,28 +73,28 @@ 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 +%41 = OpAtomicLoad %3 %26 %33 %42 +%43 = OpAccessChain %24 %28 %36 +%44 = OpAtomicLoad %3 %43 %33 %42 +%45 = OpAccessChain %24 %30 %25 +%46 = OpAtomicLoad %3 %45 %33 %42 +%47 = OpAccessChain %24 %30 %36 %36 +%48 = OpAtomicLoad %3 %47 %33 %42 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 +%49 = OpAtomicFAddEXT %3 %26 %33 %50 %31 +%52 = OpAccessChain %24 %28 %36 +%51 = OpAtomicFAddEXT %3 %52 %33 %50 %31 +%54 = OpAccessChain %24 %30 %25 +%53 = OpAtomicFAddEXT %3 %54 %33 %50 %31 +%56 = OpAccessChain %24 %30 %36 %36 +%55 = OpAtomicFAddEXT %3 %56 %33 %50 %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 +%57 = OpAtomicExchange %3 %26 %33 %50 %31 +%59 = OpAccessChain %24 %28 %36 +%58 = OpAtomicExchange %3 %59 %33 %50 %31 +%61 = OpAccessChain %24 %30 %25 +%60 = OpAtomicExchange %3 %61 %33 %50 %31 +%63 = OpAccessChain %24 %30 %36 %36 +%62 = OpAtomicExchange %3 %63 %33 %50 %31 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm b/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm index 2d31197b3b8..95f0195362f 100644 --- a/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm @@ -60,7 +60,7 @@ OpDecorate %22 BuiltIn LocalInvocationId %36 = OpConstant %3 1 %41 = OpTypeInt 32 1 %40 = OpConstant %41 1 -%42 = OpConstant %6 64 +%42 = OpConstant %6 72 %46 = OpConstant %6 1 %54 = OpConstant %6 264 %25 = OpFunction %2 None %26 diff --git a/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm b/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm index 806ce479912..1d1616d1c39 100644 --- a/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.0 ; Generator: rspirv -; Bound: 227 +; Bound: 232 OpCapability Shader OpCapability Int64Atomics OpCapability Int64 @@ -75,12 +75,17 @@ OpDecorate %29 BuiltIn LocalInvocationId %55 = OpConstant %7 264 %58 = OpTypeInt 32 1 %57 = OpConstant %58 1 -%59 = OpConstant %7 64 +%59 = OpConstant %7 68 %60 = OpTypePointer StorageBuffer %4 %61 = OpConstant %7 1 %65 = OpConstant %58 2 -%66 = OpConstant %7 256 +%66 = OpConstant %7 260 %67 = OpTypePointer Workgroup %4 +%72 = OpConstant %7 66 +%80 = OpConstant %7 258 +%88 = OpConstant %7 72 +%203 = OpConstant %7 64 +%219 = OpConstant %7 256 %32 = OpFunction %2 None %33 %28 = OpLabel %31 = OpLoad %9 %29 @@ -117,168 +122,168 @@ OpAtomicStore %69 %65 %66 %41 %70 = OpAccessChain %67 %26 %61 %61 OpAtomicStore %70 %65 %66 %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 +%71 = OpAtomicLoad %3 %36 %57 %72 +%73 = OpAccessChain %60 %38 %61 +%74 = OpAtomicLoad %4 %73 %57 %72 +%75 = OpAccessChain %34 %40 %35 +%76 = OpAtomicLoad %3 %75 %57 %72 +%77 = OpAccessChain %60 %40 %61 %61 +%78 = OpAtomicLoad %4 %77 %57 %72 +%79 = OpAtomicLoad %3 %22 %65 %80 +%81 = OpAccessChain %67 %24 %61 +%82 = OpAtomicLoad %4 %81 %65 %80 +%83 = OpAccessChain %23 %26 %35 +%84 = OpAtomicLoad %3 %83 %65 %80 +%85 = OpAccessChain %67 %26 %61 %61 +%86 = OpAtomicLoad %4 %85 %65 %80 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 +%87 = OpAtomicIAdd %3 %36 %57 %88 %41 +%90 = OpAccessChain %60 %38 %61 +%89 = OpAtomicIAdd %4 %90 %57 %88 %42 +%92 = OpAccessChain %34 %40 %35 +%91 = OpAtomicIAdd %3 %92 %57 %88 %41 +%94 = OpAccessChain %60 %40 %61 %61 +%93 = OpAtomicIAdd %4 %94 %57 %88 %42 +%95 = OpAtomicIAdd %3 %22 %65 %55 %41 +%97 = OpAccessChain %67 %24 %61 +%96 = OpAtomicIAdd %4 %97 %65 %55 %42 +%99 = OpAccessChain %23 %26 %35 +%98 = OpAtomicIAdd %3 %99 %65 %55 %41 +%101 = OpAccessChain %67 %26 %61 %61 +%100 = OpAtomicIAdd %4 %101 %65 %55 %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 +%102 = OpAtomicISub %3 %36 %57 %88 %41 +%104 = OpAccessChain %60 %38 %61 +%103 = OpAtomicISub %4 %104 %57 %88 %42 +%106 = OpAccessChain %34 %40 %35 +%105 = OpAtomicISub %3 %106 %57 %88 %41 +%108 = OpAccessChain %60 %40 %61 %61 +%107 = OpAtomicISub %4 %108 %57 %88 %42 +%109 = OpAtomicISub %3 %22 %65 %55 %41 +%111 = OpAccessChain %67 %24 %61 +%110 = OpAtomicISub %4 %111 %65 %55 %42 +%113 = OpAccessChain %23 %26 %35 +%112 = OpAtomicISub %3 %113 %65 %55 %41 +%115 = OpAccessChain %67 %26 %61 %61 +%114 = OpAtomicISub %4 %115 %65 %55 %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 +%116 = OpAtomicUMax %3 %36 %57 %88 %41 +%118 = OpAccessChain %60 %38 %61 +%117 = OpAtomicSMax %4 %118 %57 %88 %42 +%120 = OpAccessChain %34 %40 %35 +%119 = OpAtomicUMax %3 %120 %57 %88 %41 +%122 = OpAccessChain %60 %40 %61 %61 +%121 = OpAtomicSMax %4 %122 %57 %88 %42 +%123 = OpAtomicUMax %3 %22 %65 %55 %41 +%125 = OpAccessChain %67 %24 %61 +%124 = OpAtomicSMax %4 %125 %65 %55 %42 +%127 = OpAccessChain %23 %26 %35 +%126 = OpAtomicUMax %3 %127 %65 %55 %41 +%129 = OpAccessChain %67 %26 %61 %61 +%128 = OpAtomicSMax %4 %129 %65 %55 %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 +%130 = OpAtomicUMin %3 %36 %57 %88 %41 +%132 = OpAccessChain %60 %38 %61 +%131 = OpAtomicSMin %4 %132 %57 %88 %42 +%134 = OpAccessChain %34 %40 %35 +%133 = OpAtomicUMin %3 %134 %57 %88 %41 +%136 = OpAccessChain %60 %40 %61 %61 +%135 = OpAtomicSMin %4 %136 %57 %88 %42 +%137 = OpAtomicUMin %3 %22 %65 %55 %41 +%139 = OpAccessChain %67 %24 %61 +%138 = OpAtomicSMin %4 %139 %65 %55 %42 +%141 = OpAccessChain %23 %26 %35 +%140 = OpAtomicUMin %3 %141 %65 %55 %41 +%143 = OpAccessChain %67 %26 %61 %61 +%142 = OpAtomicSMin %4 %143 %65 %55 %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 +%144 = OpAtomicAnd %3 %36 %57 %88 %41 +%146 = OpAccessChain %60 %38 %61 +%145 = OpAtomicAnd %4 %146 %57 %88 %42 +%148 = OpAccessChain %34 %40 %35 +%147 = OpAtomicAnd %3 %148 %57 %88 %41 +%150 = OpAccessChain %60 %40 %61 %61 +%149 = OpAtomicAnd %4 %150 %57 %88 %42 +%151 = OpAtomicAnd %3 %22 %65 %55 %41 +%153 = OpAccessChain %67 %24 %61 +%152 = OpAtomicAnd %4 %153 %65 %55 %42 +%155 = OpAccessChain %23 %26 %35 +%154 = OpAtomicAnd %3 %155 %65 %55 %41 +%157 = OpAccessChain %67 %26 %61 %61 +%156 = OpAtomicAnd %4 %157 %65 %55 %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 +%158 = OpAtomicOr %3 %36 %57 %88 %41 +%160 = OpAccessChain %60 %38 %61 +%159 = OpAtomicOr %4 %160 %57 %88 %42 +%162 = OpAccessChain %34 %40 %35 +%161 = OpAtomicOr %3 %162 %57 %88 %41 +%164 = OpAccessChain %60 %40 %61 %61 +%163 = OpAtomicOr %4 %164 %57 %88 %42 +%165 = OpAtomicOr %3 %22 %65 %55 %41 +%167 = OpAccessChain %67 %24 %61 +%166 = OpAtomicOr %4 %167 %65 %55 %42 +%169 = OpAccessChain %23 %26 %35 +%168 = OpAtomicOr %3 %169 %65 %55 %41 +%171 = OpAccessChain %67 %26 %61 %61 +%170 = OpAtomicOr %4 %171 %65 %55 %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 +%172 = OpAtomicXor %3 %36 %57 %88 %41 +%174 = OpAccessChain %60 %38 %61 +%173 = OpAtomicXor %4 %174 %57 %88 %42 +%176 = OpAccessChain %34 %40 %35 +%175 = OpAtomicXor %3 %176 %57 %88 %41 +%178 = OpAccessChain %60 %40 %61 %61 +%177 = OpAtomicXor %4 %178 %57 %88 %42 +%179 = OpAtomicXor %3 %22 %65 %55 %41 +%181 = OpAccessChain %67 %24 %61 +%180 = OpAtomicXor %4 %181 %65 %55 %42 +%183 = OpAccessChain %23 %26 %35 +%182 = OpAtomicXor %3 %183 %65 %55 %41 +%185 = OpAccessChain %67 %26 %61 %61 +%184 = OpAtomicXor %4 %185 %65 %55 %42 +%186 = OpAtomicExchange %3 %36 %57 %88 %41 +%188 = OpAccessChain %60 %38 %61 +%187 = OpAtomicExchange %4 %188 %57 %88 %42 +%190 = OpAccessChain %34 %40 %35 +%189 = OpAtomicExchange %3 %190 %57 %88 %41 +%192 = OpAccessChain %60 %40 %61 %61 +%191 = OpAtomicExchange %4 %192 %57 %88 %42 +%193 = OpAtomicExchange %3 %22 %65 %55 %41 +%195 = OpAccessChain %67 %24 %61 +%194 = OpAtomicExchange %4 %195 %65 %55 %42 +%197 = OpAccessChain %23 %26 %35 +%196 = OpAtomicExchange %3 %197 %65 %55 %41 +%199 = OpAccessChain %67 %26 %61 %61 +%198 = OpAtomicExchange %4 %199 %65 %55 %42 +%201 = OpAtomicCompareExchange %3 %36 %57 %88 %203 %43 %41 +%202 = OpIEqual %10 %201 %41 +%200 = OpCompositeConstruct %11 %201 %202 +%205 = OpAccessChain %60 %38 %61 +%206 = OpAtomicCompareExchange %4 %205 %57 %88 %203 %44 %42 +%207 = OpIEqual %10 %206 %42 +%204 = OpCompositeConstruct %12 %206 %207 +%209 = OpAccessChain %34 %40 %35 +%210 = OpAtomicCompareExchange %3 %209 %57 %88 %203 %43 %41 +%211 = OpIEqual %10 %210 %41 +%208 = OpCompositeConstruct %11 %210 %211 +%213 = OpAccessChain %60 %40 %61 %61 +%214 = OpAtomicCompareExchange %4 %213 %57 %88 %203 %44 %42 +%215 = OpIEqual %10 %214 %42 +%212 = OpCompositeConstruct %12 %214 %215 +%217 = OpAtomicCompareExchange %3 %22 %65 %55 %219 %43 %41 +%218 = OpIEqual %10 %217 %41 +%216 = OpCompositeConstruct %11 %217 %218 +%221 = OpAccessChain %67 %24 %61 +%222 = OpAtomicCompareExchange %4 %221 %65 %55 %219 %44 %42 +%223 = OpIEqual %10 %222 %42 +%220 = OpCompositeConstruct %12 %222 %223 +%225 = OpAccessChain %23 %26 %35 +%226 = OpAtomicCompareExchange %3 %225 %65 %55 %219 %43 %41 +%227 = OpIEqual %10 %226 %41 +%224 = OpCompositeConstruct %11 %226 %227 +%229 = OpAccessChain %67 %26 %61 %61 +%230 = OpAtomicCompareExchange %4 %229 %65 %55 %219 %44 %42 +%231 = OpIEqual %10 %230 %42 +%228 = OpCompositeConstruct %12 %230 %231 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicOps.spvasm b/naga/tests/out/spv/wgsl-atomicOps.spvasm index f000dc21fd8..9b3b190714c 100644 --- a/naga/tests/out/spv/wgsl-atomicOps.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 221 +; Bound: 226 OpCapability Shader OpExtension "SPV_KHR_storage_buffer_storage_class" %1 = OpExtInstImport "GLSL.std.450" @@ -69,10 +69,15 @@ OpDecorate %28 BuiltIn LocalInvocationId %47 = OpConstantNull %8 %48 = OpTypeVector %9 3 %53 = OpConstant %3 264 -%55 = OpConstant %3 64 +%55 = OpConstant %3 68 %56 = OpTypePointer StorageBuffer %4 -%60 = OpConstant %3 256 +%60 = OpConstant %3 260 %61 = OpTypePointer Workgroup %4 +%66 = OpConstant %3 66 +%74 = OpConstant %3 258 +%82 = OpConstant %3 72 +%197 = OpConstant %3 64 +%213 = OpConstant %3 256 %31 = OpFunction %2 None %32 %27 = OpLabel %30 = OpLoad %8 %28 @@ -109,168 +114,168 @@ OpAtomicStore %63 %42 %60 %40 %64 = OpAccessChain %61 %25 %40 %40 OpAtomicStore %64 %42 %60 %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 +%65 = OpAtomicLoad %3 %35 %41 %66 +%67 = OpAccessChain %56 %37 %40 +%68 = OpAtomicLoad %4 %67 %41 %66 +%69 = OpAccessChain %33 %39 %34 +%70 = OpAtomicLoad %3 %69 %41 %66 +%71 = OpAccessChain %56 %39 %40 %40 +%72 = OpAtomicLoad %4 %71 %41 %66 +%73 = OpAtomicLoad %3 %21 %42 %74 +%75 = OpAccessChain %61 %23 %40 +%76 = OpAtomicLoad %4 %75 %42 %74 +%77 = OpAccessChain %22 %25 %34 +%78 = OpAtomicLoad %3 %77 %42 %74 +%79 = OpAccessChain %61 %25 %40 %40 +%80 = OpAtomicLoad %4 %79 %42 %74 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 +%81 = OpAtomicIAdd %3 %35 %41 %82 %40 +%84 = OpAccessChain %56 %37 %40 +%83 = OpAtomicIAdd %4 %84 %41 %82 %41 +%86 = OpAccessChain %33 %39 %34 +%85 = OpAtomicIAdd %3 %86 %41 %82 %40 +%88 = OpAccessChain %56 %39 %40 %40 +%87 = OpAtomicIAdd %4 %88 %41 %82 %41 +%89 = OpAtomicIAdd %3 %21 %42 %53 %40 +%91 = OpAccessChain %61 %23 %40 +%90 = OpAtomicIAdd %4 %91 %42 %53 %41 +%93 = OpAccessChain %22 %25 %34 +%92 = OpAtomicIAdd %3 %93 %42 %53 %40 +%95 = OpAccessChain %61 %25 %40 %40 +%94 = OpAtomicIAdd %4 %95 %42 %53 %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 +%96 = OpAtomicISub %3 %35 %41 %82 %40 +%98 = OpAccessChain %56 %37 %40 +%97 = OpAtomicISub %4 %98 %41 %82 %41 +%100 = OpAccessChain %33 %39 %34 +%99 = OpAtomicISub %3 %100 %41 %82 %40 +%102 = OpAccessChain %56 %39 %40 %40 +%101 = OpAtomicISub %4 %102 %41 %82 %41 +%103 = OpAtomicISub %3 %21 %42 %53 %40 +%105 = OpAccessChain %61 %23 %40 +%104 = OpAtomicISub %4 %105 %42 %53 %41 +%107 = OpAccessChain %22 %25 %34 +%106 = OpAtomicISub %3 %107 %42 %53 %40 +%109 = OpAccessChain %61 %25 %40 %40 +%108 = OpAtomicISub %4 %109 %42 %53 %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 +%110 = OpAtomicUMax %3 %35 %41 %82 %40 +%112 = OpAccessChain %56 %37 %40 +%111 = OpAtomicSMax %4 %112 %41 %82 %41 +%114 = OpAccessChain %33 %39 %34 +%113 = OpAtomicUMax %3 %114 %41 %82 %40 +%116 = OpAccessChain %56 %39 %40 %40 +%115 = OpAtomicSMax %4 %116 %41 %82 %41 +%117 = OpAtomicUMax %3 %21 %42 %53 %40 +%119 = OpAccessChain %61 %23 %40 +%118 = OpAtomicSMax %4 %119 %42 %53 %41 +%121 = OpAccessChain %22 %25 %34 +%120 = OpAtomicUMax %3 %121 %42 %53 %40 +%123 = OpAccessChain %61 %25 %40 %40 +%122 = OpAtomicSMax %4 %123 %42 %53 %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 +%124 = OpAtomicUMin %3 %35 %41 %82 %40 +%126 = OpAccessChain %56 %37 %40 +%125 = OpAtomicSMin %4 %126 %41 %82 %41 +%128 = OpAccessChain %33 %39 %34 +%127 = OpAtomicUMin %3 %128 %41 %82 %40 +%130 = OpAccessChain %56 %39 %40 %40 +%129 = OpAtomicSMin %4 %130 %41 %82 %41 +%131 = OpAtomicUMin %3 %21 %42 %53 %40 +%133 = OpAccessChain %61 %23 %40 +%132 = OpAtomicSMin %4 %133 %42 %53 %41 +%135 = OpAccessChain %22 %25 %34 +%134 = OpAtomicUMin %3 %135 %42 %53 %40 +%137 = OpAccessChain %61 %25 %40 %40 +%136 = OpAtomicSMin %4 %137 %42 %53 %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 +%138 = OpAtomicAnd %3 %35 %41 %82 %40 +%140 = OpAccessChain %56 %37 %40 +%139 = OpAtomicAnd %4 %140 %41 %82 %41 +%142 = OpAccessChain %33 %39 %34 +%141 = OpAtomicAnd %3 %142 %41 %82 %40 +%144 = OpAccessChain %56 %39 %40 %40 +%143 = OpAtomicAnd %4 %144 %41 %82 %41 +%145 = OpAtomicAnd %3 %21 %42 %53 %40 +%147 = OpAccessChain %61 %23 %40 +%146 = OpAtomicAnd %4 %147 %42 %53 %41 +%149 = OpAccessChain %22 %25 %34 +%148 = OpAtomicAnd %3 %149 %42 %53 %40 +%151 = OpAccessChain %61 %25 %40 %40 +%150 = OpAtomicAnd %4 %151 %42 %53 %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 +%152 = OpAtomicOr %3 %35 %41 %82 %40 +%154 = OpAccessChain %56 %37 %40 +%153 = OpAtomicOr %4 %154 %41 %82 %41 +%156 = OpAccessChain %33 %39 %34 +%155 = OpAtomicOr %3 %156 %41 %82 %40 +%158 = OpAccessChain %56 %39 %40 %40 +%157 = OpAtomicOr %4 %158 %41 %82 %41 +%159 = OpAtomicOr %3 %21 %42 %53 %40 +%161 = OpAccessChain %61 %23 %40 +%160 = OpAtomicOr %4 %161 %42 %53 %41 +%163 = OpAccessChain %22 %25 %34 +%162 = OpAtomicOr %3 %163 %42 %53 %40 +%165 = OpAccessChain %61 %25 %40 %40 +%164 = OpAtomicOr %4 %165 %42 %53 %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 +%166 = OpAtomicXor %3 %35 %41 %82 %40 +%168 = OpAccessChain %56 %37 %40 +%167 = OpAtomicXor %4 %168 %41 %82 %41 +%170 = OpAccessChain %33 %39 %34 +%169 = OpAtomicXor %3 %170 %41 %82 %40 +%172 = OpAccessChain %56 %39 %40 %40 +%171 = OpAtomicXor %4 %172 %41 %82 %41 +%173 = OpAtomicXor %3 %21 %42 %53 %40 +%175 = OpAccessChain %61 %23 %40 +%174 = OpAtomicXor %4 %175 %42 %53 %41 +%177 = OpAccessChain %22 %25 %34 +%176 = OpAtomicXor %3 %177 %42 %53 %40 +%179 = OpAccessChain %61 %25 %40 %40 +%178 = OpAtomicXor %4 %179 %42 %53 %41 +%180 = OpAtomicExchange %3 %35 %41 %82 %40 +%182 = OpAccessChain %56 %37 %40 +%181 = OpAtomicExchange %4 %182 %41 %82 %41 +%184 = OpAccessChain %33 %39 %34 +%183 = OpAtomicExchange %3 %184 %41 %82 %40 +%186 = OpAccessChain %56 %39 %40 %40 +%185 = OpAtomicExchange %4 %186 %41 %82 %41 +%187 = OpAtomicExchange %3 %21 %42 %53 %40 +%189 = OpAccessChain %61 %23 %40 +%188 = OpAtomicExchange %4 %189 %42 %53 %41 +%191 = OpAccessChain %22 %25 %34 +%190 = OpAtomicExchange %3 %191 %42 %53 %40 +%193 = OpAccessChain %61 %25 %40 %40 +%192 = OpAtomicExchange %4 %193 %42 %53 %41 +%195 = OpAtomicCompareExchange %3 %35 %41 %82 %197 %6 %40 +%196 = OpIEqual %9 %195 %40 +%194 = OpCompositeConstruct %10 %195 %196 +%199 = OpAccessChain %56 %37 %40 +%200 = OpAtomicCompareExchange %4 %199 %41 %82 %197 %42 %41 +%201 = OpIEqual %9 %200 %41 +%198 = OpCompositeConstruct %11 %200 %201 +%203 = OpAccessChain %33 %39 %34 +%204 = OpAtomicCompareExchange %3 %203 %41 %82 %197 %6 %40 +%205 = OpIEqual %9 %204 %40 +%202 = OpCompositeConstruct %10 %204 %205 +%207 = OpAccessChain %56 %39 %40 %40 +%208 = OpAtomicCompareExchange %4 %207 %41 %82 %197 %42 %41 +%209 = OpIEqual %9 %208 %41 +%206 = OpCompositeConstruct %11 %208 %209 +%211 = OpAtomicCompareExchange %3 %21 %42 %53 %213 %6 %40 +%212 = OpIEqual %9 %211 %40 +%210 = OpCompositeConstruct %10 %211 %212 +%215 = OpAccessChain %61 %23 %40 +%216 = OpAtomicCompareExchange %4 %215 %42 %53 %213 %42 %41 +%217 = OpIEqual %9 %216 %41 +%214 = OpCompositeConstruct %11 %216 %217 +%219 = OpAccessChain %22 %25 %34 +%220 = OpAtomicCompareExchange %3 %219 %42 %53 %213 %6 %40 +%221 = OpIEqual %9 %220 %40 +%218 = OpCompositeConstruct %10 %220 %221 +%223 = OpAccessChain %61 %25 %40 %40 +%224 = OpAtomicCompareExchange %4 %223 %42 %53 %213 %42 %41 +%225 = OpIEqual %9 %224 %41 +%222 = OpCompositeConstruct %11 %224 %225 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm b/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm index 0238f44d7e9..6dcdf035d2b 100644 --- a/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm +++ b/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.0 ; Generator: rspirv -; Bound: 31 +; Bound: 32 OpCapability Shader OpCapability Int64ImageEXT OpCapability Int64 @@ -31,9 +31,10 @@ OpDecorate %12 BuiltIn LocalInvocationId %20 = OpConstant %4 1 %22 = OpTypePointer Image %4 %24 = OpConstant %6 0 -%26 = OpConstant %8 4 -%27 = OpConstant %6 2 -%28 = OpConstant %6 264 +%26 = OpConstant %8 1 +%27 = OpConstant %6 2056 +%28 = OpConstant %6 2 +%29 = OpConstant %6 264 %15 = OpFunction %2 None %16 %11 = OpLabel %14 = OpLoad %5 %12 @@ -41,9 +42,9 @@ OpDecorate %12 BuiltIn LocalInvocationId OpBranch %21 %21 = OpLabel %23 = OpImageTexelPointer %22 %9 %19 %24 -%25 = OpAtomicUMax %4 %23 %26 %24 %20 -OpControlBarrier %27 %27 %28 -%29 = OpImageTexelPointer %22 %9 %19 %24 -%30 = OpAtomicUMin %4 %29 %26 %24 %20 +%25 = OpAtomicUMax %4 %23 %26 %27 %20 +OpControlBarrier %28 %28 %29 +%30 = OpImageTexelPointer %22 %9 %19 %24 +%31 = OpAtomicUMin %4 %30 %26 %27 %20 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicTexture.spvasm b/naga/tests/out/spv/wgsl-atomicTexture.spvasm index 42eaa3d33fb..9d15be7bcdd 100644 --- a/naga/tests/out/spv/wgsl-atomicTexture.spvasm +++ b/naga/tests/out/spv/wgsl-atomicTexture.spvasm @@ -32,7 +32,7 @@ OpDecorate %14 BuiltIn LocalInvocationId %24 = OpConstant %6 1 %26 = OpTypePointer Image %4 %28 = OpConstant %4 0 -%30 = OpConstant %6 4 +%30 = OpConstant %4 2056 %41 = OpTypePointer Image %6 %17 = OpFunction %2 None %18 %13 = OpLabel @@ -42,28 +42,28 @@ OpDecorate %14 BuiltIn LocalInvocationId OpBranch %25 %25 = OpLabel %27 = OpImageTexelPointer %26 %9 %22 %28 -%29 = OpAtomicUMax %4 %27 %30 %28 %23 +%29 = OpAtomicUMax %4 %27 %24 %30 %23 %31 = OpImageTexelPointer %26 %9 %22 %28 -%32 = OpAtomicUMin %4 %31 %30 %28 %23 +%32 = OpAtomicUMin %4 %31 %24 %30 %23 %33 = OpImageTexelPointer %26 %9 %22 %28 -%34 = OpAtomicIAdd %4 %33 %30 %28 %23 +%34 = OpAtomicIAdd %4 %33 %24 %30 %23 %35 = OpImageTexelPointer %26 %9 %22 %28 -%36 = OpAtomicAnd %4 %35 %30 %28 %23 +%36 = OpAtomicAnd %4 %35 %24 %30 %23 %37 = OpImageTexelPointer %26 %9 %22 %28 -%38 = OpAtomicOr %4 %37 %30 %28 %23 +%38 = OpAtomicOr %4 %37 %24 %30 %23 %39 = OpImageTexelPointer %26 %9 %22 %28 -%40 = OpAtomicXor %4 %39 %30 %28 %23 +%40 = OpAtomicXor %4 %39 %24 %30 %23 %42 = OpImageTexelPointer %41 %11 %22 %28 -%43 = OpAtomicSMax %6 %42 %30 %28 %24 +%43 = OpAtomicSMax %6 %42 %24 %30 %24 %44 = OpImageTexelPointer %41 %11 %22 %28 -%45 = OpAtomicSMin %6 %44 %30 %28 %24 +%45 = OpAtomicSMin %6 %44 %24 %30 %24 %46 = OpImageTexelPointer %41 %11 %22 %28 -%47 = OpAtomicIAdd %6 %46 %30 %28 %24 +%47 = OpAtomicIAdd %6 %46 %24 %30 %24 %48 = OpImageTexelPointer %41 %11 %22 %28 -%49 = OpAtomicAnd %6 %48 %30 %28 %24 +%49 = OpAtomicAnd %6 %48 %24 %30 %24 %50 = OpImageTexelPointer %41 %11 %22 %28 -%51 = OpAtomicOr %6 %50 %30 %28 %24 +%51 = OpAtomicOr %6 %50 %24 %30 %24 %52 = OpImageTexelPointer %41 %11 %22 %28 -%53 = OpAtomicXor %6 %52 %30 %28 %24 +%53 = OpAtomicXor %6 %52 %24 %30 %24 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-globals.spvasm b/naga/tests/out/spv/wgsl-globals.spvasm index 8feae9610ce..9fb83f4a5be 100644 --- a/naga/tests/out/spv/wgsl-globals.spvasm +++ b/naga/tests/out/spv/wgsl-globals.spvasm @@ -147,7 +147,7 @@ OpDecorate %116 BuiltIn LocalInvocationId %155 = OpConstant %7 3 %158 = OpConstant %7 4 %170 = OpConstant %23 2 -%171 = OpConstant %7 256 +%171 = OpConstant %7 260 %53 = OpFunction %2 None %54 %52 = OpFunctionParameter %8 %51 = OpLabel diff --git a/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm b/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm index 59c69ae1fc7..7ce6317340b 100644 --- a/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm +++ b/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm @@ -28,7 +28,7 @@ OpDecorate %18 BuiltIn LocalInvocationId %21 = OpConstantNull %17 %22 = OpTypeVector %5 3 %27 = OpConstant %4 264 -%30 = OpConstant %4 256 +%32 = OpConstant %4 256 %11 = OpFunction %2 None %12 %10 = OpLabel OpBranch %15 @@ -45,8 +45,8 @@ OpBranch %25 OpControlBarrier %13 %13 %27 OpBranch %28 %28 = OpLabel -%31 = OpAtomicCompareExchange %4 %8 %7 %30 %30 %14 %13 -%32 = OpIEqual %5 %31 %13 -%29 = OpCompositeConstruct %6 %31 %32 +%30 = OpAtomicCompareExchange %4 %8 %7 %27 %32 %14 %13 +%31 = OpIEqual %5 %30 %13 +%29 = OpCompositeConstruct %6 %30 %31 OpReturn OpFunctionEnd \ No newline at end of file From 575973b6ad7cd985a53841999d09171ebd6ebb02 Mon Sep 17 00:00:00 2001 From: atlas dostal Date: Wed, 22 Oct 2025 13:45:41 -0400 Subject: [PATCH 2/2] invert fix to remove memory semantics and always use relaxed --- naga/src/back/spv/block.rs | 16 +- naga/src/back/spv/helpers.rs | 22 +- naga/src/back/spv/image.rs | 3 +- .../wgsl-atomicCompareExchange-int64.spvasm | 297 ++++++++------- .../out/spv/wgsl-atomicCompareExchange.spvasm | 301 ++++++++------- .../out/spv/wgsl-atomicOps-float32.spvasm | 71 ++-- .../spv/wgsl-atomicOps-int64-min-max.spvasm | 55 ++- .../tests/out/spv/wgsl-atomicOps-int64.spvasm | 357 +++++++++--------- naga/tests/out/spv/wgsl-atomicOps.spvasm | 353 +++++++++-------- .../out/spv/wgsl-atomicTexture-int64.spvasm | 15 +- naga/tests/out/spv/wgsl-atomicTexture.spvasm | 51 ++- naga/tests/out/spv/wgsl-globals.spvasm | 5 +- ...errides-atomicCompareExchangeWeak.f.spvasm | 8 +- 13 files changed, 752 insertions(+), 802 deletions(-) diff --git a/naga/src/back/spv/block.rs b/naga/src/back/spv/block.rs index 0d2d448e1ac..dd9a3811687 100644 --- a/naga/src/back/spv/block.rs +++ b/naga/src/back/spv/block.rs @@ -2324,8 +2324,7 @@ impl BlockContext<'_> { _ => None, }; let instruction = if let Some(space) = atomic_space { - let (semantics, scope) = - space.to_spirv_semantics_and_scope(spirv::MemorySemantics::ACQUIRE); + let (semantics, scope) = space.to_spirv_semantics_and_scope(); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); Instruction::atomic_load( @@ -3277,8 +3276,7 @@ impl BlockContext<'_> { _ => None, }; let instruction = if let Some(space) = atomic_space { - let (semantics, scope) = space - .to_spirv_semantics_and_scope(spirv::MemorySemantics::RELEASE); + let (semantics, scope) = space.to_spirv_semantics_and_scope(); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); Instruction::atomic_store( @@ -3377,8 +3375,7 @@ impl BlockContext<'_> { .inner_with(&self.ir_module.types) .pointer_space() .unwrap(); - let (semantics, scope) = - space.to_spirv_semantics_and_scope(spirv::MemorySemantics::ACQUIRE_RELEASE); + let (semantics, scope) = space.to_spirv_semantics_and_scope(); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); let value_id = self.cached[value]; @@ -3547,18 +3544,13 @@ impl BlockContext<'_> { _ => unimplemented!(), }; - let (semantics_unequal, _) = - space.to_spirv_semantics_and_scope(spirv::MemorySemantics::empty()); - let semantics_id_unequal = - self.get_index_constant(semantics_unequal.bits()); - let mut cas_instr = Instruction::new(spirv::Op::AtomicCompareExchange); cas_instr.set_type(scalar_type_id); cas_instr.set_result(cas_result_id); cas_instr.add_operand(pointer_id); cas_instr.add_operand(scope_constant_id); cas_instr.add_operand(semantics_id); // semantics if equal - cas_instr.add_operand(semantics_id_unequal); // semantics if not equal + cas_instr.add_operand(semantics_id); // semantics if not equal cas_instr.add_operand(value_id); cas_instr.add_operand(self.cached[cmp]); block.body.push(cas_instr); diff --git a/naga/src/back/spv/helpers.rs b/naga/src/back/spv/helpers.rs index 4ddb35d3aa3..4ca5a8997c8 100644 --- a/naga/src/back/spv/helpers.rs +++ b/naga/src/back/spv/helpers.rs @@ -75,28 +75,14 @@ pub(super) fn contains_builtin( } impl crate::AddressSpace { - /// The base semantic (ACQUIRE, RELEASE, ACQUIRE_RELEASE) must be supplied pub(super) const fn to_spirv_semantics_and_scope( self, - semantic: spirv::MemorySemantics, ) -> (spirv::MemorySemantics, spirv::Scope) { match self { - Self::Storage { .. } => ( - spirv::MemorySemantics::UNIFORM_MEMORY.union(semantic), - spirv::Scope::Device, - ), - Self::WorkGroup => ( - spirv::MemorySemantics::WORKGROUP_MEMORY.union(semantic), - spirv::Scope::Workgroup, - ), - Self::Uniform => ( - spirv::MemorySemantics::UNIFORM_MEMORY.union(semantic), - spirv::Scope::Device, - ), - Self::Handle => ( - spirv::MemorySemantics::IMAGE_MEMORY.union(semantic), - spirv::Scope::Device, - ), + 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), } } diff --git a/naga/src/back/spv/image.rs b/naga/src/back/spv/image.rs index cacbac08e3e..3aec1333f0c 100644 --- a/naga/src/back/spv/image.rs +++ b/naga/src/back/spv/image.rs @@ -1363,8 +1363,7 @@ impl BlockContext<'_> { let result_type_id = self.get_expression_type_id(&self.fun_info[value].ty); let id = self.gen_id(); let space = crate::AddressSpace::Handle; - let (semantics, scope) = - space.to_spirv_semantics_and_scope(spirv::MemorySemantics::ACQUIRE_RELEASE); + let (semantics, scope) = space.to_spirv_semantics_and_scope(); let scope_constant_id = self.get_scope_constant(scope as u32); let semantics_id = self.get_index_constant(semantics.bits()); let value_id = self.cached[value]; diff --git a/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm b/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm index 65c386e2771..7520939cc68 100644 --- a/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm +++ b/naga/tests/out/spv/wgsl-atomicCompareExchange-int64.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.0 ; Generator: rspirv -; Bound: 175 +; 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 %106 "test_atomic_compare_exchange_u64" +OpEntryPoint GLCompute %103 "test_atomic_compare_exchange_u64" OpExecutionMode %19 LocalSize 1 1 1 -OpExecutionMode %106 LocalSize 1 1 1 +OpExecutionMode %103 LocalSize 1 1 1 OpDecorate %5 ArrayStride 8 OpDecorate %8 ArrayStride 8 OpMemberDecorate %10 0 Offset 0 @@ -62,22 +62,19 @@ OpMemberDecorate %16 0 Offset 0 %64 = OpTypePointer StorageBuffer %4 %68 = OpTypeInt 32 1 %67 = OpConstant %68 1 -%69 = OpConstant %3 66 -%97 = OpConstant %3 72 -%100 = OpConstant %3 64 -%107 = OpTypePointer StorageBuffer %8 -%109 = OpConstant %7 10 -%112 = OpTypePointer Function %7 -%113 = OpConstantNull %7 -%115 = OpConstantNull %9 -%139 = 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 @@ -111,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 -%98 = OpAtomicCompareExchange %4 %96 %67 %97 %100 %92 %94 -%99 = OpIEqual %9 %98 %94 -%95 = OpCompositeConstruct %10 %98 %99 -%101 = OpCompositeExtract %4 %95 0 -OpStore %29 %101 -%102 = OpCompositeExtract %9 %95 1 -OpStore %32 %102 -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 -%103 = OpLoad %3 %27 -%104 = OpIAdd %3 %103 %26 -OpStore %27 %104 +%100 = OpLoad %3 %27 +%101 = OpIAdd %3 %100 %26 +OpStore %27 %101 OpBranch %36 %37 = OpLabel OpReturn OpFunctionEnd -%106 = OpFunction %2 None %20 -%105 = OpLabel -%110 = OpVariable %28 Function %22 -%111 = OpVariable %112 Function %113 -%114 = OpVariable %33 Function %115 -%121 = OpVariable %41 Function %45 -%146 = OpVariable %41 Function %45 -%108 = OpAccessChain %107 %15 %22 -OpBranch %116 -%116 = OpLabel -OpBranch %117 -%117 = OpLabel -OpLoopMerge %118 %120 None -OpBranch %122 -%122 = OpLabel -%123 = OpLoad %40 %121 -%124 = OpIEqual %42 %43 %123 -%125 = OpAll %9 %124 -OpSelectionMerge %126 None -OpBranchConditional %125 %118 %126 -%126 = OpLabel -%127 = OpCompositeExtract %3 %123 1 -%128 = OpIEqual %9 %127 %22 -%129 = OpSelect %3 %128 %26 %22 -%130 = OpCompositeConstruct %40 %129 %26 -%131 = OpISub %40 %123 %130 -OpStore %121 %131 +%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 +OpLoopMerge %115 %117 None OpBranch %119 %119 = OpLabel -%132 = OpLoad %3 %110 -%133 = OpULessThan %9 %132 %6 -OpSelectionMerge %134 None -OpBranchConditional %133 %134 %135 -%135 = OpLabel -OpBranch %118 -%134 = OpLabel -OpBranch %136 -%136 = OpLabel -%138 = OpLoad %3 %110 -%140 = OpAccessChain %139 %108 %138 -%141 = OpAtomicLoad %7 %140 %67 %69 -OpStore %111 %141 -OpStore %114 %24 -OpBranch %142 -%142 = OpLabel -OpLoopMerge %143 %145 None -OpBranch %147 -%147 = OpLabel -%148 = OpLoad %40 %146 -%149 = OpIEqual %42 %43 %148 -%150 = OpAll %9 %149 -OpSelectionMerge %151 None -OpBranchConditional %150 %143 %151 -%151 = OpLabel -%152 = OpCompositeExtract %3 %148 1 -%153 = OpIEqual %9 %152 %22 -%154 = OpSelect %3 %153 %26 %22 -%155 = OpCompositeConstruct %40 %154 %26 -%156 = OpISub %40 %148 %155 -OpStore %146 %156 +%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 %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 -%157 = OpLoad %9 %114 -%158 = OpLogicalNot %9 %157 -OpSelectionMerge %159 None -OpBranchConditional %158 %159 %160 -%160 = OpLabel -OpBranch %143 +%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 -OpBranch %161 -%161 = OpLabel -%163 = OpLoad %7 %111 -%164 = OpIAdd %7 %163 %109 -%165 = OpLoad %3 %110 -%166 = OpLoad %7 %111 -%168 = OpAccessChain %139 %108 %165 -%169 = OpAtomicCompareExchange %7 %168 %67 %97 %100 %164 %166 -%170 = OpIEqual %9 %169 %166 -%167 = OpCompositeConstruct %11 %169 %170 -%171 = OpCompositeExtract %7 %167 0 -OpStore %111 %171 -%172 = OpCompositeExtract %9 %167 1 -OpStore %114 %172 -OpBranch %162 -%162 = OpLabel -OpBranch %145 -%145 = OpLabel OpBranch %142 -%143 = OpLabel -OpBranch %137 -%137 = OpLabel -OpBranch %120 -%120 = OpLabel -%173 = OpLoad %3 %110 -%174 = OpIAdd %3 %173 %26 -OpStore %110 %174 +%142 = OpLabel +OpBranch %139 +%140 = OpLabel +OpBranch %134 +%134 = OpLabel OpBranch %117 -%118 = OpLabel +%117 = OpLabel +%170 = OpLoad %3 %107 +%171 = OpIAdd %3 %170 %26 +OpStore %107 %171 +OpBranch %114 +%115 = OpLabel OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm b/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm index d9b4ce3d360..17feb7de6fb 100644 --- a/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm +++ b/naga/tests/out/spv/wgsl-atomicCompareExchange.spvasm @@ -1,15 +1,15 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 176 +; 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 %107 "test_atomic_compare_exchange_u32" +OpEntryPoint GLCompute %104 "test_atomic_compare_exchange_u32" OpExecutionMode %18 LocalSize 1 1 1 -OpExecutionMode %107 LocalSize 1 1 1 +OpExecutionMode %104 LocalSize 1 1 1 OpDecorate %5 ArrayStride 4 OpDecorate %7 ArrayStride 4 OpMemberDecorate %9 0 Offset 0 @@ -59,20 +59,17 @@ OpMemberDecorate %15 0 Offset 0 %45 = OpConstantComposite %40 %44 %44 %64 = OpTypePointer StorageBuffer %4 %67 = OpConstant %4 1 -%68 = OpConstant %3 66 -%98 = OpConstant %3 72 -%101 = OpConstant %3 64 -%108 = OpTypePointer StorageBuffer %7 -%112 = OpConstantNull %3 -%114 = OpConstantNull %8 -%138 = 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 @@ -106,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 -%99 = OpAtomicCompareExchange %4 %97 %67 %98 %101 %93 %95 -%100 = OpIEqual %8 %99 %95 -%96 = OpCompositeConstruct %9 %99 %100 -%102 = OpCompositeExtract %4 %96 0 -OpStore %29 %102 -%103 = OpCompositeExtract %8 %96 1 -OpStore %32 %103 -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 -%104 = OpLoad %3 %27 -%105 = OpIAdd %3 %104 %26 -OpStore %27 %105 +%101 = OpLoad %3 %27 +%102 = OpIAdd %3 %101 %26 +OpStore %27 %102 OpBranch %36 %37 = OpLabel OpReturn OpFunctionEnd -%107 = OpFunction %2 None %19 -%106 = OpLabel -%110 = OpVariable %28 Function %21 -%111 = OpVariable %28 Function %112 -%113 = OpVariable %33 Function %114 -%120 = OpVariable %41 Function %45 -%145 = OpVariable %41 Function %45 -%109 = OpAccessChain %108 %14 %21 -OpBranch %115 -%115 = OpLabel -OpBranch %116 -%116 = OpLabel -OpLoopMerge %117 %119 None -OpBranch %121 -%121 = OpLabel -%122 = OpLoad %40 %120 -%123 = OpIEqual %42 %43 %122 -%124 = OpAll %8 %123 -OpSelectionMerge %125 None -OpBranchConditional %124 %117 %125 -%125 = OpLabel -%126 = OpCompositeExtract %3 %122 1 -%127 = OpIEqual %8 %126 %21 -%128 = OpSelect %3 %127 %26 %21 -%129 = OpCompositeConstruct %40 %128 %26 -%130 = OpISub %40 %122 %129 -OpStore %120 %130 +%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 +OpLoopMerge %114 %116 None OpBranch %118 %118 = OpLabel -%131 = OpLoad %3 %110 -%132 = OpULessThan %8 %131 %6 -OpSelectionMerge %133 None -OpBranchConditional %132 %133 %134 -%134 = OpLabel -OpBranch %117 -%133 = OpLabel -OpBranch %135 -%135 = OpLabel -%137 = OpLoad %3 %110 -%139 = OpAccessChain %138 %109 %137 -%140 = OpAtomicLoad %3 %139 %67 %68 -OpStore %111 %140 -OpStore %113 %23 -OpBranch %141 -%141 = OpLabel -OpLoopMerge %142 %144 None -OpBranch %146 -%146 = OpLabel -%147 = OpLoad %40 %145 -%148 = OpIEqual %42 %43 %147 -%149 = OpAll %8 %148 -OpSelectionMerge %150 None -OpBranchConditional %149 %142 %150 -%150 = OpLabel -%151 = OpCompositeExtract %3 %147 1 -%152 = OpIEqual %8 %151 %21 -%153 = OpSelect %3 %152 %26 %21 -%154 = OpCompositeConstruct %40 %153 %26 -%155 = OpISub %40 %147 %154 -OpStore %145 %155 +%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 %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 -%156 = OpLoad %8 %113 -%157 = OpLogicalNot %8 %156 -OpSelectionMerge %158 None -OpBranchConditional %157 %158 %159 -%159 = OpLabel -OpBranch %142 +%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 -OpBranch %160 -%160 = OpLabel -%162 = OpLoad %3 %111 -%163 = OpBitcast %24 %162 -%164 = OpFAdd %24 %163 %25 -%165 = OpBitcast %3 %164 -%166 = OpLoad %3 %110 -%167 = OpLoad %3 %111 -%169 = OpAccessChain %138 %109 %166 -%170 = OpAtomicCompareExchange %3 %169 %67 %98 %101 %165 %167 -%171 = OpIEqual %8 %170 %167 -%168 = OpCompositeConstruct %10 %170 %171 -%172 = OpCompositeExtract %3 %168 0 -OpStore %111 %172 -%173 = OpCompositeExtract %8 %168 1 -OpStore %113 %173 -OpBranch %161 -%161 = OpLabel -OpBranch %144 -%144 = OpLabel OpBranch %141 -%142 = OpLabel -OpBranch %136 -%136 = OpLabel -OpBranch %119 -%119 = OpLabel -%174 = OpLoad %3 %110 -%175 = OpIAdd %3 %174 %26 -OpStore %110 %175 +%141 = OpLabel +OpBranch %138 +%139 = OpLabel +OpBranch %133 +%133 = OpLabel OpBranch %116 -%117 = OpLabel +%116 = OpLabel +%171 = OpLoad %3 %107 +%172 = OpIAdd %3 %171 %26 +OpStore %107 %172 +OpBranch %113 +%114 = OpLabel OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm b/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm index b4fc52d73d5..340416a2abf 100644 --- a/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps-float32.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 64 +; Bound: 61 OpCapability Shader OpCapability AtomicFloat32AddEXT OpExtension "SPV_KHR_storage_buffer_storage_class" @@ -52,11 +52,8 @@ OpDecorate %19 BuiltIn LocalInvocationId %31 = OpConstant %3 1.5 %34 = OpTypeInt 32 1 %33 = OpConstant %34 1 -%35 = OpConstant %6 68 -%36 = OpConstant %6 1 -%40 = OpConstant %6 264 -%42 = OpConstant %6 66 -%50 = OpConstant %6 72 +%35 = OpConstant %6 1 +%39 = OpConstant %6 264 %22 = OpFunction %2 None %23 %18 = OpLabel %21 = OpLoad %8 %19 @@ -65,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 %42 -%43 = OpAccessChain %24 %28 %36 -%44 = OpAtomicLoad %3 %43 %33 %42 -%45 = OpAccessChain %24 %30 %25 -%46 = OpAtomicLoad %3 %45 %33 %42 -%47 = OpAccessChain %24 %30 %36 %36 -%48 = OpAtomicLoad %3 %47 %33 %42 -OpControlBarrier %5 %5 %40 -%49 = OpAtomicFAddEXT %3 %26 %33 %50 %31 -%52 = OpAccessChain %24 %28 %36 -%51 = OpAtomicFAddEXT %3 %52 %33 %50 %31 -%54 = OpAccessChain %24 %30 %25 -%53 = OpAtomicFAddEXT %3 %54 %33 %50 %31 -%56 = OpAccessChain %24 %30 %36 %36 -%55 = OpAtomicFAddEXT %3 %56 %33 %50 %31 -OpControlBarrier %5 %5 %40 -%57 = OpAtomicExchange %3 %26 %33 %50 %31 -%59 = OpAccessChain %24 %28 %36 -%58 = OpAtomicExchange %3 %59 %33 %50 %31 -%61 = OpAccessChain %24 %30 %25 -%60 = OpAtomicExchange %3 %61 %33 %50 %31 -%63 = OpAccessChain %24 %30 %36 %36 -%62 = OpAtomicExchange %3 %63 %33 %50 %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 \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm b/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm index 95f0195362f..aa6f4ef33e2 100644 --- a/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps-int64-min-max.spvasm @@ -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 72 -%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 \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm b/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm index 1d1616d1c39..d3c2b26be9a 100644 --- a/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps-int64.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.0 ; Generator: rspirv -; Bound: 232 +; Bound: 225 OpCapability Shader OpCapability Int64Atomics OpCapability Int64 @@ -75,17 +75,10 @@ OpDecorate %29 BuiltIn LocalInvocationId %55 = OpConstant %7 264 %58 = OpTypeInt 32 1 %57 = OpConstant %58 1 -%59 = OpConstant %7 68 -%60 = OpTypePointer StorageBuffer %4 -%61 = OpConstant %7 1 -%65 = OpConstant %58 2 -%66 = OpConstant %7 260 -%67 = OpTypePointer Workgroup %4 -%72 = OpConstant %7 66 -%80 = OpConstant %7 258 -%88 = OpConstant %7 72 -%203 = OpConstant %7 64 -%219 = OpConstant %7 256 +%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 @@ -107,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 %72 -%73 = OpAccessChain %60 %38 %61 -%74 = OpAtomicLoad %4 %73 %57 %72 -%75 = OpAccessChain %34 %40 %35 -%76 = OpAtomicLoad %3 %75 %57 %72 -%77 = OpAccessChain %60 %40 %61 %61 -%78 = OpAtomicLoad %4 %77 %57 %72 -%79 = OpAtomicLoad %3 %22 %65 %80 -%81 = OpAccessChain %67 %24 %61 -%82 = OpAtomicLoad %4 %81 %65 %80 -%83 = OpAccessChain %23 %26 %35 -%84 = OpAtomicLoad %3 %83 %65 %80 -%85 = OpAccessChain %67 %26 %61 %61 -%86 = OpAtomicLoad %4 %85 %65 %80 +%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 -%87 = OpAtomicIAdd %3 %36 %57 %88 %41 -%90 = OpAccessChain %60 %38 %61 -%89 = OpAtomicIAdd %4 %90 %57 %88 %42 -%92 = OpAccessChain %34 %40 %35 -%91 = OpAtomicIAdd %3 %92 %57 %88 %41 -%94 = OpAccessChain %60 %40 %61 %61 -%93 = OpAtomicIAdd %4 %94 %57 %88 %42 -%95 = OpAtomicIAdd %3 %22 %65 %55 %41 -%97 = OpAccessChain %67 %24 %61 -%96 = OpAtomicIAdd %4 %97 %65 %55 %42 -%99 = OpAccessChain %23 %26 %35 -%98 = OpAtomicIAdd %3 %99 %65 %55 %41 -%101 = OpAccessChain %67 %26 %61 %61 -%100 = OpAtomicIAdd %4 %101 %65 %55 %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 -%102 = OpAtomicISub %3 %36 %57 %88 %41 -%104 = OpAccessChain %60 %38 %61 -%103 = OpAtomicISub %4 %104 %57 %88 %42 -%106 = OpAccessChain %34 %40 %35 -%105 = OpAtomicISub %3 %106 %57 %88 %41 -%108 = OpAccessChain %60 %40 %61 %61 -%107 = OpAtomicISub %4 %108 %57 %88 %42 -%109 = OpAtomicISub %3 %22 %65 %55 %41 -%111 = OpAccessChain %67 %24 %61 -%110 = OpAtomicISub %4 %111 %65 %55 %42 -%113 = OpAccessChain %23 %26 %35 -%112 = OpAtomicISub %3 %113 %65 %55 %41 -%115 = OpAccessChain %67 %26 %61 %61 -%114 = OpAtomicISub %4 %115 %65 %55 %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 -%116 = OpAtomicUMax %3 %36 %57 %88 %41 -%118 = OpAccessChain %60 %38 %61 -%117 = OpAtomicSMax %4 %118 %57 %88 %42 -%120 = OpAccessChain %34 %40 %35 -%119 = OpAtomicUMax %3 %120 %57 %88 %41 -%122 = OpAccessChain %60 %40 %61 %61 -%121 = OpAtomicSMax %4 %122 %57 %88 %42 -%123 = OpAtomicUMax %3 %22 %65 %55 %41 -%125 = OpAccessChain %67 %24 %61 -%124 = OpAtomicSMax %4 %125 %65 %55 %42 -%127 = OpAccessChain %23 %26 %35 -%126 = OpAtomicUMax %3 %127 %65 %55 %41 -%129 = OpAccessChain %67 %26 %61 %61 -%128 = OpAtomicSMax %4 %129 %65 %55 %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 -%130 = OpAtomicUMin %3 %36 %57 %88 %41 -%132 = OpAccessChain %60 %38 %61 -%131 = OpAtomicSMin %4 %132 %57 %88 %42 -%134 = OpAccessChain %34 %40 %35 -%133 = OpAtomicUMin %3 %134 %57 %88 %41 -%136 = OpAccessChain %60 %40 %61 %61 -%135 = OpAtomicSMin %4 %136 %57 %88 %42 -%137 = OpAtomicUMin %3 %22 %65 %55 %41 -%139 = OpAccessChain %67 %24 %61 -%138 = OpAtomicSMin %4 %139 %65 %55 %42 -%141 = OpAccessChain %23 %26 %35 -%140 = OpAtomicUMin %3 %141 %65 %55 %41 -%143 = OpAccessChain %67 %26 %61 %61 -%142 = OpAtomicSMin %4 %143 %65 %55 %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 -%144 = OpAtomicAnd %3 %36 %57 %88 %41 -%146 = OpAccessChain %60 %38 %61 -%145 = OpAtomicAnd %4 %146 %57 %88 %42 -%148 = OpAccessChain %34 %40 %35 -%147 = OpAtomicAnd %3 %148 %57 %88 %41 -%150 = OpAccessChain %60 %40 %61 %61 -%149 = OpAtomicAnd %4 %150 %57 %88 %42 -%151 = OpAtomicAnd %3 %22 %65 %55 %41 -%153 = OpAccessChain %67 %24 %61 -%152 = OpAtomicAnd %4 %153 %65 %55 %42 -%155 = OpAccessChain %23 %26 %35 -%154 = OpAtomicAnd %3 %155 %65 %55 %41 -%157 = OpAccessChain %67 %26 %61 %61 -%156 = OpAtomicAnd %4 %157 %65 %55 %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 -%158 = OpAtomicOr %3 %36 %57 %88 %41 -%160 = OpAccessChain %60 %38 %61 -%159 = OpAtomicOr %4 %160 %57 %88 %42 -%162 = OpAccessChain %34 %40 %35 -%161 = OpAtomicOr %3 %162 %57 %88 %41 -%164 = OpAccessChain %60 %40 %61 %61 -%163 = OpAtomicOr %4 %164 %57 %88 %42 -%165 = OpAtomicOr %3 %22 %65 %55 %41 -%167 = OpAccessChain %67 %24 %61 -%166 = OpAtomicOr %4 %167 %65 %55 %42 -%169 = OpAccessChain %23 %26 %35 -%168 = OpAtomicOr %3 %169 %65 %55 %41 -%171 = OpAccessChain %67 %26 %61 %61 -%170 = OpAtomicOr %4 %171 %65 %55 %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 -%172 = OpAtomicXor %3 %36 %57 %88 %41 -%174 = OpAccessChain %60 %38 %61 -%173 = OpAtomicXor %4 %174 %57 %88 %42 -%176 = OpAccessChain %34 %40 %35 -%175 = OpAtomicXor %3 %176 %57 %88 %41 -%178 = OpAccessChain %60 %40 %61 %61 -%177 = OpAtomicXor %4 %178 %57 %88 %42 -%179 = OpAtomicXor %3 %22 %65 %55 %41 -%181 = OpAccessChain %67 %24 %61 -%180 = OpAtomicXor %4 %181 %65 %55 %42 -%183 = OpAccessChain %23 %26 %35 -%182 = OpAtomicXor %3 %183 %65 %55 %41 -%185 = OpAccessChain %67 %26 %61 %61 -%184 = OpAtomicXor %4 %185 %65 %55 %42 -%186 = OpAtomicExchange %3 %36 %57 %88 %41 -%188 = OpAccessChain %60 %38 %61 -%187 = OpAtomicExchange %4 %188 %57 %88 %42 -%190 = OpAccessChain %34 %40 %35 -%189 = OpAtomicExchange %3 %190 %57 %88 %41 -%192 = OpAccessChain %60 %40 %61 %61 -%191 = OpAtomicExchange %4 %192 %57 %88 %42 -%193 = OpAtomicExchange %3 %22 %65 %55 %41 -%195 = OpAccessChain %67 %24 %61 -%194 = OpAtomicExchange %4 %195 %65 %55 %42 -%197 = OpAccessChain %23 %26 %35 -%196 = OpAtomicExchange %3 %197 %65 %55 %41 -%199 = OpAccessChain %67 %26 %61 %61 -%198 = OpAtomicExchange %4 %199 %65 %55 %42 -%201 = OpAtomicCompareExchange %3 %36 %57 %88 %203 %43 %41 -%202 = OpIEqual %10 %201 %41 -%200 = OpCompositeConstruct %11 %201 %202 -%205 = OpAccessChain %60 %38 %61 -%206 = OpAtomicCompareExchange %4 %205 %57 %88 %203 %44 %42 -%207 = OpIEqual %10 %206 %42 -%204 = OpCompositeConstruct %12 %206 %207 -%209 = OpAccessChain %34 %40 %35 -%210 = OpAtomicCompareExchange %3 %209 %57 %88 %203 %43 %41 -%211 = OpIEqual %10 %210 %41 -%208 = OpCompositeConstruct %11 %210 %211 -%213 = OpAccessChain %60 %40 %61 %61 -%214 = OpAtomicCompareExchange %4 %213 %57 %88 %203 %44 %42 -%215 = OpIEqual %10 %214 %42 -%212 = OpCompositeConstruct %12 %214 %215 -%217 = OpAtomicCompareExchange %3 %22 %65 %55 %219 %43 %41 -%218 = OpIEqual %10 %217 %41 -%216 = OpCompositeConstruct %11 %217 %218 -%221 = OpAccessChain %67 %24 %61 -%222 = OpAtomicCompareExchange %4 %221 %65 %55 %219 %44 %42 -%223 = OpIEqual %10 %222 %42 -%220 = OpCompositeConstruct %12 %222 %223 -%225 = OpAccessChain %23 %26 %35 -%226 = OpAtomicCompareExchange %3 %225 %65 %55 %219 %43 %41 -%227 = OpIEqual %10 %226 %41 -%224 = OpCompositeConstruct %11 %226 %227 -%229 = OpAccessChain %67 %26 %61 %61 -%230 = OpAtomicCompareExchange %4 %229 %65 %55 %219 %44 %42 -%231 = OpIEqual %10 %230 %42 -%228 = OpCompositeConstruct %12 %230 %231 +%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 \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicOps.spvasm b/naga/tests/out/spv/wgsl-atomicOps.spvasm index 9b3b190714c..839200d7694 100644 --- a/naga/tests/out/spv/wgsl-atomicOps.spvasm +++ b/naga/tests/out/spv/wgsl-atomicOps.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 226 +; Bound: 219 OpCapability Shader OpExtension "SPV_KHR_storage_buffer_storage_class" %1 = OpExtInstImport "GLSL.std.450" @@ -69,15 +69,8 @@ OpDecorate %28 BuiltIn LocalInvocationId %47 = OpConstantNull %8 %48 = OpTypeVector %9 3 %53 = OpConstant %3 264 -%55 = OpConstant %3 68 -%56 = OpTypePointer StorageBuffer %4 -%60 = OpConstant %3 260 -%61 = OpTypePointer Workgroup %4 -%66 = OpConstant %3 66 -%74 = OpConstant %3 258 -%82 = OpConstant %3 72 -%197 = OpConstant %3 64 -%213 = OpConstant %3 256 +%55 = OpTypePointer StorageBuffer %4 +%59 = OpTypePointer Workgroup %4 %31 = OpFunction %2 None %32 %27 = OpLabel %30 = OpLoad %8 %28 @@ -99,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 %66 -%67 = OpAccessChain %56 %37 %40 -%68 = OpAtomicLoad %4 %67 %41 %66 -%69 = OpAccessChain %33 %39 %34 -%70 = OpAtomicLoad %3 %69 %41 %66 -%71 = OpAccessChain %56 %39 %40 %40 -%72 = OpAtomicLoad %4 %71 %41 %66 -%73 = OpAtomicLoad %3 %21 %42 %74 -%75 = OpAccessChain %61 %23 %40 -%76 = OpAtomicLoad %4 %75 %42 %74 -%77 = OpAccessChain %22 %25 %34 -%78 = OpAtomicLoad %3 %77 %42 %74 -%79 = OpAccessChain %61 %25 %40 %40 -%80 = OpAtomicLoad %4 %79 %42 %74 +%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 -%81 = OpAtomicIAdd %3 %35 %41 %82 %40 -%84 = OpAccessChain %56 %37 %40 -%83 = OpAtomicIAdd %4 %84 %41 %82 %41 -%86 = OpAccessChain %33 %39 %34 -%85 = OpAtomicIAdd %3 %86 %41 %82 %40 -%88 = OpAccessChain %56 %39 %40 %40 -%87 = OpAtomicIAdd %4 %88 %41 %82 %41 -%89 = OpAtomicIAdd %3 %21 %42 %53 %40 -%91 = OpAccessChain %61 %23 %40 -%90 = OpAtomicIAdd %4 %91 %42 %53 %41 -%93 = OpAccessChain %22 %25 %34 -%92 = OpAtomicIAdd %3 %93 %42 %53 %40 -%95 = OpAccessChain %61 %25 %40 %40 -%94 = OpAtomicIAdd %4 %95 %42 %53 %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 -%96 = OpAtomicISub %3 %35 %41 %82 %40 -%98 = OpAccessChain %56 %37 %40 -%97 = OpAtomicISub %4 %98 %41 %82 %41 -%100 = OpAccessChain %33 %39 %34 -%99 = OpAtomicISub %3 %100 %41 %82 %40 -%102 = OpAccessChain %56 %39 %40 %40 -%101 = OpAtomicISub %4 %102 %41 %82 %41 -%103 = OpAtomicISub %3 %21 %42 %53 %40 -%105 = OpAccessChain %61 %23 %40 -%104 = OpAtomicISub %4 %105 %42 %53 %41 -%107 = OpAccessChain %22 %25 %34 -%106 = OpAtomicISub %3 %107 %42 %53 %40 -%109 = OpAccessChain %61 %25 %40 %40 -%108 = OpAtomicISub %4 %109 %42 %53 %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 -%110 = OpAtomicUMax %3 %35 %41 %82 %40 -%112 = OpAccessChain %56 %37 %40 -%111 = OpAtomicSMax %4 %112 %41 %82 %41 -%114 = OpAccessChain %33 %39 %34 -%113 = OpAtomicUMax %3 %114 %41 %82 %40 -%116 = OpAccessChain %56 %39 %40 %40 -%115 = OpAtomicSMax %4 %116 %41 %82 %41 -%117 = OpAtomicUMax %3 %21 %42 %53 %40 -%119 = OpAccessChain %61 %23 %40 -%118 = OpAtomicSMax %4 %119 %42 %53 %41 -%121 = OpAccessChain %22 %25 %34 -%120 = OpAtomicUMax %3 %121 %42 %53 %40 -%123 = OpAccessChain %61 %25 %40 %40 -%122 = OpAtomicSMax %4 %123 %42 %53 %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 -%124 = OpAtomicUMin %3 %35 %41 %82 %40 -%126 = OpAccessChain %56 %37 %40 -%125 = OpAtomicSMin %4 %126 %41 %82 %41 -%128 = OpAccessChain %33 %39 %34 -%127 = OpAtomicUMin %3 %128 %41 %82 %40 -%130 = OpAccessChain %56 %39 %40 %40 -%129 = OpAtomicSMin %4 %130 %41 %82 %41 -%131 = OpAtomicUMin %3 %21 %42 %53 %40 -%133 = OpAccessChain %61 %23 %40 -%132 = OpAtomicSMin %4 %133 %42 %53 %41 -%135 = OpAccessChain %22 %25 %34 -%134 = OpAtomicUMin %3 %135 %42 %53 %40 -%137 = OpAccessChain %61 %25 %40 %40 -%136 = OpAtomicSMin %4 %137 %42 %53 %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 -%138 = OpAtomicAnd %3 %35 %41 %82 %40 -%140 = OpAccessChain %56 %37 %40 -%139 = OpAtomicAnd %4 %140 %41 %82 %41 -%142 = OpAccessChain %33 %39 %34 -%141 = OpAtomicAnd %3 %142 %41 %82 %40 -%144 = OpAccessChain %56 %39 %40 %40 -%143 = OpAtomicAnd %4 %144 %41 %82 %41 -%145 = OpAtomicAnd %3 %21 %42 %53 %40 -%147 = OpAccessChain %61 %23 %40 -%146 = OpAtomicAnd %4 %147 %42 %53 %41 -%149 = OpAccessChain %22 %25 %34 -%148 = OpAtomicAnd %3 %149 %42 %53 %40 -%151 = OpAccessChain %61 %25 %40 %40 -%150 = OpAtomicAnd %4 %151 %42 %53 %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 -%152 = OpAtomicOr %3 %35 %41 %82 %40 -%154 = OpAccessChain %56 %37 %40 -%153 = OpAtomicOr %4 %154 %41 %82 %41 -%156 = OpAccessChain %33 %39 %34 -%155 = OpAtomicOr %3 %156 %41 %82 %40 -%158 = OpAccessChain %56 %39 %40 %40 -%157 = OpAtomicOr %4 %158 %41 %82 %41 -%159 = OpAtomicOr %3 %21 %42 %53 %40 -%161 = OpAccessChain %61 %23 %40 -%160 = OpAtomicOr %4 %161 %42 %53 %41 -%163 = OpAccessChain %22 %25 %34 -%162 = OpAtomicOr %3 %163 %42 %53 %40 -%165 = OpAccessChain %61 %25 %40 %40 -%164 = OpAtomicOr %4 %165 %42 %53 %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 -%166 = OpAtomicXor %3 %35 %41 %82 %40 -%168 = OpAccessChain %56 %37 %40 -%167 = OpAtomicXor %4 %168 %41 %82 %41 -%170 = OpAccessChain %33 %39 %34 -%169 = OpAtomicXor %3 %170 %41 %82 %40 -%172 = OpAccessChain %56 %39 %40 %40 -%171 = OpAtomicXor %4 %172 %41 %82 %41 -%173 = OpAtomicXor %3 %21 %42 %53 %40 -%175 = OpAccessChain %61 %23 %40 -%174 = OpAtomicXor %4 %175 %42 %53 %41 -%177 = OpAccessChain %22 %25 %34 -%176 = OpAtomicXor %3 %177 %42 %53 %40 -%179 = OpAccessChain %61 %25 %40 %40 -%178 = OpAtomicXor %4 %179 %42 %53 %41 -%180 = OpAtomicExchange %3 %35 %41 %82 %40 -%182 = OpAccessChain %56 %37 %40 -%181 = OpAtomicExchange %4 %182 %41 %82 %41 -%184 = OpAccessChain %33 %39 %34 -%183 = OpAtomicExchange %3 %184 %41 %82 %40 -%186 = OpAccessChain %56 %39 %40 %40 -%185 = OpAtomicExchange %4 %186 %41 %82 %41 -%187 = OpAtomicExchange %3 %21 %42 %53 %40 -%189 = OpAccessChain %61 %23 %40 -%188 = OpAtomicExchange %4 %189 %42 %53 %41 -%191 = OpAccessChain %22 %25 %34 -%190 = OpAtomicExchange %3 %191 %42 %53 %40 -%193 = OpAccessChain %61 %25 %40 %40 -%192 = OpAtomicExchange %4 %193 %42 %53 %41 -%195 = OpAtomicCompareExchange %3 %35 %41 %82 %197 %6 %40 -%196 = OpIEqual %9 %195 %40 -%194 = OpCompositeConstruct %10 %195 %196 -%199 = OpAccessChain %56 %37 %40 -%200 = OpAtomicCompareExchange %4 %199 %41 %82 %197 %42 %41 -%201 = OpIEqual %9 %200 %41 -%198 = OpCompositeConstruct %11 %200 %201 -%203 = OpAccessChain %33 %39 %34 -%204 = OpAtomicCompareExchange %3 %203 %41 %82 %197 %6 %40 -%205 = OpIEqual %9 %204 %40 -%202 = OpCompositeConstruct %10 %204 %205 -%207 = OpAccessChain %56 %39 %40 %40 -%208 = OpAtomicCompareExchange %4 %207 %41 %82 %197 %42 %41 -%209 = OpIEqual %9 %208 %41 -%206 = OpCompositeConstruct %11 %208 %209 -%211 = OpAtomicCompareExchange %3 %21 %42 %53 %213 %6 %40 -%212 = OpIEqual %9 %211 %40 -%210 = OpCompositeConstruct %10 %211 %212 -%215 = OpAccessChain %61 %23 %40 -%216 = OpAtomicCompareExchange %4 %215 %42 %53 %213 %42 %41 -%217 = OpIEqual %9 %216 %41 -%214 = OpCompositeConstruct %11 %216 %217 -%219 = OpAccessChain %22 %25 %34 -%220 = OpAtomicCompareExchange %3 %219 %42 %53 %213 %6 %40 -%221 = OpIEqual %9 %220 %40 -%218 = OpCompositeConstruct %10 %220 %221 -%223 = OpAccessChain %61 %25 %40 %40 -%224 = OpAtomicCompareExchange %4 %223 %42 %53 %213 %42 %41 -%225 = OpIEqual %9 %224 %41 -%222 = OpCompositeConstruct %11 %224 %225 +%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 \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm b/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm index 6dcdf035d2b..f10dbbab62f 100644 --- a/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm +++ b/naga/tests/out/spv/wgsl-atomicTexture-int64.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.0 ; Generator: rspirv -; Bound: 32 +; Bound: 31 OpCapability Shader OpCapability Int64ImageEXT OpCapability Int64 @@ -32,9 +32,8 @@ OpDecorate %12 BuiltIn LocalInvocationId %22 = OpTypePointer Image %4 %24 = OpConstant %6 0 %26 = OpConstant %8 1 -%27 = OpConstant %6 2056 -%28 = OpConstant %6 2 -%29 = OpConstant %6 264 +%27 = OpConstant %6 2 +%28 = OpConstant %6 264 %15 = OpFunction %2 None %16 %11 = OpLabel %14 = OpLoad %5 %12 @@ -42,9 +41,9 @@ OpDecorate %12 BuiltIn LocalInvocationId OpBranch %21 %21 = OpLabel %23 = OpImageTexelPointer %22 %9 %19 %24 -%25 = OpAtomicUMax %4 %23 %26 %27 %20 -OpControlBarrier %28 %28 %29 -%30 = OpImageTexelPointer %22 %9 %19 %24 -%31 = OpAtomicUMin %4 %30 %26 %27 %20 +%25 = OpAtomicUMax %4 %23 %26 %24 %20 +OpControlBarrier %27 %27 %28 +%29 = OpImageTexelPointer %22 %9 %19 %24 +%30 = OpAtomicUMin %4 %29 %26 %24 %20 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-atomicTexture.spvasm b/naga/tests/out/spv/wgsl-atomicTexture.spvasm index 9d15be7bcdd..3a3e83a6a27 100644 --- a/naga/tests/out/spv/wgsl-atomicTexture.spvasm +++ b/naga/tests/out/spv/wgsl-atomicTexture.spvasm @@ -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 %4 2056 -%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 %24 %30 %23 -%31 = OpImageTexelPointer %26 %9 %22 %28 -%32 = OpAtomicUMin %4 %31 %24 %30 %23 -%33 = OpImageTexelPointer %26 %9 %22 %28 -%34 = OpAtomicIAdd %4 %33 %24 %30 %23 -%35 = OpImageTexelPointer %26 %9 %22 %28 -%36 = OpAtomicAnd %4 %35 %24 %30 %23 -%37 = OpImageTexelPointer %26 %9 %22 %28 -%38 = OpAtomicOr %4 %37 %24 %30 %23 -%39 = OpImageTexelPointer %26 %9 %22 %28 -%40 = OpAtomicXor %4 %39 %24 %30 %23 -%42 = OpImageTexelPointer %41 %11 %22 %28 -%43 = OpAtomicSMax %6 %42 %24 %30 %24 -%44 = OpImageTexelPointer %41 %11 %22 %28 -%45 = OpAtomicSMin %6 %44 %24 %30 %24 -%46 = OpImageTexelPointer %41 %11 %22 %28 -%47 = OpAtomicIAdd %6 %46 %24 %30 %24 -%48 = OpImageTexelPointer %41 %11 %22 %28 -%49 = OpAtomicAnd %6 %48 %24 %30 %24 -%50 = OpImageTexelPointer %41 %11 %22 %28 -%51 = OpAtomicOr %6 %50 %24 %30 %24 -%52 = OpImageTexelPointer %41 %11 %22 %28 -%53 = OpAtomicXor %6 %52 %24 %30 %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 \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-globals.spvasm b/naga/tests/out/spv/wgsl-globals.spvasm index 9fb83f4a5be..1b5c7a3122a 100644 --- a/naga/tests/out/spv/wgsl-globals.spvasm +++ b/naga/tests/out/spv/wgsl-globals.spvasm @@ -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 260 %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 \ No newline at end of file diff --git a/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm b/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm index 7ce6317340b..45e71af552b 100644 --- a/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm +++ b/naga/tests/out/spv/wgsl-overrides-atomicCompareExchangeWeak.f.spvasm @@ -28,7 +28,7 @@ OpDecorate %18 BuiltIn LocalInvocationId %21 = OpConstantNull %17 %22 = OpTypeVector %5 3 %27 = OpConstant %4 264 -%32 = OpConstant %4 256 +%30 = OpConstant %4 0 %11 = OpFunction %2 None %12 %10 = OpLabel OpBranch %15 @@ -45,8 +45,8 @@ OpBranch %25 OpControlBarrier %13 %13 %27 OpBranch %28 %28 = OpLabel -%30 = OpAtomicCompareExchange %4 %8 %7 %27 %32 %14 %13 -%31 = OpIEqual %5 %30 %13 -%29 = OpCompositeConstruct %6 %30 %31 +%31 = OpAtomicCompareExchange %4 %8 %7 %30 %30 %14 %13 +%32 = OpIEqual %5 %31 %13 +%29 = OpCompositeConstruct %6 %31 %32 OpReturn OpFunctionEnd \ No newline at end of file