summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-01-19 16:37:39 -0300
committerGravatar ReinUsesLisp2020-01-19 16:40:31 -0300
commitb2c976ad0e5dbbcae16c419628c144a7f28e0d17 (patch)
tree3a6d9f254c6ad48a4466b99634562df1ad0c2678
parentMerge pull request #3317 from ReinUsesLisp/gl-decomp-cc-decomp (diff)
downloadyuzu-b2c976ad0e5dbbcae16c419628c144a7f28e0d17.tar.gz
yuzu-b2c976ad0e5dbbcae16c419628c144a7f28e0d17.tar.xz
yuzu-b2c976ad0e5dbbcae16c419628c144a7f28e0d17.zip
vk_shader_decompiler: Implement UAtomicAdd (ATOMS) on SPIR-V
Also updates sirit to include atomic instructions.
Diffstat (limited to '')
m---------externals/sirit0
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_decompiler.cpp14
2 files changed, 11 insertions, 3 deletions
diff --git a/externals/sirit b/externals/sirit
Subproject 9f4d057aa28c4e9509bdc767afb27b4aee303b7 Subproject a712959f1e373a33b48042b5934e288a243d595
diff --git a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
index 0cf97cafa..dd6d2ef03 100644
--- a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
+++ b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
@@ -1796,9 +1796,17 @@ private:
1796 return {}; 1796 return {};
1797 } 1797 }
1798 1798
1799 Expression UAtomicAdd(Operation) { 1799 Expression UAtomicAdd(Operation operation) {
1800 UNIMPLEMENTED(); 1800 const auto& smem = std::get<SmemNode>(*operation[0]);
1801 return {}; 1801 Id address = AsUint(Visit(smem.GetAddress()));
1802 address = OpShiftRightLogical(t_uint, address, Constant(t_uint, 2U));
1803 const Id pointer = OpAccessChain(t_smem_uint, shared_memory, address);
1804
1805 const Id scope = Constant(t_uint, static_cast<u32>(spv::Scope::Device));
1806 const Id semantics = Constant(t_uint, 0U);
1807
1808 const Id value = AsUint(Visit(operation[1]));
1809 return {OpAtomicIAdd(t_uint, pointer, scope, semantics, value), Type::Uint};
1802 } 1810 }
1803 1811
1804 Expression Branch(Operation operation) { 1812 Expression Branch(Operation operation) {