Compare commits

...

1 Commits

Author SHA1 Message Date
Fernando Sahmkow
9ef0ce1a89 Improved accuracy of IPA instruction 2018-12-11 19:32:04 -04:00

View File

@@ -955,6 +955,9 @@ private:
const Tegra::Shader::IpaInterpMode interp_mode =
declr_input_attribute[attribute].interpolation_mode;
std::string out;
if (stage != Maxwell3D::Regs::ShaderStage::Fragment) {
return out;
}
switch (interp_mode) {
case Tegra::Shader::IpaInterpMode::Flat: {
out += "flat ";
@@ -965,7 +968,7 @@ private:
break;
}
case Tegra::Shader::IpaInterpMode::Perspective: {
// Default, Smooth
out += "noperspective "; // perspective correction is done later
break;
}
default: {
@@ -3661,6 +3664,12 @@ private:
regs.SetRegisterToInputAttibute(reg, attribute.element, attribute.index,
input_mode);
if (input_mode.interpolation_mode == Tegra::Shader::IpaInterpMode::Perspective) {
const std::string value = '(' + regs.GetRegisterAsFloat(reg) + " * " +
regs.GetRegisterAsFloat(instr.gpr20) + ')';
regs.SetRegisterToFloat(reg, 0, value, 1, 1);
}
if (instr.ipa.saturate) {
regs.SetRegisterToFloat(reg, 0, regs.GetRegisterAsFloat(reg), 1, 1, true);
}
@@ -3916,4 +3925,4 @@ std::optional<ProgramResult> DecompileProgram(const ProgramCode& program_code, u
return {};
}
} // namespace OpenGL::GLShader::Decompiler
} // namespace OpenGL::GLShader::Decompiler