mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	vk_present_manager: Fix softlocks when disabling async present
This commit is contained in:
		
							parent
							
								
									8f43b05d6b
								
							
						
					
					
						commit
						f3fcc15ad5
					
				| @ -134,7 +134,7 @@ void RendererVulkan::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) { | ||||
|     Frame* frame = present_manager.GetRenderFrame(); | ||||
|     blit_screen.DrawToSwapchain(frame, *framebuffer, use_accelerated, is_srgb); | ||||
|     scheduler.Flush(*frame->render_ready); | ||||
|     scheduler.Record([this, frame](vk::CommandBuffer) { present_manager.PushFrame(frame); }); | ||||
|     present_manager.Present(frame); | ||||
| 
 | ||||
|     gpu.RendererFrameEndNotify(); | ||||
|     rasterizer.TickFrame(); | ||||
|  | ||||
| @ -153,16 +153,19 @@ Frame* PresentManager::GetRenderFrame() { | ||||
|     return frame; | ||||
| } | ||||
| 
 | ||||
| void PresentManager::PushFrame(Frame* frame) { | ||||
| void PresentManager::Present(Frame* frame) { | ||||
|     if (!use_present_thread) { | ||||
|         scheduler.WaitWorker(); | ||||
|         CopyToSwapchain(frame); | ||||
|         free_queue.push(frame); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     std::unique_lock lock{queue_mutex}; | ||||
|     present_queue.push(frame); | ||||
|     frame_cv.notify_one(); | ||||
|     scheduler.Record([this, frame](vk::CommandBuffer) { | ||||
|         std::unique_lock lock{queue_mutex}; | ||||
|         present_queue.push(frame); | ||||
|         frame_cv.notify_one(); | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| void PresentManager::RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb, | ||||
|  | ||||
| @ -45,7 +45,7 @@ public: | ||||
|     Frame* GetRenderFrame(); | ||||
| 
 | ||||
|     /// Pushes a frame for presentation
 | ||||
|     void PushFrame(Frame* frame); | ||||
|     void Present(Frame* frame); | ||||
| 
 | ||||
|     /// Recreates the present frame to match the provided parameters
 | ||||
|     void RecreateFrame(Frame* frame, u32 width, u32 height, bool is_srgb, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user