diff options
author | FernandoS27 <fsahmkow27@gmail.com> | 2021-04-02 19:27:30 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:26 +0200 |
commit | 655f7a570a10218ffb2ed175bb7f0b84530ccae0 (patch) | |
tree | bb95bc316718bd5c746a0b28084b3548a4aea222 /src/shader_recompiler/frontend/maxwell/translate/impl/barrier_operations.cpp | |
parent | shader: Improve VOTE.VTG stub (diff) | |
download | yuzu-655f7a570a10218ffb2ed175bb7f0b84530ccae0.tar yuzu-655f7a570a10218ffb2ed175bb7f0b84530ccae0.tar.gz yuzu-655f7a570a10218ffb2ed175bb7f0b84530ccae0.tar.bz2 yuzu-655f7a570a10218ffb2ed175bb7f0b84530ccae0.tar.lz yuzu-655f7a570a10218ffb2ed175bb7f0b84530ccae0.tar.xz yuzu-655f7a570a10218ffb2ed175bb7f0b84530ccae0.tar.zst yuzu-655f7a570a10218ffb2ed175bb7f0b84530ccae0.zip |
Diffstat (limited to '')
-rw-r--r-- | src/shader_recompiler/frontend/maxwell/translate/impl/barrier_operations.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/barrier_operations.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/barrier_operations.cpp new file mode 100644 index 000000000..933af572c --- /dev/null +++ b/src/shader_recompiler/frontend/maxwell/translate/impl/barrier_operations.cpp @@ -0,0 +1,56 @@ +// Copyright 2021 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/bit_field.h" +#include "common/common_types.h" +#include "shader_recompiler/frontend/ir/modifiers.h" +#include "shader_recompiler/frontend/maxwell/translate/impl/impl.h" +#include "shader_recompiler/frontend/maxwell/opcodes.h" + +namespace Shader::Maxwell { +namespace { +// Seems to be in CUDA terminology. +enum class LocalScope : u64 { + CTG = 0, + GL = 1, + SYS = 2, + VC = 3, +}; + +IR::MemoryScope LocalScopeToMemoryScope(LocalScope scope) { + switch (scope) { + case LocalScope::CTG: + return IR::MemoryScope::Warp; + case LocalScope::GL: + return IR::MemoryScope::Device; + case LocalScope::SYS: + return IR::MemoryScope::System; + case LocalScope::VC: + return IR::MemoryScope::Workgroup; // or should be device? + default: + throw NotImplementedException("Unimplemented Local Scope {}", scope); + } +} + +} // namespace + +void TranslatorVisitor::MEMBAR(u64 inst) { + union { + u64 raw; + BitField<8, 2, LocalScope> scope; + } membar{inst}; + IR::BarrierInstInfo info{}; + info.scope.Assign(LocalScopeToMemoryScope(membar.scope)); + ir.MemoryBarrier(info); +} + +void TranslatorVisitor::DEPBAR() { + // DEPBAR is a no-op +} + +void TranslatorVisitor::BAR(u64) { + throw NotImplementedException("Instruction {} is not implemented", Opcode::BAR); +} + +} // namespace Shader::Maxwell |