diff options
| author | Ribbit <ribbit@eden-emu.dev> | 2025-10-08 04:01:24 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-10-08 04:01:24 +0200 |
| commit | db65f107689f853141fd2cf4cb7b6b55b24aff3e (patch) | |
| tree | 9c142e5361fdff65ce329d97714f3bd879c435fa /src/video_core/vulkan_common/vulkan_wrapper.h | |
| parent | acd7d792a34a809cf4e7f9270b3cee605fb6c35e (diff) | |
[vk] Unify RAII in Vulkan (#2679)
This PR consolidates Vulkan RAII on video_core/vulkan_common/vulkan_wrapper.h’s vk::Handle and remove the unused duplicate src/video_core/vulkan_common/vulkan_raii.h, reducing confusion and maintenance. Swapchain now uses RAII‑managed per‑image semaphores and clears them in Destroy(), providing correct present synchronization and automatic cleanup. Expected result: simpler lifetimes, fewer leak risks, and more stable presentation with negligible overhead.
Co-authored-by: Ribbit <ribbit@placeholder.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2679
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Co-authored-by: Ribbit <ribbit@eden-emu.dev>
Co-committed-by: Ribbit <ribbit@eden-emu.dev>
Diffstat (limited to 'src/video_core/vulkan_common/vulkan_wrapper.h')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.h | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.h b/src/video_core/vulkan_common/vulkan_wrapper.h index 6501094f05..39396b3279 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.h +++ b/src/video_core/vulkan_common/vulkan_wrapper.h @@ -516,7 +516,7 @@ public: } /// Returns true when there's a held object. - operator bool() const noexcept { + explicit operator bool() const noexcept { return handle != nullptr; } @@ -627,7 +627,7 @@ class Instance : public Handle<VkInstance, NoOwner, InstanceDispatch> { public: /// Creates a Vulkan instance. /// @throw Exception on initialization error. - static Instance Create(u32 version, Span<const char*> layers, Span<const char*> extensions, + [[nodiscard]] static Instance Create(u32 version, Span<const char*> layers, Span<const char*> extensions, InstanceDispatch& dispatch); /// Enumerates physical devices. @@ -637,12 +637,12 @@ public: /// Creates a debug callback messenger. /// @throw Exception on creation failure. - DebugUtilsMessenger CreateDebugUtilsMessenger( + [[nodiscard]] DebugUtilsMessenger CreateDebugUtilsMessenger( const VkDebugUtilsMessengerCreateInfoEXT& create_info) const; /// Creates a debug report callback. /// @throw Exception on creation failure. - DebugReportCallback CreateDebugReportCallback( + [[nodiscard]] DebugReportCallback CreateDebugReportCallback( const VkDebugReportCallbackCreateInfoEXT& create_info) const; /// Returns dispatch table. @@ -986,58 +986,60 @@ class Device : public Handle<VkDevice, NoOwner, DeviceDispatch> { using Handle<VkDevice, NoOwner, DeviceDispatch>::Handle; public: - static Device Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreateInfo> queues_ci, - Span<const char*> enabled_extensions, const void* next, - DeviceDispatch& dispatch); + [[nodiscard]] static Device Create(VkPhysicalDevice physical_device, + Span<VkDeviceQueueCreateInfo> queues_ci, + Span<const char*> enabled_extensions, const void* next, + DeviceDispatch& dispatch); - Queue GetQueue(u32 family_index) const noexcept; + [[nodiscard]] Queue GetQueue(u32 family_index) const noexcept; - BufferView CreateBufferView(const VkBufferViewCreateInfo& ci) const; + [[nodiscard]] BufferView CreateBufferView(const VkBufferViewCreateInfo& ci) const; - ImageView CreateImageView(const VkImageViewCreateInfo& ci) const; + [[nodiscard]] ImageView CreateImageView(const VkImageViewCreateInfo& ci) const; - Semaphore CreateSemaphore() const; + [[nodiscard]] Semaphore CreateSemaphore() const; - Semaphore CreateSemaphore(const VkSemaphoreCreateInfo& ci) const; + [[nodiscard]] Semaphore CreateSemaphore(const VkSemaphoreCreateInfo& ci) const; - Fence CreateFence(const VkFenceCreateInfo& ci) const; + [[nodiscard]] Fence CreateFence(const VkFenceCreateInfo& ci) const; - DescriptorPool CreateDescriptorPool(const VkDescriptorPoolCreateInfo& ci) const; + [[nodiscard]] DescriptorPool CreateDescriptorPool(const VkDescriptorPoolCreateInfo& ci) const; - RenderPass CreateRenderPass(const VkRenderPassCreateInfo& ci) const; + [[nodiscard]] RenderPass CreateRenderPass(const VkRenderPassCreateInfo& ci) const; - DescriptorSetLayout CreateDescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo& ci) const; + [[nodiscard]] DescriptorSetLayout CreateDescriptorSetLayout( + const VkDescriptorSetLayoutCreateInfo& ci) const; - PipelineCache CreatePipelineCache(const VkPipelineCacheCreateInfo& ci) const; + [[nodiscard]] PipelineCache CreatePipelineCache(const VkPipelineCacheCreateInfo& ci) const; - PipelineLayout CreatePipelineLayout(const VkPipelineLayoutCreateInfo& ci) const; + [[nodiscard]] PipelineLayout CreatePipelineLayout(const VkPipelineLayoutCreateInfo& ci) const; - Pipeline CreateGraphicsPipeline(const VkGraphicsPipelineCreateInfo& ci, - VkPipelineCache cache = nullptr) const; + [[nodiscard]] Pipeline CreateGraphicsPipeline(const VkGraphicsPipelineCreateInfo& ci, + VkPipelineCache cache = nullptr) const; - Pipeline CreateComputePipeline(const VkComputePipelineCreateInfo& ci, - VkPipelineCache cache = nullptr) const; + [[nodiscard]] Pipeline CreateComputePipeline(const VkComputePipelineCreateInfo& ci, + VkPipelineCache cache = nullptr) const; - Sampler CreateSampler(const VkSamplerCreateInfo& ci) const; + [[nodiscard]] Sampler CreateSampler(const VkSamplerCreateInfo& ci) const; - Framebuffer CreateFramebuffer(const VkFramebufferCreateInfo& ci) const; + [[nodiscard]] Framebuffer CreateFramebuffer(const VkFramebufferCreateInfo& ci) const; - CommandPool CreateCommandPool(const VkCommandPoolCreateInfo& ci) const; + [[nodiscard]] CommandPool CreateCommandPool(const VkCommandPoolCreateInfo& ci) const; - DescriptorUpdateTemplate CreateDescriptorUpdateTemplate( + [[nodiscard]] DescriptorUpdateTemplate CreateDescriptorUpdateTemplate( const VkDescriptorUpdateTemplateCreateInfo& ci) const; - QueryPool CreateQueryPool(const VkQueryPoolCreateInfo& ci) const; + [[nodiscard]] QueryPool CreateQueryPool(const VkQueryPoolCreateInfo& ci) const; - ShaderModule CreateShaderModule(const VkShaderModuleCreateInfo& ci) const; + [[nodiscard]] ShaderModule CreateShaderModule(const VkShaderModuleCreateInfo& ci) const; - Event CreateEvent() const; + [[nodiscard]] Event CreateEvent() const; - SwapchainKHR CreateSwapchainKHR(const VkSwapchainCreateInfoKHR& ci) const; + [[nodiscard]] SwapchainKHR CreateSwapchainKHR(const VkSwapchainCreateInfoKHR& ci) const; - DeviceMemory TryAllocateMemory(const VkMemoryAllocateInfo& ai) const noexcept; + [[nodiscard]] DeviceMemory TryAllocateMemory(const VkMemoryAllocateInfo& ai) const noexcept; - DeviceMemory AllocateMemory(const VkMemoryAllocateInfo& ai) const; + [[nodiscard]] DeviceMemory AllocateMemory(const VkMemoryAllocateInfo& ai) const; VkMemoryRequirements GetBufferMemoryRequirements(VkBuffer buffer, void* pnext = nullptr) const noexcept; |
