From 528b2d6c7b00019617192a6ea8ca1711397458ec Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 26 Sep 2016 21:59:38 +0800 Subject: [PATCH] GL/Vulkan: not discard fragment when hits NEVER comparsion (#2156) GL/Vulkan: return no operation when comparison is never --- rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp | 6 ++---- rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp | 8 +++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp index d0abd4f9d5..ab853903fe 100644 --- a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp @@ -349,10 +349,6 @@ void GLFragmentDecompilerThread::insertMainEnd(std::stringstream & OS) { auto make_comparison_test = [](rsx::comparison_function compare_func, const std::string &test, const std::string &a, const std::string &b) -> std::string { - if (compare_func == rsx::comparison_function::always) return{}; - - if (compare_func == rsx::comparison_function::never) return " discard;\n"; - std::string compare; switch (compare_func) { @@ -362,6 +358,8 @@ void GLFragmentDecompilerThread::insertMainEnd(std::stringstream & OS) case rsx::comparison_function::less: compare = " < "; break; case rsx::comparison_function::greater: compare = " > "; break; case rsx::comparison_function::greater_or_equal: compare = " >= "; break; + default: + return ""; } return " if (" + test + "!(" + a + compare + b + ")) discard;\n"; diff --git a/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp b/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp index a8cf14a99f..965d59c553 100644 --- a/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp +++ b/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp @@ -356,10 +356,6 @@ void VKFragmentDecompilerThread::insertMainEnd(std::stringstream & OS) { auto make_comparison_test = [](rsx::comparison_function compare_func, const std::string &test, const std::string &a, const std::string &b) -> std::string { - if (compare_func == rsx::comparison_function::always) return{}; - - if (compare_func == rsx::comparison_function::never) return " discard;\n"; - std::string compare; switch (compare_func) { @@ -368,7 +364,9 @@ void VKFragmentDecompilerThread::insertMainEnd(std::stringstream & OS) case rsx::comparison_function::less_or_equal: compare = " <= "; break; case rsx::comparison_function::less: compare = " < "; break; case rsx::comparison_function::greater: compare = " > "; break; - case rsx::comparison_function::greater_or_equal: compare = " >= "; break; + case rsx::comparison_function::greater_or_equal: compare = " >= "; break; + default: + return ""; } return " if (" + test + "!(" + a + compare + b + ")) discard;\n";