Skip to content

Commit

Permalink
Merge pull request #4322 from Helios747/I_hate_features
Browse files Browse the repository at this point in the history
Remove Frameskip
  • Loading branch information
degasus committed Oct 8, 2016
2 parents 8b38d5a + b427ead commit a86b2c1
Show file tree
Hide file tree
Showing 20 changed files with 82 additions and 203 deletions.
15 changes: 0 additions & 15 deletions Source/Core/Core/BootManager.cpp
Expand Up @@ -56,7 +56,6 @@ struct ConfigCache
// alone on restore (false)
bool bSetEmulationSpeed;
bool bSetVolume;
bool bSetFrameSkip;
std::array<bool, MAX_BBMOTES> bSetWiimoteSource;
std::array<bool, MAX_SI_CHANNELS> bSetPads;
std::array<bool, MAX_EXI_CHANNELS> bSetEXIDevice;
Expand All @@ -80,7 +79,6 @@ struct ConfigCache
int iSelectedLanguage;
int iCPUCore;
int Volume;
unsigned int frameSkip;
float m_EmulationSpeed;
std::string strBackend;
std::string sBackend;
Expand Down Expand Up @@ -112,7 +110,6 @@ void ConfigCache::SaveConfig(const SConfig& config)
iCPUCore = config.iCPUCore;
Volume = config.m_Volume;
m_EmulationSpeed = config.m_EmulationSpeed;
frameSkip = config.m_FrameSkip;
strBackend = config.m_strVideoBackend;
sBackend = config.sBackend;
m_strGPUDeterminismMode = config.m_strGPUDeterminismMode;
Expand All @@ -123,7 +120,6 @@ void ConfigCache::SaveConfig(const SConfig& config)

bSetEmulationSpeed = false;
bSetVolume = false;
bSetFrameSkip = false;
bSetWiimoteSource.fill(false);
bSetPads.fill(false);
bSetEXIDevice.fill(false);
Expand Down Expand Up @@ -182,12 +178,6 @@ void ConfigCache::RestoreConfig(SConfig* config)
if (bSetEmulationSpeed)
config->m_EmulationSpeed = m_EmulationSpeed;

if (bSetFrameSkip)
{
config->m_FrameSkip = frameSkip;
Movie::SetFrameSkipping(frameSkip);
}

for (unsigned int i = 0; i < MAX_EXI_CHANNELS; ++i)
{
if (bSetEXIDevice[i])
Expand Down Expand Up @@ -264,11 +254,6 @@ bool BootCore(const std::string& _rFilename)
if (core_section->Get("EmulationSpeed", &SConfig::GetInstance().m_EmulationSpeed,
SConfig::GetInstance().m_EmulationSpeed))
config_cache.bSetEmulationSpeed = true;
if (core_section->Get("FrameSkip", &SConfig::GetInstance().m_FrameSkip))
{
config_cache.bSetFrameSkip = true;
Movie::SetFrameSkipping(SConfig::GetInstance().m_FrameSkip);
}

if (dsp_section->Get("Volume", &SConfig::GetInstance().m_Volume,
SConfig::GetInstance().m_Volume))
Expand Down
38 changes: 0 additions & 38 deletions Source/Core/Core/Movie.cpp
Expand Up @@ -44,17 +44,13 @@
// The chunk to allocate movie data in multiples of.
#define DTM_BASE_LENGTH (1024)

static std::mutex cs_frameSkip;

namespace Movie
{
static bool s_bFrameStep = false;
static bool s_bReadOnly = true;
static u32 s_rerecords = 0;
static PlayMode s_playMode = MODE_NONE;

static u32 s_framesToSkip = 0, s_frameSkipCounter = 0;

static u8 s_numPads = 0;
static ControllerState s_padState;
static DTMHeader tmpHeader;
Expand Down Expand Up @@ -211,9 +207,6 @@ void FrameUpdate()
CPU::Break();
}

if (s_framesToSkip)
FrameSkipping();

s_bPolled = false;
}

Expand Down Expand Up @@ -247,7 +240,6 @@ void Init()
s_tickCountAtLastInput = 0;
}

s_frameSkipCounter = s_framesToSkip;
memset(&s_padState, 0, sizeof(s_padState));
if (!tmpHeader.bFromSaveState || !IsPlayingInput())
Core::SetStateFileName("");
Expand Down Expand Up @@ -278,20 +270,6 @@ void InputUpdate()
}
}

// NOTE: Host Thread
void SetFrameSkipping(unsigned int framesToSkip)
{
std::lock_guard<std::mutex> lk(cs_frameSkip);

s_framesToSkip = framesToSkip;
s_frameSkipCounter = 0;

// Don't forget to re-enable rendering in case it wasn't...
// as this won't be changed anymore when frameskip is turned off
if (framesToSkip == 0)
Fifo::SetRendering(true);
}

// NOTE: CPU Thread
void SetPolledDevice()
{
Expand Down Expand Up @@ -324,22 +302,6 @@ void SetReadOnly(bool bEnabled)
s_bReadOnly = bEnabled;
}

// NOTE: GPU Thread
void FrameSkipping()
{
// Frameskipping will desync movie playback
if (!Core::g_want_determinism)
{
std::lock_guard<std::mutex> lk(cs_frameSkip);

s_frameSkipCounter++;
if (s_frameSkipCounter > s_framesToSkip || Core::ShouldSkipFrame(s_frameSkipCounter) == false)
s_frameSkipCounter = 0;

Fifo::SetRendering(!s_frameSkipCounter);
}
}

bool IsRecordingInput()
{
return (s_playMode == MODE_RECORDING);
Expand Down
3 changes: 0 additions & 3 deletions Source/Core/Core/Movie.h
Expand Up @@ -158,9 +158,6 @@ void ChangeWiiPads(bool instantly = false);
void DoFrameStep();
void SetReadOnly(bool bEnabled);

void SetFrameSkipping(unsigned int framesToSkip);
void FrameSkipping();

bool BeginRecordingInput(int controllers);
void RecordInput(GCPadStatus* PadStatus, int controllerID);
void RecordWiimote(int wiimote, u8* data, u8 size);
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/State.cpp
Expand Up @@ -71,7 +71,7 @@ static Common::Event g_compressAndDumpStateSyncEvent;
static std::thread g_save_thread;

// Don't forget to increase this after doing changes on the savestate system
static const u32 STATE_VERSION = 62; // Last changed in PR 4195
static const u32 STATE_VERSION = 63; // Last changed in PR 4322

// Maps savestate versions to Dolphin versions.
// Versions after 42 don't need to be added to this list,
Expand Down
1 change: 0 additions & 1 deletion Source/Core/DolphinWX/Frame.cpp
Expand Up @@ -307,7 +307,6 @@ EVT_MENU_RANGE(IDM_LOAD_SLOT_1, IDM_LOAD_SLOT_10, CFrame::OnLoadState)
EVT_MENU_RANGE(IDM_LOAD_LAST_1, IDM_LOAD_LAST_10, CFrame::OnLoadLastState)
EVT_MENU_RANGE(IDM_SAVE_SLOT_1, IDM_SAVE_SLOT_10, CFrame::OnSaveState)
EVT_MENU_RANGE(IDM_SELECT_SLOT_1, IDM_SELECT_SLOT_10, CFrame::OnSelectSlot)
EVT_MENU_RANGE(IDM_FRAME_SKIP_0, IDM_FRAME_SKIP_9, CFrame::OnFrameSkip)
EVT_MENU_RANGE(IDM_DRIVE1, IDM_DRIVE24, CFrame::OnBootDrive)
EVT_MENU_RANGE(IDM_CONNECT_WIIMOTE1, IDM_CONNECT_BALANCEBOARD, CFrame::OnConnectWiimote)
EVT_MENU_RANGE(IDM_LIST_WAD, IDM_LIST_DRIVES, CFrame::GameListChanged)
Expand Down
1 change: 0 additions & 1 deletion Source/Core/DolphinWX/Frame.h
Expand Up @@ -283,7 +283,6 @@ class CFrame : public CRenderFrame
void OnUndoLoadState(wxCommandEvent& event);
void OnUndoSaveState(wxCommandEvent& event);

void OnFrameSkip(wxCommandEvent& event);
void OnFrameStep(wxCommandEvent& event);

void OnConfigMain(wxCommandEvent& event); // Options
Expand Down
15 changes: 0 additions & 15 deletions Source/Core/DolphinWX/FrameTools.cpp
Expand Up @@ -135,13 +135,6 @@ wxMenuBar* CFrame::CreateMenu()
emulationMenu->Append(IDM_TOGGLE_FULLSCREEN, GetMenuLabel(HK_FULLSCREEN));
emulationMenu->Append(IDM_FRAMESTEP, GetMenuLabel(HK_FRAME_ADVANCE), wxEmptyString);

wxMenu* skippingMenu = new wxMenu;
emulationMenu->AppendSubMenu(skippingMenu, _("Frame S&kipping"));
for (int i = 0; i < 10; i++)
skippingMenu->AppendRadioItem(IDM_FRAME_SKIP_0 + i, wxString::Format("%i", i));
skippingMenu->Check(IDM_FRAME_SKIP_0 + SConfig::GetInstance().m_FrameSkip, true);
Movie::SetFrameSkipping(SConfig::GetInstance().m_FrameSkip);

emulationMenu->AppendSeparator();
emulationMenu->Append(IDM_SCREENSHOT, GetMenuLabel(HK_SCREENSHOT));

Expand Down Expand Up @@ -1643,14 +1636,6 @@ void CFrame::OnSaveState(wxCommandEvent& event)
}
}

void CFrame::OnFrameSkip(wxCommandEvent& event)
{
int amount = event.GetId() - IDM_FRAME_SKIP_0;

Movie::SetFrameSkipping((unsigned int)amount);
SConfig::GetInstance().m_FrameSkip = amount;
}

void CFrame::OnSelectSlot(wxCommandEvent& event)
{
m_saveSlot = event.GetId() - IDM_SELECT_SLOT_1 + 1;
Expand Down
10 changes: 0 additions & 10 deletions Source/Core/DolphinWX/Globals.h
Expand Up @@ -73,16 +73,6 @@ enum
IDM_SELECT_SLOT_10,
IDM_SAVE_SELECTED_SLOT,
IDM_LOAD_SELECTED_SLOT,
IDM_FRAME_SKIP_0,
IDM_FRAME_SKIP_1,
IDM_FRAME_SKIP_2,
IDM_FRAME_SKIP_3,
IDM_FRAME_SKIP_4,
IDM_FRAME_SKIP_5,
IDM_FRAME_SKIP_6,
IDM_FRAME_SKIP_7,
IDM_FRAME_SKIP_8,
IDM_FRAME_SKIP_9,
IDM_PLAY,
IDM_STOP,
IDM_RESET,
Expand Down
3 changes: 1 addition & 2 deletions Source/Core/VideoBackends/D3D/Render.cpp
Expand Up @@ -749,8 +749,7 @@ bool Renderer::SaveScreenshot(const std::string& filename, const TargetRectangle
void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight,
const EFBRectangle& rc, float Gamma)
{
if (Fifo::WillSkipCurrentFrame() || (!XFBWrited && !g_ActiveConfig.RealXFBEnabled()) ||
!fbWidth || !fbHeight)
if ((!XFBWrited && !g_ActiveConfig.RealXFBEnabled()) || !fbWidth || !fbHeight)
{
Core::Callback_VideoCopiedToXFB(false);
return;
Expand Down
3 changes: 1 addition & 2 deletions Source/Core/VideoBackends/D3D12/Render.cpp
Expand Up @@ -692,8 +692,7 @@ bool Renderer::SaveScreenshot(const std::string& filename, const TargetRectangle
void Renderer::SwapImpl(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height,
const EFBRectangle& rc, float gamma)
{
if (Fifo::WillSkipCurrentFrame() || (!XFBWrited && !g_ActiveConfig.RealXFBEnabled()) ||
!fb_width || !fb_height)
if ((!XFBWrited && !g_ActiveConfig.RealXFBEnabled()) || !fb_width || !fb_height)
{
Core::Callback_VideoCopiedToXFB(false);
return;
Expand Down
3 changes: 1 addition & 2 deletions Source/Core/VideoBackends/OGL/Render.cpp
Expand Up @@ -1350,8 +1350,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight,
glDisable(GL_DEBUG_OUTPUT);
}

if (Fifo::WillSkipCurrentFrame() || (!XFBWrited && !g_ActiveConfig.RealXFBEnabled()) ||
!fbWidth || !fbHeight)
if ((!XFBWrited && !g_ActiveConfig.RealXFBEnabled()) || !fbWidth || !fbHeight)
{
Core::Callback_VideoCopiedToXFB(false);
return;
Expand Down
46 changes: 19 additions & 27 deletions Source/Core/VideoBackends/Software/DebugUtil.cpp
Expand Up @@ -192,40 +192,32 @@ void CopyTempBuffer(s16 x, s16 y, int bufferBase, int subBuffer, const char* nam

void OnObjectBegin()
{
if (!Fifo::WillSkipCurrentFrame())
{
if (g_ActiveConfig.bDumpTextures &&
stats.thisFrame.numDrawnObjects >= g_ActiveConfig.drawStart &&
stats.thisFrame.numDrawnObjects < g_ActiveConfig.drawEnd)
DumpActiveTextures();
}
if (g_ActiveConfig.bDumpTextures && stats.thisFrame.numDrawnObjects >= g_ActiveConfig.drawStart &&
stats.thisFrame.numDrawnObjects < g_ActiveConfig.drawEnd)
DumpActiveTextures();
}

void OnObjectEnd()
{
if (!Fifo::WillSkipCurrentFrame())
{
if (g_ActiveConfig.bDumpObjects &&
stats.thisFrame.numDrawnObjects >= g_ActiveConfig.drawStart &&
stats.thisFrame.numDrawnObjects < g_ActiveConfig.drawEnd)
DumpEfb(StringFromFormat("%sobject%i.png", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(),
stats.thisFrame.numDrawnObjects));
if (g_ActiveConfig.bDumpObjects && stats.thisFrame.numDrawnObjects >= g_ActiveConfig.drawStart &&
stats.thisFrame.numDrawnObjects < g_ActiveConfig.drawEnd)
DumpEfb(StringFromFormat("%sobject%i.png", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(),
stats.thisFrame.numDrawnObjects));

for (int i = 0; i < NUM_OBJECT_BUFFERS; i++)
for (int i = 0; i < NUM_OBJECT_BUFFERS; i++)
{
if (DrawnToBuffer[i])
{
if (DrawnToBuffer[i])
{
DrawnToBuffer[i] = false;
std::string filename = StringFromFormat(
"%sobject%i_%s(%i).png", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(),
stats.thisFrame.numDrawnObjects, ObjectBufferName[i], i - BufferBase[i]);

TextureToPng((u8*)ObjectBuffer[i], EFB_WIDTH * 4, filename, EFB_WIDTH, EFB_HEIGHT, true);
memset(ObjectBuffer[i], 0, EFB_WIDTH * EFB_HEIGHT * sizeof(u32));
}
}
DrawnToBuffer[i] = false;
std::string filename =
StringFromFormat("%sobject%i_%s(%i).png", File::GetUserPath(D_DUMPFRAMES_IDX).c_str(),
stats.thisFrame.numDrawnObjects, ObjectBufferName[i], i - BufferBase[i]);

stats.thisFrame.numDrawnObjects++;
TextureToPng((u8*)ObjectBuffer[i], EFB_WIDTH * 4, filename, EFB_WIDTH, EFB_HEIGHT, true);
memset(ObjectBuffer[i], 0, EFB_WIDTH * EFB_HEIGHT * sizeof(u32));
}
}

stats.thisFrame.numDrawnObjects++;
}
}
41 changes: 19 additions & 22 deletions Source/Core/VideoBackends/Software/EfbCopy.cpp
Expand Up @@ -67,34 +67,31 @@ void CopyEfb()
rc.right = rc.left + (int)bpmem.copyTexSrcWH.x + 1;
rc.bottom = rc.top + (int)bpmem.copyTexSrcWH.y + 1;

if (!Fifo::WillSkipCurrentFrame())
if (bpmem.triggerEFBCopy.copy_to_xfb)
{
if (bpmem.triggerEFBCopy.copy_to_xfb)
{
float yScale;
if (bpmem.triggerEFBCopy.scale_invert)
yScale = 256.0f / (float)bpmem.dispcopyyscale;
else
yScale = (float)bpmem.dispcopyyscale / 256.0f;

float xfbLines = ((bpmem.copyTexSrcWH.y + 1.0f) * yScale);
float yScale;
if (bpmem.triggerEFBCopy.scale_invert)
yScale = 256.0f / (float)bpmem.dispcopyyscale;
else
yScale = (float)bpmem.dispcopyyscale / 256.0f;

if (yScale != 1.0)
WARN_LOG(VIDEO, "yScale of %f is currently unsupported", yScale);
float xfbLines = ((bpmem.copyTexSrcWH.y + 1.0f) * yScale);

if ((u32)xfbLines > MAX_XFB_HEIGHT)
{
INFO_LOG(VIDEO, "Tried to scale EFB to too many XFB lines (%f)", xfbLines);
xfbLines = MAX_XFB_HEIGHT;
}
if (yScale != 1.0)
WARN_LOG(VIDEO, "yScale of %f is currently unsupported", yScale);

CopyToXfb(bpmem.copyTexDest << 5, bpmem.copyMipMapStrideChannels << 4, (u32)xfbLines, rc,
s_gammaLUT[bpmem.triggerEFBCopy.gamma]);
}
else
if ((u32)xfbLines > MAX_XFB_HEIGHT)
{
CopyToRam(); // FIXME: should use the rectangle we have already created above
INFO_LOG(VIDEO, "Tried to scale EFB to too many XFB lines (%f)", xfbLines);
xfbLines = MAX_XFB_HEIGHT;
}

CopyToXfb(bpmem.copyTexDest << 5, bpmem.copyMipMapStrideChannels << 4, (u32)xfbLines, rc,
s_gammaLUT[bpmem.triggerEFBCopy.gamma]);
}
else
{
CopyToRam(); // FIXME: should use the rectangle we have already created above
}
}
}

0 comments on commit a86b2c1

Please sign in to comment.