diff options
| author | 2020-01-19 16:37:39 -0300 | |
|---|---|---|
| committer | 2020-01-19 16:40:31 -0300 | |
| commit | b2c976ad0e5dbbcae16c419628c144a7f28e0d17 (patch) | |
| tree | 3a6d9f254c6ad48a4466b99634562df1ad0c2678 | |
| parent | Merge pull request #3317 from ReinUsesLisp/gl-decomp-cc-decomp (diff) | |
| download | yuzu-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/sirit | 0 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_shader_decompiler.cpp | 14 |
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) { |