mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 18:54:14 +01:00 
			
		
		
		
	vk_shader_decompiler: Implement UAtomicAdd (ATOMS) on SPIR-V
Also updates sirit to include atomic instructions.
This commit is contained in:
		
							parent
							
								
									51c8aea979
								
							
						
					
					
						commit
						b2c976ad0e
					
				
							
								
								
									
										2
									
								
								externals/sirit
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
								
							
						
						
									
										2
									
								
								externals/sirit
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | ||||
| Subproject commit 9f4d057aa28c4e9509bdc767afb27b4aee303b7e | ||||
| Subproject commit a712959f1e373a33b48042b5934e288a243d5954 | ||||
| @ -1796,9 +1796,17 @@ private: | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|     Expression UAtomicAdd(Operation) { | ||||
|         UNIMPLEMENTED(); | ||||
|         return {}; | ||||
|     Expression UAtomicAdd(Operation operation) { | ||||
|         const auto& smem = std::get<SmemNode>(*operation[0]); | ||||
|         Id address = AsUint(Visit(smem.GetAddress())); | ||||
|         address = OpShiftRightLogical(t_uint, address, Constant(t_uint, 2U)); | ||||
|         const Id pointer = OpAccessChain(t_smem_uint, shared_memory, address); | ||||
| 
 | ||||
|         const Id scope = Constant(t_uint, static_cast<u32>(spv::Scope::Device)); | ||||
|         const Id semantics = Constant(t_uint, 0U); | ||||
| 
 | ||||
|         const Id value = AsUint(Visit(operation[1])); | ||||
|         return {OpAtomicIAdd(t_uint, pointer, scope, semantics, value), Type::Uint}; | ||||
|     } | ||||
| 
 | ||||
|     Expression Branch(Operation operation) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user