summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-05-30 17:51:42 +0200
committerGitHub <noreply@github.com>2020-05-30 17:51:42 +0200
commit058ec22787a6d3e41c3dfabd2060a1b723594374 (patch)
tree0c9498d5e104ce52c2e50f1a0020a97516924d06 /src/video_core/shader
parentMerge pull request #4017 from ogniK5377/xbyak (diff)
parentshader/other: Implement MEMBAR.CTS (diff)
downloadyuzu-058ec22787a6d3e41c3dfabd2060a1b723594374.tar
yuzu-058ec22787a6d3e41c3dfabd2060a1b723594374.tar.gz
yuzu-058ec22787a6d3e41c3dfabd2060a1b723594374.tar.bz2
yuzu-058ec22787a6d3e41c3dfabd2060a1b723594374.tar.lz
yuzu-058ec22787a6d3e41c3dfabd2060a1b723594374.tar.xz
yuzu-058ec22787a6d3e41c3dfabd2060a1b723594374.tar.zst
yuzu-058ec22787a6d3e41c3dfabd2060a1b723594374.zip
Diffstat (limited to 'src/video_core/shader')
-rw-r--r--src/video_core/shader/decode/other.cpp14
-rw-r--r--src/video_core/shader/node.h5
2 files changed, 15 insertions, 4 deletions
diff --git a/src/video_core/shader/decode/other.cpp b/src/video_core/shader/decode/other.cpp
index 694b325e1..d00e10913 100644
--- a/src/video_core/shader/decode/other.cpp
+++ b/src/video_core/shader/decode/other.cpp
@@ -299,9 +299,19 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
break;
}
case OpCode::Id::MEMBAR: {
- UNIMPLEMENTED_IF(instr.membar.type != Tegra::Shader::MembarType::GL);
UNIMPLEMENTED_IF(instr.membar.unknown != Tegra::Shader::MembarUnknown::Default);
- bb.push_back(Operation(OperationCode::MemoryBarrierGL));
+ const OperationCode type = [instr] {
+ switch (instr.membar.type) {
+ case Tegra::Shader::MembarType::CTA:
+ return OperationCode::MemoryBarrierGroup;
+ case Tegra::Shader::MembarType::GL:
+ return OperationCode::MemoryBarrierGlobal;
+ default:
+ UNIMPLEMENTED_MSG("MEMBAR type={}", static_cast<int>(instr.membar.type.Value()));
+ return OperationCode::MemoryBarrierGlobal;
+ }
+ }();
+ bb.push_back(Operation(type));
break;
}
case OpCode::Id::DEPBAR: {
diff --git a/src/video_core/shader/node.h b/src/video_core/shader/node.h
index c06512413..c5e5165ff 100644
--- a/src/video_core/shader/node.h
+++ b/src/video_core/shader/node.h
@@ -233,8 +233,9 @@ enum class OperationCode {
ThreadLtMask, /// () -> uint
ShuffleIndexed, /// (uint value, uint index) -> uint
- Barrier, /// () -> void
- MemoryBarrierGL, /// () -> void
+ Barrier, /// () -> void
+ MemoryBarrierGroup, /// () -> void
+ MemoryBarrierGlobal, /// () -> void
Amount,
};