aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-09-23 22:55:25 -0400
committerFernandoS27 <fsahmkow27@gmail.com>2019-10-25 09:01:30 -0400
commit8909f52166bf9c27d52b5a722efbd46d1a11e876 (patch)
tree2e21bbc3c3f5422325d8003d72cdb4bb120a26e5 /src/video_core/renderer_vulkan
parentacd64411342e70bd7e9f7156f62c3b1a609ac3c4 (diff)
Shader_IR: Implement Fast BRX and allow multi-branches in the CFG.
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_decompiler.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
index 0d943a826..42cf068b6 100644
--- a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
+++ b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
@@ -1704,6 +1704,13 @@ public:
return expr.value ? decomp.v_true : decomp.v_false;
}
+ Id operator()(const ExprGprEqual& expr) {
+ const Id target = decomp.Constant(decomp.t_uint, expr.value);
+ const Id gpr = decomp.BitcastTo<Type::Uint>(
+ decomp.Emit(decomp.OpLoad(decomp.t_float, decomp.registers.at(expr.gpr))));
+ return decomp.Emit(decomp.OpLogicalEqual(decomp.t_uint, gpr, target));
+ }
+
Id Visit(const Expr& node) {
return std::visit(*this, *node);
}