|
|
@ -1280,13 +1280,13 @@ private: |
|
|
header.ps.IsColorComponentOutputEnabled(render_target, 1) || |
|
|
header.ps.IsColorComponentOutputEnabled(render_target, 1) || |
|
|
header.ps.IsColorComponentOutputEnabled(render_target, 2) || |
|
|
header.ps.IsColorComponentOutputEnabled(render_target, 2) || |
|
|
header.ps.IsColorComponentOutputEnabled(render_target, 3)) { |
|
|
header.ps.IsColorComponentOutputEnabled(render_target, 3)) { |
|
|
shader.AddLine(fmt::format("if ({} < alpha_testing_ref) discard;", |
|
|
|
|
|
|
|
|
shader.AddLine(fmt::format("if (AlphaFunc({}, alpha_testing_ref, alpha_testing_func)) discard;", |
|
|
regs.GetRegisterAsFloat(current_reg))); |
|
|
regs.GetRegisterAsFloat(current_reg))); |
|
|
current_reg += 4; |
|
|
current_reg += 4; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
--shader.scope; |
|
|
--shader.scope; |
|
|
shader.AddLine("}"); |
|
|
|
|
|
|
|
|
shader.AddLine('}'); |
|
|
|
|
|
|
|
|
// Write the color outputs using the data in the shader registers, disabled
|
|
|
// Write the color outputs using the data in the shader registers, disabled
|
|
|
// rendertargets/components are skipped in the register assignment.
|
|
|
// rendertargets/components are skipped in the register assignment.
|
|
|
@ -3505,6 +3505,38 @@ private: |
|
|
declarations.AddLine("bool " + pred + " = false;"); |
|
|
declarations.AddLine("bool " + pred + " = false;"); |
|
|
} |
|
|
} |
|
|
declarations.AddNewLine(); |
|
|
declarations.AddNewLine(); |
|
|
|
|
|
GenerateFunctionDeclarations(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void GenerateFunctionDeclarations() { |
|
|
|
|
|
if (stage == Maxwell3D::Regs::ShaderStage::Fragment) { |
|
|
|
|
|
declarations.AddLine("bool AlphaFunc(in float value, in float ref, in uint func) {"); |
|
|
|
|
|
declarations.scope++; |
|
|
|
|
|
declarations.AddLine("switch (func) {"); |
|
|
|
|
|
declarations.scope++; |
|
|
|
|
|
declarations.AddLine("case 1:"); |
|
|
|
|
|
declarations.AddLine("return false;"); |
|
|
|
|
|
declarations.AddLine("case 2:"); |
|
|
|
|
|
declarations.AddLine("return value < ref;"); |
|
|
|
|
|
declarations.AddLine("case 3:"); |
|
|
|
|
|
declarations.AddLine("return value == ref;"); |
|
|
|
|
|
declarations.AddLine("case 4:"); |
|
|
|
|
|
declarations.AddLine("return value <= ref;"); |
|
|
|
|
|
declarations.AddLine("case 5:"); |
|
|
|
|
|
declarations.AddLine("return value > ref;"); |
|
|
|
|
|
declarations.AddLine("case 6:"); |
|
|
|
|
|
declarations.AddLine("return value != ref;"); |
|
|
|
|
|
declarations.AddLine("case 7:"); |
|
|
|
|
|
declarations.AddLine("return value >= ref;"); |
|
|
|
|
|
declarations.AddLine("case 8:"); |
|
|
|
|
|
declarations.AddLine("return true;"); |
|
|
|
|
|
declarations.AddLine("default:"); |
|
|
|
|
|
declarations.AddLine("return false;"); |
|
|
|
|
|
declarations.scope--; |
|
|
|
|
|
declarations.AddLine('}'); |
|
|
|
|
|
declarations.scope--; |
|
|
|
|
|
declarations.AddLine('}'); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private: |
|
|
private: |
|
|
|