VI: Restore forced-progressive hack with option

Bugfix: TargetRefreshRate uses rounded result
NTSC's 59.94 was becoming 59 with integer division.
This commit is contained in:
booto 2015-07-27 20:04:03 +08:00
parent 480dbb22f2
commit acc9a74174
3 changed files with 20 additions and 7 deletions

View File

@ -18,6 +18,7 @@
#include "Core/PowerPC/PowerPC.h" #include "Core/PowerPC/PowerPC.h"
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
#include "VideoCommon/VideoConfig.h"
namespace VideoInterface namespace VideoInterface
{ {
@ -520,7 +521,7 @@ void UpdateParameters()
s_even_field_last_hl = s_odd_field_first_hl - 1; s_even_field_last_hl = s_odd_field_first_hl - 1;
s_odd_field_last_hl = s_odd_field_first_hl + GetHalfLinesPerOddField() - 1; s_odd_field_last_hl = s_odd_field_first_hl + GetHalfLinesPerOddField() - 1;
TargetRefreshRate = 2 * SystemTimers::GetTicksPerSecond() / (GetTicksPerEvenField() + GetTicksPerOddField()); TargetRefreshRate = lround(2.0 * SystemTimers::GetTicksPerSecond() / (GetTicksPerEvenField() + GetTicksPerOddField()));
} }
u32 GetTicksPerHalfLine() u32 GetTicksPerHalfLine()
@ -564,13 +565,21 @@ static void BeginField(FieldType field)
u32 xfbAddr; u32 xfbAddr;
if (field == FieldType::FIELD_EVEN) if (g_ActiveConfig.bForceProgressive && (multiplier == 2)) {
{ if (m_VBlankTimingOdd.PRB < m_VBlankTimingEven.PRB)
xfbAddr = GetXFBAddressTop(); xfbAddr = GetXFBAddressTop();
else
xfbAddr = GetXFBAddressBottom();
} }
else else {
{ if (field == FieldType::FIELD_EVEN)
xfbAddr = GetXFBAddressBottom(); {
xfbAddr = GetXFBAddressTop();
}
else
{
xfbAddr = GetXFBAddressBottom();
}
} }
static const char* const fieldTypeNames[] = { "Odd", "Even" }; static const char* const fieldTypeNames[] = { "Odd", "Even" };

View File

@ -99,6 +99,7 @@ void VideoConfig::Load(const std::string& ini_file)
IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks"); IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks");
hacks->Get("EFBAccessEnable", &bEFBAccessEnable, true); hacks->Get("EFBAccessEnable", &bEFBAccessEnable, true);
hacks->Get("BBoxEnable", &bBBoxEnable, false); hacks->Get("BBoxEnable", &bBBoxEnable, false);
hacks->Get("ForceProgressive", &bForceProgressive, true);
hacks->Get("EFBToTextureEnable", &bSkipEFBCopyToRam, true); hacks->Get("EFBToTextureEnable", &bSkipEFBCopyToRam, true);
hacks->Get("EFBScaledCopy", &bCopyEFBScaled, true); hacks->Get("EFBScaledCopy", &bCopyEFBScaled, true);
hacks->Get("EFBEmulateFormatChanges", &bEFBEmulateFormatChanges, false); hacks->Get("EFBEmulateFormatChanges", &bEFBEmulateFormatChanges, false);
@ -204,6 +205,7 @@ void VideoConfig::GameIniLoad()
CHECK_SETTING("Video_Hacks", "EFBAccessEnable", bEFBAccessEnable); CHECK_SETTING("Video_Hacks", "EFBAccessEnable", bEFBAccessEnable);
CHECK_SETTING("Video_Hacks", "BBoxEnable", bBBoxEnable); CHECK_SETTING("Video_Hacks", "BBoxEnable", bBBoxEnable);
CHECK_SETTING("Video_Hacks", "ForceProgressive", bForceProgressive);
CHECK_SETTING("Video_Hacks", "EFBToTextureEnable", bSkipEFBCopyToRam); CHECK_SETTING("Video_Hacks", "EFBToTextureEnable", bSkipEFBCopyToRam);
CHECK_SETTING("Video_Hacks", "EFBScaledCopy", bCopyEFBScaled); CHECK_SETTING("Video_Hacks", "EFBScaledCopy", bCopyEFBScaled);
CHECK_SETTING("Video_Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges); CHECK_SETTING("Video_Hacks", "EFBEmulateFormatChanges", bEFBEmulateFormatChanges);
@ -293,6 +295,7 @@ void VideoConfig::Save(const std::string& ini_file)
IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks"); IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks");
hacks->Set("EFBAccessEnable", bEFBAccessEnable); hacks->Set("EFBAccessEnable", bEFBAccessEnable);
hacks->Set("BBoxEnable", bBBoxEnable); hacks->Set("BBoxEnable", bBBoxEnable);
hacks->Set("ForceProgressive", bForceProgressive);
hacks->Set("EFBToTextureEnable", bSkipEFBCopyToRam); hacks->Set("EFBToTextureEnable", bSkipEFBCopyToRam);
hacks->Set("EFBScaledCopy", bCopyEFBScaled); hacks->Set("EFBScaledCopy", bCopyEFBScaled);
hacks->Set("EFBEmulateFormatChanges", bEFBEmulateFormatChanges); hacks->Set("EFBEmulateFormatChanges", bEFBEmulateFormatChanges);

View File

@ -112,6 +112,7 @@ struct VideoConfig final
bool bEFBAccessEnable; bool bEFBAccessEnable;
bool bPerfQueriesEnable; bool bPerfQueriesEnable;
bool bBBoxEnable; bool bBBoxEnable;
bool bForceProgressive;
bool bEFBEmulateFormatChanges; bool bEFBEmulateFormatChanges;
bool bSkipEFBCopyToRam; bool bSkipEFBCopyToRam;