System: Periodically flush GPU

Needs real timings...
This commit is contained in:
Connor McLaughlin 2019-09-14 23:49:55 +10:00
parent 03bd135060
commit 77b15d156d
3 changed files with 23 additions and 3 deletions

View file

@ -178,6 +178,12 @@ void GPU::DMAWrite(u32 value)
}
}
void GPU::Flush()
{
FlushRender();
UpdateDisplay();
}
u32 GPU::ReadGPUREAD()
{
if (m_GPUREAD_buffer.empty())
@ -312,6 +318,14 @@ void GPU::WriteGP1(u32 value)
const u32 param = value & UINT32_C(0x00FFFFFF);
switch (command)
{
case 0x01: // Clear FIFO
{
m_GP0_command.clear();
Log_DebugPrintf("GP1 clear FIFO");
UpdateGPUSTAT();
}
break;
case 0x04: // DMA Direction
{
m_GPUSTAT.dma_direction = static_cast<DMADirection>(param);
@ -409,8 +423,6 @@ bool GPU::HandleRenderCommand()
ZeroExtend32(words_per_vertex));
DispatchRenderCommand(rc, num_vertices);
//FlushRender();
//UpdateDisplay();
return true;
}

View file

@ -31,6 +31,8 @@ public:
// gpu_hw_opengl.cpp
static std::unique_ptr<GPU> CreateHardwareOpenGLRenderer();
void Flush();
protected:
static constexpr u32 VRAM_WIDTH = 1024;
static constexpr u32 VRAM_HEIGHT = 512;

View file

@ -75,8 +75,14 @@ bool System::SaveState(ByteStream* state)
void System::RunFrame()
{
u32 current_frame_number = m_frame_number;
while (current_frame_number == m_frame_number)
u32 ticks = 0;
while (current_frame_number == m_frame_number && ticks < (44100 * 300))
{
m_cpu->Execute();
ticks++;
}
m_gpu->Flush();
}
bool System::LoadEXE(const char* filename)