summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/shader_ir.cpp
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-07-16 20:58:35 +0200
committerGitHub <noreply@github.com>2019-07-16 20:58:35 +0200
commitb56e7f870add41d0300745342d24315e8fa3f881 (patch)
tree13f920af2c14ab8ae89bb3d9751c885c60789c03 /src/video_core/shader/shader_ir.cpp
parentMerge pull request #2695 from ReinUsesLisp/layer-viewport (diff)
parentshader: Allow tracking of indirect buffers without variable offset (diff)
downloadyuzu-b56e7f870add41d0300745342d24315e8fa3f881.tar
yuzu-b56e7f870add41d0300745342d24315e8fa3f881.tar.gz
yuzu-b56e7f870add41d0300745342d24315e8fa3f881.tar.bz2
yuzu-b56e7f870add41d0300745342d24315e8fa3f881.tar.lz
yuzu-b56e7f870add41d0300745342d24315e8fa3f881.tar.xz
yuzu-b56e7f870add41d0300745342d24315e8fa3f881.tar.zst
yuzu-b56e7f870add41d0300745342d24315e8fa3f881.zip
Diffstat (limited to 'src/video_core/shader/shader_ir.cpp')
-rw-r--r--src/video_core/shader/shader_ir.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/video_core/shader/shader_ir.cpp b/src/video_core/shader/shader_ir.cpp
index caa409788..78bd1cf1e 100644
--- a/src/video_core/shader/shader_ir.cpp
+++ b/src/video_core/shader/shader_ir.cpp
@@ -61,7 +61,16 @@ Node ShaderIR::GetConstBufferIndirect(u64 index_, u64 offset_, Node node) {
const auto [entry, is_new] = used_cbufs.try_emplace(index);
entry->second.MarkAsUsedIndirect();
- const Node final_offset = Operation(OperationCode::UAdd, NO_PRECISE, node, Immediate(offset));
+ const Node final_offset = [&]() {
+ // Attempt to inline constant buffer without a variable offset. This is done to allow
+ // tracking LDC calls.
+ if (const auto gpr = std::get_if<GprNode>(&*node)) {
+ if (gpr->GetIndex() == Register::ZeroIndex) {
+ return Immediate(offset);
+ }
+ }
+ return Operation(OperationCode::UAdd, NO_PRECISE, node, Immediate(offset));
+ }();
return MakeNode<CbufNode>(index, final_offset);
}