mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 02:34:11 +01:00 
			
		
		
		
	nvnflinger: check for layers before compose
This commit is contained in:
		
							parent
							
								
									a07f0883b9
								
							
						
					
					
						commit
						940a71422e
					
				| @ -44,6 +44,10 @@ struct Display { | ||||
|         return nullptr; | ||||
|     } | ||||
| 
 | ||||
|     bool HasLayers() { | ||||
|         return !stack.layers.empty(); | ||||
|     } | ||||
| 
 | ||||
|     u64 id; | ||||
|     LayerStack stack; | ||||
| }; | ||||
|  | ||||
| @ -33,16 +33,17 @@ void SurfaceFlinger::RemoveDisplay(u64 display_id) { | ||||
|     std::erase_if(m_displays, [&](auto& display) { return display.id == display_id; }); | ||||
| } | ||||
| 
 | ||||
| void SurfaceFlinger::ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, | ||||
| bool SurfaceFlinger::ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, | ||||
|                                     u64 display_id) { | ||||
|     auto* const display = this->FindDisplay(display_id); | ||||
|     if (!display) { | ||||
|         return; | ||||
|     if (!display || !display->HasLayers()) { | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     *out_swap_interval = | ||||
|         m_composer.ComposeLocked(out_compose_speed_scale, *display, | ||||
|                                  *nvdrv->GetDevice<Nvidia::Devices::nvdisp_disp0>(disp_fd)); | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| void SurfaceFlinger::AddLayerToDisplayStack(u64 display_id, s32 consumer_binder_id) { | ||||
|  | ||||
| @ -34,7 +34,7 @@ public: | ||||
| 
 | ||||
|     void AddDisplay(u64 display_id); | ||||
|     void RemoveDisplay(u64 display_id); | ||||
|     void ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id); | ||||
|     bool ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id); | ||||
| 
 | ||||
|     void AddLayerToDisplayStack(u64 display_id, s32 consumer_binder_id); | ||||
|     void RemoveLayerFromDisplayStack(u64 display_id, s32 consumer_binder_id); | ||||
|  | ||||
| @ -218,10 +218,11 @@ void Container::DestroyBufferQueueLocked(Layer* layer) { | ||||
|                                           layer->GetProducerBinderId()); | ||||
| } | ||||
| 
 | ||||
| void Container::ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, | ||||
| bool Container::ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, | ||||
|                                  u64 display_id) { | ||||
|     std::scoped_lock lk{m_lock}; | ||||
|     m_surface_flinger->ComposeDisplay(out_swap_interval, out_compose_speed_scale, display_id); | ||||
|     return m_surface_flinger->ComposeDisplay(out_swap_interval, out_compose_speed_scale, | ||||
|                                              display_id); | ||||
| } | ||||
| 
 | ||||
| } // namespace Service::VI
 | ||||
|  | ||||
| @ -76,7 +76,7 @@ private: | ||||
|     void DestroyBufferQueueLocked(Layer* layer); | ||||
| 
 | ||||
| public: | ||||
|     void ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id); | ||||
|     bool ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id); | ||||
| 
 | ||||
| private: | ||||
|     std::mutex m_lock{}; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user