diff options
author | Lynne <dev@lynne.ee> | 2024-09-29 06:37:10 +0200 |
---|---|---|
committer | Lynne <dev@lynne.ee> | 2024-10-04 10:10:41 +0200 |
commit | d233d9902fde00b82a6dcad04bf5001c0f8fcded (patch) | |
tree | 0cd7b9678c1bcfbeabe106c5f0158bca3c8ba3cb /libavutil/vulkan.h | |
parent | 0a37d5a3b1fbcb44d900ff6dad12022e02368d8a (diff) | |
download | ffmpeg-d233d9902fde00b82a6dcad04bf5001c0f8fcded.tar.gz |
vulkan: move shader data execution state to execution pools
This finally permits using fully compiled shaders across
multiple execution contexts.
Diffstat (limited to 'libavutil/vulkan.h')
-rw-r--r-- | libavutil/vulkan.h | 81 |
1 files changed, 50 insertions, 31 deletions
diff --git a/libavutil/vulkan.h b/libavutil/vulkan.h index 9c87dd29cf..5391afa4e7 100644 --- a/libavutil/vulkan.h +++ b/libavutil/vulkan.h @@ -162,31 +162,11 @@ typedef struct FFVkExecContext { unsigned int frame_update_alloc_size; } FFVkExecContext; -typedef struct FFVkExecPool { - FFVkExecContext *contexts; - atomic_int_least64_t idx; - - VkCommandPool cmd_buf_pool; - VkCommandBuffer *cmd_bufs; - int pool_size; - - VkQueryPool query_pool; - void *query_data; - int query_results; - int query_statuses; - int query_64bit; - int query_status_stride; - int nb_queries; - size_t qd_size; -} FFVkExecPool; - typedef struct FFVulkanDescriptorSet { - FFVkBuffer buf; - uint8_t *desc_mem; - VkDeviceSize layout_size; - VkDeviceSize aligned_size; /* descriptorBufferOffsetAlignment */ - VkDeviceSize total_size; /* Once registered to an exec context */ - VkBufferUsageFlags usage; + /* Descriptor buffer */ + VkDeviceSize layout_size; + VkDeviceSize aligned_size; /* descriptorBufferOffsetAlignment */ + VkBufferUsageFlags usage; VkDescriptorSetLayoutBinding *binding; VkDeviceSize *binding_offset; @@ -225,23 +205,62 @@ typedef struct FFVulkanShader { VkPushConstantRange *push_consts; int push_consts_num; + /* Descriptor sets */ + FFVulkanDescriptorSet *desc_set; + int nb_descriptor_sets; + /* Descriptor buffer */ VkDescriptorSetLayout *desc_layout; - FFVulkanDescriptorSet *desc_set; - VkDescriptorBufferBindingInfoEXT *desc_bind; uint32_t *bound_buffer_indices; - int nb_descriptor_sets; /* Descriptor pool */ int use_push; - VkDescriptorSet *desc_sets; - VkDescriptorPool desc_pool; VkDescriptorPoolSize *desc_pool_size; int nb_desc_pool_size; - int total_desc_sets; - FFVkExecPool *assoc_pool; } FFVulkanShader; +typedef struct FFVulkanDescriptorSetData { + /* Descriptor buffer */ + FFVkBuffer buf; + uint8_t *desc_mem; +} FFVulkanDescriptorSetData; + +typedef struct FFVulkanShaderData { + /* Shader to which this data belongs to */ + FFVulkanShader *shd; + int nb_descriptor_sets; + + /* Descriptor buffer */ + FFVulkanDescriptorSetData *desc_set_buf; + VkDescriptorBufferBindingInfoEXT *desc_bind; + + /* Descriptor pools */ + VkDescriptorSet *desc_sets; + VkDescriptorPool desc_pool; +} FFVulkanShaderData; + +typedef struct FFVkExecPool { + FFVkExecContext *contexts; + atomic_int_least64_t idx; + + VkCommandPool cmd_buf_pool; + VkCommandBuffer *cmd_bufs; + int pool_size; + + VkQueryPool query_pool; + void *query_data; + int query_results; + int query_statuses; + int query_64bit; + int query_status_stride; + int nb_queries; + size_t qd_size; + + /* Registered shaders' data */ + FFVulkanShaderData *reg_shd; + int nb_reg_shd; +} FFVkExecPool; + typedef struct FFVulkanContext { const AVClass *class; void *log_parent; |