summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-06-03 18:05:26 +0200
committerGitHub <noreply@github.com>2018-06-03 18:05:26 +0200
commit27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316 (patch)
tree82f2c9aacfb30b88fc1f6aa9fa30597ad799ac8c /src/video_core/renderer_opengl
parentMerge pull request #484 from mailwl/nvhost-nvdec (diff)
parentgl_shader_decompiler: Implement RRO as a register move. (diff)
downloadyuzu-27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316.tar
yuzu-27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316.tar.gz
yuzu-27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316.tar.bz2
yuzu-27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316.tar.lz
yuzu-27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316.tar.xz
yuzu-27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316.tar.zst
yuzu-27c0f9e02dc3ebff9a82a9d9c7a6c6cf80a16316.zip
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 68efe74b8..cb4b68b26 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -792,8 +792,13 @@ private:
1, 1);
break;
}
- case OpCode::Id::RRO: {
- NGLOG_DEBUG(HW_GPU, "Skipping RRO instruction");
+ case OpCode::Id::RRO_C:
+ case OpCode::Id::RRO_R:
+ case OpCode::Id::RRO_IMM: {
+ // Currently RRO is only implemented as a register move.
+ // Usage of `abs_b` and `negate_b` here should also be correct.
+ regs.SetRegisterToFloat(instr.gpr0, 0, op_b, 1, 1);
+ NGLOG_WARNING(HW_GPU, "RRO instruction is incomplete");
break;
}
default: {
@@ -897,8 +902,8 @@ private:
const std::string op_b = regs.GetRegisterAsFloat(instr.gpr20);
const std::string sampler = GetSampler(instr.sampler);
const std::string coord = "vec2 coords = vec2(" + op_a + ", " + op_b + ");";
- // Add an extra scope and declare the texture coords inside to prevent overwriting
- // them in case they are used as outputs of the texs instruction.
+ // Add an extra scope and declare the texture coords inside to prevent
+ // overwriting them in case they are used as outputs of the texs instruction.
shader.AddLine("{");
++shader.scope;
shader.AddLine(coord);
@@ -961,8 +966,8 @@ private:
'(' + predicate + ") " + combiner + " (" + second_pred + ')');
if (instr.fsetp.pred0 != static_cast<u64>(Pred::UnusedIndex)) {
- // Set the secondary predicate to the result of !Predicate OP SecondPredicate, if
- // enabled
+ // Set the secondary predicate to the result of !Predicate OP SecondPredicate,
+ // if enabled
SetPredicate(instr.fsetp.pred0,
"!(" + predicate + ") " + combiner + " (" + second_pred + ')');
}