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:
parent
480dbb22f2
commit
acc9a74174
|
@ -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" };
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue