mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	Merge pull request #4426 from lioncash/lock
nvflinger: Use return value of Lock()
This commit is contained in:
		
						commit
						08f02836d8
					
				| @ -68,7 +68,7 @@ NVFlinger::NVFlinger(Core::System& system) : system(system) { | ||||
|     // Schedule the screen composition events
 | ||||
|     composition_event = Core::Timing::CreateEvent( | ||||
|         "ScreenComposition", [this](u64, std::chrono::nanoseconds ns_late) { | ||||
|             Lock(); | ||||
|             const auto guard = Lock(); | ||||
|             Compose(); | ||||
| 
 | ||||
|             const auto ticks = std::chrono::nanoseconds{GetNextTicks()}; | ||||
|  | ||||
| @ -54,12 +54,12 @@ public: | ||||
|     /// Opens the specified display and returns the ID.
 | ||||
|     ///
 | ||||
|     /// If an invalid display name is provided, then an empty optional is returned.
 | ||||
|     std::optional<u64> OpenDisplay(std::string_view name); | ||||
|     [[nodiscard]] std::optional<u64> OpenDisplay(std::string_view name); | ||||
| 
 | ||||
|     /// Creates a layer on the specified display and returns the layer ID.
 | ||||
|     ///
 | ||||
|     /// If an invalid display ID is specified, then an empty optional is returned.
 | ||||
|     std::optional<u64> CreateLayer(u64 display_id); | ||||
|     [[nodiscard]] std::optional<u64> CreateLayer(u64 display_id); | ||||
| 
 | ||||
|     /// Closes a layer on all displays for the given layer ID.
 | ||||
|     void CloseLayer(u64 layer_id); | ||||
| @ -67,41 +67,39 @@ public: | ||||
|     /// Finds the buffer queue ID of the specified layer in the specified display.
 | ||||
|     ///
 | ||||
|     /// If an invalid display ID or layer ID is provided, then an empty optional is returned.
 | ||||
|     std::optional<u32> FindBufferQueueId(u64 display_id, u64 layer_id) const; | ||||
|     [[nodiscard]] std::optional<u32> FindBufferQueueId(u64 display_id, u64 layer_id) const; | ||||
| 
 | ||||
|     /// Gets the vsync event for the specified display.
 | ||||
|     ///
 | ||||
|     /// If an invalid display ID is provided, then nullptr is returned.
 | ||||
|     std::shared_ptr<Kernel::ReadableEvent> FindVsyncEvent(u64 display_id) const; | ||||
|     [[nodiscard]] std::shared_ptr<Kernel::ReadableEvent> FindVsyncEvent(u64 display_id) const; | ||||
| 
 | ||||
|     /// Obtains a buffer queue identified by the ID.
 | ||||
|     BufferQueue& FindBufferQueue(u32 id); | ||||
|     [[nodiscard]] BufferQueue& FindBufferQueue(u32 id); | ||||
| 
 | ||||
|     /// Obtains a buffer queue identified by the ID.
 | ||||
|     const BufferQueue& FindBufferQueue(u32 id) const; | ||||
|     [[nodiscard]] const BufferQueue& FindBufferQueue(u32 id) const; | ||||
| 
 | ||||
|     /// Performs a composition request to the emulated nvidia GPU and triggers the vsync events when
 | ||||
|     /// finished.
 | ||||
|     void Compose(); | ||||
| 
 | ||||
|     s64 GetNextTicks() const; | ||||
|     [[nodiscard]] s64 GetNextTicks() const; | ||||
| 
 | ||||
|     std::unique_lock<std::mutex> Lock() { | ||||
|         return std::unique_lock{*guard}; | ||||
|     } | ||||
|     [[nodiscard]] std::unique_lock<std::mutex> Lock() const { return std::unique_lock{*guard}; } | ||||
| 
 | ||||
| private: | ||||
|     /// Finds the display identified by the specified ID.
 | ||||
|     VI::Display* FindDisplay(u64 display_id); | ||||
|     private : | ||||
|         /// Finds the display identified by the specified ID.
 | ||||
|         [[nodiscard]] VI::Display* FindDisplay(u64 display_id); | ||||
| 
 | ||||
|     /// Finds the display identified by the specified ID.
 | ||||
|     const VI::Display* FindDisplay(u64 display_id) const; | ||||
|     [[nodiscard]] const VI::Display* FindDisplay(u64 display_id) const; | ||||
| 
 | ||||
|     /// Finds the layer identified by the specified ID in the desired display.
 | ||||
|     VI::Layer* FindLayer(u64 display_id, u64 layer_id); | ||||
|     [[nodiscard]] VI::Layer* FindLayer(u64 display_id, u64 layer_id); | ||||
| 
 | ||||
|     /// Finds the layer identified by the specified ID in the desired display.
 | ||||
|     const VI::Layer* FindLayer(u64 display_id, u64 layer_id) const; | ||||
|     [[nodiscard]] const VI::Layer* FindLayer(u64 display_id, u64 layer_id) const; | ||||
| 
 | ||||
|     static void VSyncThread(NVFlinger& nv_flinger); | ||||
| 
 | ||||
|  | ||||
| @ -511,7 +511,7 @@ private: | ||||
|         LOG_DEBUG(Service_VI, "called. id=0x{:08X} transaction={:X}, flags=0x{:08X}", id, | ||||
|                   static_cast<u32>(transaction), flags); | ||||
| 
 | ||||
|         nv_flinger->Lock(); | ||||
|         const auto guard = nv_flinger->Lock(); | ||||
|         auto& buffer_queue = nv_flinger->FindBufferQueue(id); | ||||
| 
 | ||||
|         switch (transaction) { | ||||
| @ -551,7 +551,7 @@ private: | ||||
|                     [=](std::shared_ptr<Kernel::Thread> thread, Kernel::HLERequestContext& ctx, | ||||
|                         Kernel::ThreadWakeupReason reason) { | ||||
|                         // Repeat TransactParcel DequeueBuffer when a buffer is available
 | ||||
|                         nv_flinger->Lock(); | ||||
|                         const auto guard = nv_flinger->Lock(); | ||||
|                         auto& buffer_queue = nv_flinger->FindBufferQueue(id); | ||||
|                         auto result = buffer_queue.DequeueBuffer(width, height); | ||||
|                         ASSERT_MSG(result != std::nullopt, "Could not dequeue buffer."); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user