summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nvnflinger/surface_flinger.h
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2024-02-15 05:44:05 +0100
committerLiam <byteslice@airmail.cc>2024-02-18 00:08:38 +0100
commit812f23d05c77fb10407546c3e7a95447fcbea395 (patch)
treebbfb035c35ccffb6dbe0995002c2937bd94edc2d /src/core/hle/service/nvnflinger/surface_flinger.h
parentvi: move shared buffer management from nvnflinger (diff)
downloadyuzu-812f23d05c77fb10407546c3e7a95447fcbea395.tar
yuzu-812f23d05c77fb10407546c3e7a95447fcbea395.tar.gz
yuzu-812f23d05c77fb10407546c3e7a95447fcbea395.tar.bz2
yuzu-812f23d05c77fb10407546c3e7a95447fcbea395.tar.lz
yuzu-812f23d05c77fb10407546c3e7a95447fcbea395.tar.xz
yuzu-812f23d05c77fb10407546c3e7a95447fcbea395.tar.zst
yuzu-812f23d05c77fb10407546c3e7a95447fcbea395.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/nvnflinger/surface_flinger.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/core/hle/service/nvnflinger/surface_flinger.h b/src/core/hle/service/nvnflinger/surface_flinger.h
new file mode 100644
index 000000000..a2e661430
--- /dev/null
+++ b/src/core/hle/service/nvnflinger/surface_flinger.h
@@ -0,0 +1,65 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <vector>
+
+#include "common/common_types.h"
+#include "core/hle/service/kernel_helpers.h"
+#include "core/hle/service/nvnflinger/hardware_composer.h"
+
+namespace Core {
+class System;
+}
+
+namespace Service::Nvidia {
+class Module;
+}
+
+// TODO: ISurfaceComposer
+// TODO: ISurfaceComposerClient
+
+namespace Service::Nvnflinger {
+
+struct Display;
+class HosBinderDriverServer;
+enum class LayerBlending : u32;
+struct Layer;
+
+class SurfaceFlinger {
+public:
+ explicit SurfaceFlinger(Core::System& system, HosBinderDriverServer& server);
+ ~SurfaceFlinger();
+
+ void AddDisplay(u64 display_id);
+ void RemoveDisplay(u64 display_id);
+ void 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);
+
+ void SetLayerVisibility(s32 consumer_binder_id, bool visible);
+ void SetLayerBlending(s32 consumer_binder_id, LayerBlending blending);
+
+private:
+ Display* FindDisplay(u64 display_id);
+ Layer* FindLayer(s32 consumer_binder_id);
+
+public:
+ // TODO: these don't belong here
+ void CreateBufferQueue(s32* out_consumer_binder_id, s32* out_producer_binder_id);
+ void DestroyBufferQueue(s32 consumer_binder_id, s32 producer_binder_id);
+
+private:
+ Core::System& m_system;
+ HosBinderDriverServer& m_server;
+ KernelHelpers::ServiceContext m_context;
+
+ std::vector<Display> m_displays;
+ std::shared_ptr<Nvidia::Module> nvdrv;
+ s32 disp_fd;
+ HardwareComposer m_composer;
+};
+
+} // namespace Service::Nvnflinger