From f020d8bf2ca723e0eb299ede5c4e2295d9df5c99 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Fri, 6 Dec 2024 03:29:53 +0100 Subject: [PATCH] working on vulkan's descriptor sets --- Sources/Backends/Vulkan/VulkanDescriptor.h | 55 ++++++++++++++++++++-- Sources/Backends/Vulkan/VulkanEnums.h | 12 ++++- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/Sources/Backends/Vulkan/VulkanDescriptor.h b/Sources/Backends/Vulkan/VulkanDescriptor.h index 3c72805..454741f 100644 --- a/Sources/Backends/Vulkan/VulkanDescriptor.h +++ b/Sources/Backends/Vulkan/VulkanDescriptor.h @@ -10,11 +10,60 @@ #include #include -#include "../../PulseInternal.h" -typedef struct VulkanDescriptor +#include "VulkanEnums.h" + +#define VULKAN_POOL_SIZE 128 + +typedef struct VulkanDescriptorSetLayout { -} VulkanDescriptor; + VkDescriptorSetLayout layout; + VulkanDescriptorSetType type; + + union + { + struct + { + uint32_t storage_buffer_count; + uint32_t storage_texture_count; + } ReadOnly; + struct + { + uint32_t storage_buffer_count; + uint32_t storage_texture_count; + } ReadWrite; + struct + { + uint32_t buffer_count; + } Uniform; + }; +} VulkanDescriptorSetLayout; + +typedef struct VulkanDescriptorSet +{ + VulkanDescriptorSetLayout* layout; + struct VulkanDescriptorSetPool* pool; + VkDescriptorSet set; +} VulkanDescriptorSet; + +typedef struct VulkanDescriptorSetPool +{ + VulkanDescriptorSet* used_sets[VULKAN_POOL_SIZE]; + VulkanDescriptorSet* free_sets[VULKAN_POOL_SIZE]; + VkDescriptorPool pool; + uint32_t sets_count; +} VulkanDescriptorSetPool; + +typedef struct VulkanDescriptorSetPoolManager +{ + VulkanDescriptorSetPool* pools; + uint32_t pools_capacity; + uint32_t pools_size; +} VulkanDescriptorSetPoolManager; + +void VulkanInitDescriptorSetPoolManager(VulkanDescriptorSetPoolManager* manager); +VulkanDescriptorSetPool* VulkanGetAvailableDescriptorSetPool(VulkanDescriptorSetPoolManager* manager); +void VulkanDestroyDescriptorSetPoolManager(VulkanDescriptorSetPoolManager* manager); #endif // PULSE_VULKAN_DESCRIPTOR_H_ diff --git a/Sources/Backends/Vulkan/VulkanEnums.h b/Sources/Backends/Vulkan/VulkanEnums.h index a94614f..99bf924 100644 --- a/Sources/Backends/Vulkan/VulkanEnums.h +++ b/Sources/Backends/Vulkan/VulkanEnums.h @@ -1,5 +1,4 @@ // Copyright (C) 2024 kanel -// // This file is part of "Pulse" // For conditions of distribution and use, see copyright notice in LICENSE @@ -11,11 +10,20 @@ typedef enum VulkanQueueType { VULKAN_QUEUE_COMPUTE = 0, - VULKAN_QUEUE_TRANSFER = 1, + VULKAN_QUEUE_TRANSFER, VULKAN_QUEUE_END_ENUM // For internal use only } VulkanQueueType; +typedef enum VulkanDescriptorSetType +{ + VULKAN_DESCRIPTOR_SET_READ_ONLY = 0, + VULKAN_DESCRIPTOR_SET_READ_WRITE, + VULKAN_DESCRIPTOR_SET_UNIFORM, + + VULKAN_DESCRIPTOR_SET_END_ENUM // For internal use only +} VulkanDescriptorSetType; + #endif // PULSE_VULKAN_ENUMS_H_ #endif // PULSE_ENABLE_VULKAN_BACKEND