mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-10 17:01:24 +12:00
rsx: Fix alpha test on VK/GL
Moving alpha test outside of fp_main. This enforces alpha test is still done even if shader asm has early return
This commit is contained in:
parent
7233640cf0
commit
3a9428a88e
2 changed files with 42 additions and 42 deletions
|
@ -348,6 +348,26 @@ void GLFragmentDecompilerThread::insertMainEnd(std::stringstream & OS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OS << "}\n\n";
|
||||||
|
|
||||||
|
OS << "void main()\n";
|
||||||
|
OS << "{\n";
|
||||||
|
|
||||||
|
std::string parameters = "";
|
||||||
|
for (auto ®_name : output_values)
|
||||||
|
{
|
||||||
|
if (m_parr.HasParam(PF_PARAM_NONE, "vec4", reg_name))
|
||||||
|
{
|
||||||
|
if (parameters.length())
|
||||||
|
parameters += ", ";
|
||||||
|
|
||||||
|
parameters += reg_name;
|
||||||
|
OS << " vec4 " << reg_name << " = vec4(0.);\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OS << "\n" << " fs_main(" + parameters + ");\n\n";
|
||||||
|
|
||||||
if (!first_output_name.empty())
|
if (!first_output_name.empty())
|
||||||
{
|
{
|
||||||
auto make_comparison_test = [](rsx::comparison_function compare_func, const std::string &test, const std::string &a, const std::string &b) -> std::string
|
auto make_comparison_test = [](rsx::comparison_function compare_func, const std::string &test, const std::string &a, const std::string &b) -> std::string
|
||||||
|
@ -381,29 +401,9 @@ void GLFragmentDecompilerThread::insertMainEnd(std::stringstream & OS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OS << " if (alpha_test != 0 && !comparison_passes(" << first_output_name << ".a, alpha_ref, alpha_func)) discard;\n";
|
OS << " if (alpha_test != 0 && !comparison_passes(" << first_output_name << ".a, alpha_ref, alpha_func)) discard;\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
OS << "}\n\n";
|
|
||||||
|
|
||||||
OS << "void main()\n";
|
|
||||||
OS << "{\n";
|
|
||||||
|
|
||||||
std::string parameters = "";
|
|
||||||
for (auto ®_name : output_values)
|
|
||||||
{
|
|
||||||
if (m_parr.HasParam(PF_PARAM_NONE, "vec4", reg_name))
|
|
||||||
{
|
|
||||||
if (parameters.length())
|
|
||||||
parameters += ", ";
|
|
||||||
|
|
||||||
parameters += reg_name;
|
|
||||||
OS << " vec4 " << reg_name << " = vec4(0.);\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
OS << "\n" << " fs_main(" + parameters + ");\n\n";
|
|
||||||
|
|
||||||
//Append the color output assignments
|
//Append the color output assignments
|
||||||
OS << color_output_block;
|
OS << color_output_block;
|
||||||
|
|
||||||
|
|
|
@ -340,6 +340,26 @@ void VKFragmentDecompilerThread::insertMainEnd(std::stringstream & OS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OS << "}\n\n";
|
||||||
|
|
||||||
|
OS << "void main()\n";
|
||||||
|
OS << "{\n";
|
||||||
|
|
||||||
|
std::string parameters = "";
|
||||||
|
for (auto ®_name : output_values)
|
||||||
|
{
|
||||||
|
if (m_parr.HasParam(PF_PARAM_NONE, "vec4", reg_name))
|
||||||
|
{
|
||||||
|
if (parameters.length())
|
||||||
|
parameters += ", ";
|
||||||
|
|
||||||
|
parameters += reg_name;
|
||||||
|
OS << " vec4 " << reg_name << " = vec4(0.);\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OS << "\n" << " fs_main(" + parameters + ");\n\n";
|
||||||
|
|
||||||
if (!first_output_name.empty())
|
if (!first_output_name.empty())
|
||||||
{
|
{
|
||||||
auto make_comparison_test = [](rsx::comparison_function compare_func, const std::string &test, const std::string &a, const std::string &b) -> std::string
|
auto make_comparison_test = [](rsx::comparison_function compare_func, const std::string &test, const std::string &a, const std::string &b) -> std::string
|
||||||
|
@ -373,29 +393,9 @@ void VKFragmentDecompilerThread::insertMainEnd(std::stringstream & OS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OS << " if (alpha_test != 0 && !comparison_passes(" << first_output_name << ".a, alpha_ref, alpha_func)) discard;\n";
|
OS << " if (alpha_test != 0 && !comparison_passes(" << first_output_name << ".a, alpha_ref, alpha_func)) discard;\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
OS << "}\n\n";
|
|
||||||
|
|
||||||
OS << "void main()\n";
|
|
||||||
OS << "{\n";
|
|
||||||
|
|
||||||
std::string parameters = "";
|
|
||||||
for (auto ®_name : output_values)
|
|
||||||
{
|
|
||||||
if (m_parr.HasParam(PF_PARAM_NONE, "vec4", reg_name))
|
|
||||||
{
|
|
||||||
if (parameters.length())
|
|
||||||
parameters += ", ";
|
|
||||||
|
|
||||||
parameters += reg_name;
|
|
||||||
OS << " vec4 " << reg_name << " = vec4(0.);\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
OS << "\n" << " fs_main(" + parameters + ");\n\n";
|
|
||||||
|
|
||||||
//Append the color output assignments
|
//Append the color output assignments
|
||||||
OS << color_output_block;
|
OS << color_output_block;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue