aboutsummaryrefslogtreecommitdiffstats
path: root/libavutil/vulkan.h
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2024-09-29 06:37:10 +0200
committerLynne <dev@lynne.ee>2024-10-04 10:10:41 +0200
commitd233d9902fde00b82a6dcad04bf5001c0f8fcded (patch)
tree0cd7b9678c1bcfbeabe106c5f0158bca3c8ba3cb /libavutil/vulkan.h
parent0a37d5a3b1fbcb44d900ff6dad12022e02368d8a (diff)
downloadffmpeg-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.h81
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;