summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/nvnflinger/display.h4
-rw-r--r--src/core/hle/service/nvnflinger/surface_flinger.cpp7
-rw-r--r--src/core/hle/service/nvnflinger/surface_flinger.h2
-rw-r--r--src/core/hle/service/vi/container.cpp5
-rw-r--r--src/core/hle/service/vi/container.h2
5 files changed, 13 insertions, 7 deletions
diff --git a/src/core/hle/service/nvnflinger/display.h b/src/core/hle/service/nvnflinger/display.h
index 8a1956fe0..f27cbf144 100644
--- a/src/core/hle/service/nvnflinger/display.h
+++ b/src/core/hle/service/nvnflinger/display.h
@@ -44,6 +44,10 @@ struct Display {
44 return nullptr; 44 return nullptr;
45 } 45 }
46 46
47 bool HasLayers() {
48 return !stack.layers.empty();
49 }
50
47 u64 id; 51 u64 id;
48 LayerStack stack; 52 LayerStack stack;
49}; 53};
diff --git a/src/core/hle/service/nvnflinger/surface_flinger.cpp b/src/core/hle/service/nvnflinger/surface_flinger.cpp
index 0e9714a03..41a705717 100644
--- a/src/core/hle/service/nvnflinger/surface_flinger.cpp
+++ b/src/core/hle/service/nvnflinger/surface_flinger.cpp
@@ -33,16 +33,17 @@ void SurfaceFlinger::RemoveDisplay(u64 display_id) {
33 std::erase_if(m_displays, [&](auto& display) { return display.id == display_id; }); 33 std::erase_if(m_displays, [&](auto& display) { return display.id == display_id; });
34} 34}
35 35
36void SurfaceFlinger::ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, 36bool SurfaceFlinger::ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale,
37 u64 display_id) { 37 u64 display_id) {
38 auto* const display = this->FindDisplay(display_id); 38 auto* const display = this->FindDisplay(display_id);
39 if (!display) { 39 if (!display || !display->HasLayers()) {
40 return; 40 return false;
41 } 41 }
42 42
43 *out_swap_interval = 43 *out_swap_interval =
44 m_composer.ComposeLocked(out_compose_speed_scale, *display, 44 m_composer.ComposeLocked(out_compose_speed_scale, *display,
45 *nvdrv->GetDevice<Nvidia::Devices::nvdisp_disp0>(disp_fd)); 45 *nvdrv->GetDevice<Nvidia::Devices::nvdisp_disp0>(disp_fd));
46 return true;
46} 47}
47 48
48void SurfaceFlinger::AddLayerToDisplayStack(u64 display_id, s32 consumer_binder_id) { 49void SurfaceFlinger::AddLayerToDisplayStack(u64 display_id, s32 consumer_binder_id) {
diff --git a/src/core/hle/service/nvnflinger/surface_flinger.h b/src/core/hle/service/nvnflinger/surface_flinger.h
index a2e661430..d8c53fbda 100644
--- a/src/core/hle/service/nvnflinger/surface_flinger.h
+++ b/src/core/hle/service/nvnflinger/surface_flinger.h
@@ -34,7 +34,7 @@ public:
34 34
35 void AddDisplay(u64 display_id); 35 void AddDisplay(u64 display_id);
36 void RemoveDisplay(u64 display_id); 36 void RemoveDisplay(u64 display_id);
37 void ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id); 37 bool ComposeDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id);
38 38
39 void AddLayerToDisplayStack(u64 display_id, s32 consumer_binder_id); 39 void AddLayerToDisplayStack(u64 display_id, s32 consumer_binder_id);
40 void RemoveLayerFromDisplayStack(u64 display_id, s32 consumer_binder_id); 40 void RemoveLayerFromDisplayStack(u64 display_id, s32 consumer_binder_id);
diff --git a/src/core/hle/service/vi/container.cpp b/src/core/hle/service/vi/container.cpp
index 2d6b9cbfe..310a207f1 100644
--- a/src/core/hle/service/vi/container.cpp
+++ b/src/core/hle/service/vi/container.cpp
@@ -218,10 +218,11 @@ void Container::DestroyBufferQueueLocked(Layer* layer) {
218 layer->GetProducerBinderId()); 218 layer->GetProducerBinderId());
219} 219}
220 220
221void Container::ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, 221bool Container::ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale,
222 u64 display_id) { 222 u64 display_id) {
223 std::scoped_lock lk{m_lock}; 223 std::scoped_lock lk{m_lock};
224 m_surface_flinger->ComposeDisplay(out_swap_interval, out_compose_speed_scale, display_id); 224 return m_surface_flinger->ComposeDisplay(out_swap_interval, out_compose_speed_scale,
225 display_id);
225} 226}
226 227
227} // namespace Service::VI 228} // namespace Service::VI
diff --git a/src/core/hle/service/vi/container.h b/src/core/hle/service/vi/container.h
index 155c4c629..cd0d2ca86 100644
--- a/src/core/hle/service/vi/container.h
+++ b/src/core/hle/service/vi/container.h
@@ -76,7 +76,7 @@ private:
76 void DestroyBufferQueueLocked(Layer* layer); 76 void DestroyBufferQueueLocked(Layer* layer);
77 77
78public: 78public:
79 void ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id); 79 bool ComposeOnDisplay(s32* out_swap_interval, f32* out_compose_speed_scale, u64 display_id);
80 80
81private: 81private:
82 std::mutex m_lock{}; 82 std::mutex m_lock{};