From 668830365d940aa3a8fd7fd474a99c78c55cb2a8 Mon Sep 17 00:00:00 2001 From: Henrik Rydgard Date: Fri, 8 Jan 2016 01:05:52 +0100 Subject: [PATCH] Begin/End frame fixes --- GPU/Vulkan/GPU_Vulkan.cpp | 69 ++++++++++++++++++++------------------- GPU/Vulkan/GPU_Vulkan.h | 4 +++ 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/GPU/Vulkan/GPU_Vulkan.cpp b/GPU/Vulkan/GPU_Vulkan.cpp index d9d4d116dd..eb196c53cc 100644 --- a/GPU/Vulkan/GPU_Vulkan.cpp +++ b/GPU/Vulkan/GPU_Vulkan.cpp @@ -475,6 +475,42 @@ void GPU_Vulkan::CheckGPUFeatures() { } } +void GPU_Vulkan::BeginHostFrame() { + if (g_Config.iRenderingMode == FB_NON_BUFFERED_MODE) { + // Draw everything directly to the backbuffer. + drawEngine_.SetCmdBuffer(vulkan_->GetSurfaceCommandBuffer()); + } + drawEngine_.BeginFrame(); + + if (resized_) { + CheckGPUFeatures(); + UpdateCmdInfo(); + drawEngine_.Resized(); + } + resized_ = false; + + textureCache_.StartFrame(); + depalShaderCache_.Decimate(); + + if (dumpNextFrame_) { + NOTICE_LOG(G3D, "DUMPING THIS FRAME"); + dumpThisFrame_ = true; + dumpNextFrame_ = false; + } else if (dumpThisFrame_) { + dumpThisFrame_ = false; + } + shaderManager_->DirtyShader(); + + // Not sure if this is really needed. + shaderManager_->DirtyUniform(DIRTY_ALL); + + framebufferManager_.BeginFrame(); +} + +void GPU_Vulkan::EndHostFrame() { + drawEngine_.EndFrame(); + framebufferManager_.EndFrame(); +} // Needs to be called on GPU thread, not reporting thread. // TODO @@ -554,36 +590,6 @@ void GPU_Vulkan::ReapplyGfxStateInternal() { } void GPU_Vulkan::BeginFrameInternal() { - if (resized_) { - CheckGPUFeatures(); - UpdateCmdInfo(); - drawEngine_.Resized(); - } - UpdateVsyncInterval(resized_); - resized_ = false; - - textureCache_.StartFrame(); - depalShaderCache_.Decimate(); - - if (dumpNextFrame_) { - NOTICE_LOG(G3D, "DUMPING THIS FRAME"); - dumpThisFrame_ = true; - dumpNextFrame_ = false; - } else if (dumpThisFrame_) { - dumpThisFrame_ = false; - } - shaderManager_->DirtyShader(); - - // Not sure if this is really needed. - shaderManager_->DirtyUniform(DIRTY_ALL); - - framebufferManager_.BeginFrame(); - drawEngine_.BeginFrame(); - - if (g_Config.iRenderingMode == FB_NON_BUFFERED_MODE) { - // Draw everything directly to the backbuffer. - drawEngine_.SetCmdBuffer(vulkan_->GetSurfaceCommandBuffer()); - } } void GPU_Vulkan::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) { @@ -628,13 +634,10 @@ void GPU_Vulkan::CopyDisplayToOutput() { void GPU_Vulkan::CopyDisplayToOutputInternal() { // Flush anything left over. drawEngine_.Flush(curCmd_); - drawEngine_.EndFrame(); shaderManager_->DirtyLastShader(); framebufferManager_.CopyDisplayToOutput(); - framebufferManager_.EndFrame(); - gstate_c.textureChanged = TEXCHANGE_UPDATED; } diff --git a/GPU/Vulkan/GPU_Vulkan.h b/GPU/Vulkan/GPU_Vulkan.h index e292a567b7..c88f9931d2 100644 --- a/GPU/Vulkan/GPU_Vulkan.h +++ b/GPU/Vulkan/GPU_Vulkan.h @@ -38,6 +38,10 @@ public: // This gets called on startup and when we get back from settings. void CheckGPUFeatures(); + // These are where we can reset command buffers etc. + void BeginHostFrame(); + void EndHostFrame(); + void InitClear() override; void Reinitialize() override; void PreExecuteOp(u32 op, u32 diff) override;