aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/vulkan_common/vulkan_wrapper.h
diff options
context:
space:
mode:
authorRibbit <ribbit@eden-emu.dev>2025-10-08 04:01:24 +0200
committercrueter <crueter@eden-emu.dev>2025-10-08 04:01:24 +0200
commitdb65f107689f853141fd2cf4cb7b6b55b24aff3e (patch)
tree9c142e5361fdff65ce329d97714f3bd879c435fa /src/video_core/vulkan_common/vulkan_wrapper.h
parentacd7d792a34a809cf4e7f9270b3cee605fb6c35e (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.h66
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;