This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 3ba81f2af4cf92ab27693818db49a49a04d8ab67
Author:     Lynne <[email protected]>
AuthorDate: Sun Feb 8 07:27:34 2026 +0100
Commit:     Lynne <[email protected]>
CommitDate: Thu Feb 19 19:42:31 2026 +0100

    vulkan: drop support for descriptor buffers
    
    Descriptor buffers were a neat attempt at organizing descriptors.
    Simple, robust, reliable.
    
    Unfortunately, driver support never caught on, and neither did validation
    layer support.
    
    Now they're being replaced by descriptor heaps, which promises to be
    the future. We'll see how it goes.
---
 libavcodec/ffv1_vulkan.c        |   3 -
 libavcodec/ffv1enc_vulkan.c     |   6 +-
 libavcodec/vulkan_dpx.c         |   3 +-
 libavcodec/vulkan_ffv1.c        |   9 +-
 libavcodec/vulkan_prores_raw.c  |   3 +-
 libavfilter/vf_nlmeans_vulkan.c |   4 +-
 libavutil/hwcontext_vulkan.c    |  15 +-
 libavutil/vulkan.c              | 303 +++++++---------------------------------
 libavutil/vulkan.h              |   3 +-
 libavutil/vulkan_functions.h    |   8 --
 libavutil/vulkan_loader.h       |   1 -
 11 files changed, 63 insertions(+), 295 deletions(-)

diff --git a/libavcodec/ffv1_vulkan.c b/libavcodec/ffv1_vulkan.c
index 7908cc5f5a..a67eb3e15d 100644
--- a/libavcodec/ffv1_vulkan.c
+++ b/libavcodec/ffv1_vulkan.c
@@ -85,7 +85,6 @@ static int init_state_transition_data(FFVulkanContext *s,
     RET(ff_vk_create_buf(s, vkb,
                          buf_len,
                          NULL, NULL,
-                         VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT |
                          VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                          VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
                          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT));
@@ -116,7 +115,6 @@ int ff_ffv1_vk_init_quant_table_data(FFVulkanContext *s,
     RET(ff_vk_create_buf(s, vkb,
                          buf_len,
                          NULL, NULL,
-                         VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT |
                          VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
                          VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
                          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT));
@@ -142,7 +140,6 @@ int ff_ffv1_vk_init_crc_table_data(FFVulkanContext *s,
     RET(ff_vk_create_buf(s, vkb,
                          buf_len,
                          NULL, NULL,
-                         VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT |
                          VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
                          VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
                          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT));
diff --git a/libavcodec/ffv1enc_vulkan.c b/libavcodec/ffv1enc_vulkan.c
index d540f38a88..9cebeacb33 100644
--- a/libavcodec/ffv1enc_vulkan.c
+++ b/libavcodec/ffv1enc_vulkan.c
@@ -229,8 +229,7 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext 
*avctx,
     if (!slice_data_ref) {
         RET(ff_vk_get_pooled_buffer(&fv->s, &fv->slice_data_pool,
                                     &slice_data_ref,
-                                    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                    VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
+                                    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                                     NULL, slice_state_size*f->slice_count,
                                     VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT));
 
@@ -243,8 +242,7 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext 
*avctx,
     /* Allocate results buffer */
     RET(ff_vk_get_pooled_buffer(&fv->s, &fv->results_data_pool,
                                 &fd->results_data_ref,
-                                VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
+                                VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                                 NULL, 2*f->slice_count*sizeof(uint64_t),
                                 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
                                 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT));
diff --git a/libavcodec/vulkan_dpx.c b/libavcodec/vulkan_dpx.c
index a69e93108a..726ae09af9 100644
--- a/libavcodec/vulkan_dpx.c
+++ b/libavcodec/vulkan_dpx.c
@@ -72,8 +72,7 @@ static int vk_dpx_start_frame(AVCodecContext          *avctx,
         ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY)
         ff_vk_host_map_buffer(&ctx->s, &vp->slices_buf, (uint8_t *)buffer,
                               buffer_ref,
-                              VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                              VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
+                              VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
 
     /* Prepare frame to be used */
     err = ff_vk_decode_prepare_frame_sdr(dec, dpx->frame, vp, 1,
diff --git a/libavcodec/vulkan_ffv1.c b/libavcodec/vulkan_ffv1.c
index 28bb6659d2..258fc0e738 100644
--- a/libavcodec/vulkan_ffv1.c
+++ b/libavcodec/vulkan_ffv1.c
@@ -138,8 +138,7 @@ static int vk_ffv1_start_frame(AVCodecContext          
*avctx,
     if (f->picture.f->flags & AV_FRAME_FLAG_KEY) {
         err = ff_vk_get_pooled_buffer(&ctx->s, &fv->slice_state_pool,
                                       &fp->slice_state,
-                                      VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                      
VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
+                                      VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                                       NULL, 
f->slice_count*fp->slice_state_size,
                                       VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
         if (err < 0)
@@ -154,8 +153,7 @@ static int vk_ffv1_start_frame(AVCodecContext          
*avctx,
     /* Allocate slice offsets buffer */
     err = ff_vk_get_pooled_buffer(&ctx->s, &fv->slice_offset_pool,
                                   &fp->slice_offset_buf,
-                                  VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                  VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
+                                  VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                                   NULL, 2*f->slice_count*sizeof(uint32_t),
                                   VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
                                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
@@ -165,8 +163,7 @@ static int vk_ffv1_start_frame(AVCodecContext          
*avctx,
     /* Allocate slice status buffer */
     err = ff_vk_get_pooled_buffer(&ctx->s, &fv->slice_status_pool,
                                   &fp->slice_status_buf,
-                                  VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                  VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
+                                  VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                                   NULL, 2*f->slice_count*sizeof(uint32_t),
                                   VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
                                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
diff --git a/libavcodec/vulkan_prores_raw.c b/libavcodec/vulkan_prores_raw.c
index c62c631b33..392b74a863 100644
--- a/libavcodec/vulkan_prores_raw.c
+++ b/libavcodec/vulkan_prores_raw.c
@@ -85,8 +85,7 @@ static int vk_prores_raw_start_frame(AVCodecContext          
*avctx,
     /* Allocate tile data */
     err = ff_vk_get_pooled_buffer(&ctx->s, &prv->frame_data_pool,
                                   &pp->frame_data_buf,
-                                  VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                  VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
+                                  VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                                   NULL, prr->nb_tiles*sizeof(TileData),
                                   VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
                                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
diff --git a/libavfilter/vf_nlmeans_vulkan.c b/libavfilter/vf_nlmeans_vulkan.c
index 7a765d9f31..c1430707b7 100644
--- a/libavfilter/vf_nlmeans_vulkan.c
+++ b/libavfilter/vf_nlmeans_vulkan.c
@@ -668,7 +668,6 @@ static av_cold int init_filter(AVFilterContext *ctx)
     }
 
     RET(ff_vk_create_buf(&s->vkctx, &s->xyoffsets_buf, 
2*s->nb_offsets*sizeof(int32_t), NULL, NULL,
-                         VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT |
                          VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
                          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
                          VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT));
@@ -861,8 +860,7 @@ static int nlmeans_vulkan_filter_frame(AVFilterLink *link, 
AVFrame *in)
 
     err = ff_vk_get_pooled_buffer(&s->vkctx, &s->ws_buf_pool, &ws_buf,
                                   VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-                                  VK_BUFFER_USAGE_TRANSFER_DST_BIT |
-                                  VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
+                                  VK_BUFFER_USAGE_TRANSFER_DST_BIT,
                                   NULL,
                                   ws_size * s-> opts.t * 2,
                                   VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
index 662a5b6107..6c104b7204 100644
--- a/libavutil/hwcontext_vulkan.c
+++ b/libavutil/hwcontext_vulkan.c
@@ -112,7 +112,6 @@ typedef struct VulkanDeviceFeatures {
 
     VkPhysicalDeviceShaderObjectFeaturesEXT shader_object;
     VkPhysicalDeviceCooperativeMatrixFeaturesKHR cooperative_matrix;
-    VkPhysicalDeviceDescriptorBufferFeaturesEXT descriptor_buffer;
     VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float;
 
 #ifdef VK_KHR_shader_relaxed_extended_instruction
@@ -274,8 +273,6 @@ static void device_features_init(AVHWDeviceContext *ctx, 
VulkanDeviceFeatures *f
                      
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT);
     FF_VK_STRUCT_EXT(s, &feats->device, &feats->cooperative_matrix, 
FF_VK_EXT_COOP_MATRIX,
                      
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR);
-    FF_VK_STRUCT_EXT(s, &feats->device, &feats->descriptor_buffer, 
FF_VK_EXT_DESCRIPTOR_BUFFER,
-                     
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT);
     FF_VK_STRUCT_EXT(s, &feats->device, &feats->atomic_float, 
FF_VK_EXT_ATOMIC_FLOAT,
                      
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT);
     FF_VK_STRUCT_EXT(s, &feats->device, &feats->explicit_mem_layout, 
FF_VK_EXT_EXPLICIT_MEM_LAYOUT,
@@ -374,9 +371,6 @@ static void 
device_features_copy_needed(VulkanDeviceFeatures *dst, VulkanDeviceF
 
     COPY_VAL(cooperative_matrix.cooperativeMatrix);
 
-    COPY_VAL(descriptor_buffer.descriptorBuffer);
-    COPY_VAL(descriptor_buffer.descriptorBufferPushDescriptors);
-
     COPY_VAL(atomic_float.shaderBufferFloat32Atomics);
     COPY_VAL(atomic_float.shaderBufferFloat32AtomicAdd);
 
@@ -687,7 +681,6 @@ static const VulkanOptExtension optional_device_exts[] = {
     /* Misc or required by other extensions */
     { VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME,               
FF_VK_EXT_PORTABILITY_SUBSET     },
     { VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME,                  
FF_VK_EXT_PUSH_DESCRIPTOR        },
-    { VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME,                
FF_VK_EXT_DESCRIPTOR_BUFFER      },
     { VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME,              
FF_VK_EXT_DEVICE_DRM             },
     { VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME,              
FF_VK_EXT_ATOMIC_FLOAT           },
     { VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME,               
FF_VK_EXT_COOP_MATRIX            },
@@ -918,11 +911,6 @@ static int check_extensions(AVHWDeviceContext *ctx, int 
dev, AVDictionary *opts,
         tstr = optional_exts[i].name;
         found = 0;
 
-        /* Intel has had a bad descriptor buffer implementation for a while */
-        if (p->dprops.driverID == VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA &&
-            !strcmp(tstr, VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME))
-            continue;
-
         /* Check if the device has ReBAR for host image copies */
         if (!strcmp(tstr, VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME) &&
             !vulkan_device_has_rebar(ctx))
@@ -932,8 +920,7 @@ static int check_extensions(AVHWDeviceContext *ctx, int 
dev, AVDictionary *opts,
             ((debug_mode == FF_VULKAN_DEBUG_VALIDATE) ||
              (debug_mode == FF_VULKAN_DEBUG_PRINTF) ||
              (debug_mode == FF_VULKAN_DEBUG_PRACTICES)) &&
-            (!strcmp(tstr, VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME) ||
-             !strcmp(tstr, VK_EXT_SHADER_OBJECT_EXTENSION_NAME))) {
+            (!strcmp(tstr, VK_EXT_SHADER_OBJECT_EXTENSION_NAME))) {
             continue;
         }
 
diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
index 0a60763350..51242c250f 100644
--- a/libavutil/vulkan.c
+++ b/libavutil/vulkan.c
@@ -165,8 +165,6 @@ int ff_vk_load_props(FFVulkanContext *s)
                      
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT);
     FF_VK_STRUCT_EXT(s, &s->props, &s->coop_matrix_props, 
FF_VK_EXT_COOP_MATRIX,
                      
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR);
-    FF_VK_STRUCT_EXT(s, &s->props, &s->desc_buf_props, 
FF_VK_EXT_DESCRIPTOR_BUFFER,
-                     
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT);
     FF_VK_STRUCT_EXT(s, &s->props, &s->optical_flow_props, 
FF_VK_EXT_OPTICAL_FLOW,
                      
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV);
     FF_VK_STRUCT_EXT(s, &s->props, &s->host_image_props, 
FF_VK_EXT_HOST_IMAGE_COPY,
@@ -330,15 +328,6 @@ void ff_vk_exec_pool_free(FFVulkanContext *s, FFVkExecPool 
*pool)
     for (int i = 0; i < pool->nb_reg_shd; i++) {
         FFVulkanShaderData *sd = &pool->reg_shd[i];
 
-        if (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) {
-            for (int j = 0; j < sd->nb_descriptor_sets; j++) {
-                FFVulkanDescriptorSetData *set_data = &sd->desc_set_buf[j];
-                if (set_data->buf.mem)
-                    ff_vk_unmap_buffer(s, &set_data->buf, 0);
-                ff_vk_free_buf(s, &set_data->buf);
-            }
-        }
-
         if (sd->desc_pool)
             vk->DestroyDescriptorPool(s->hwctx->act_dev, sd->desc_pool,
                                       s->hwctx->alloc);
@@ -1037,16 +1026,6 @@ int ff_vk_create_buf(FFVulkanContext *s, FFVkBuffer 
*buf, size_t size,
     int use_ded_mem;
     FFVulkanFunctions *vk = &s->vkfn;
 
-    /* Buffer usage flags corresponding to buffer descriptor types */
-    const VkBufferUsageFlags desc_usage =
-        VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
-        VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
-        VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
-        VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
-
-    if ((s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) && (usage & desc_usage))
-        usage |= VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
-
     VkBufferCreateInfo buf_spawn = {
         .sType       = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
         .pNext       = pNext,
@@ -2263,8 +2242,7 @@ static int init_compute_pipeline(FFVulkanContext *s, 
FFVulkanShader *shd,
 
     VkComputePipelineCreateInfo pipeline_create_info = {
         .sType  = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,
-        .flags = (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) ?
-                 VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT : 0x0,
+        .flags = 0x0,
         .layout = shd->pipeline_layout,
         .stage = (VkPipelineShaderStageCreateInfo) {
             .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
@@ -2335,19 +2313,17 @@ static int init_descriptors(FFVulkanContext *s, 
FFVulkanShader *shd)
     VkResult ret;
     FFVulkanFunctions *vk = &s->vkfn;
 
-    if (!(s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER)) {
-        int has_singular = 0;
-        int max_descriptors = 0;
-        for (int i = 0; i < shd->nb_descriptor_sets; i++) {
-            max_descriptors = FFMAX(max_descriptors, 
shd->desc_set[i].nb_bindings);
-            if (shd->desc_set[i].singular)
-                has_singular = 1;
-        }
-        shd->use_push = (s->extensions & FF_VK_EXT_PUSH_DESCRIPTOR) &&
-                        (max_descriptors <= 
s->push_desc_props.maxPushDescriptors) &&
-                        (shd->nb_descriptor_sets == 1) &&
-                        (has_singular == 0);
+    int has_singular = 0;
+    int max_descriptors = 0;
+    for (int i = 0; i < shd->nb_descriptor_sets; i++) {
+        max_descriptors = FFMAX(max_descriptors, shd->desc_set[i].nb_bindings);
+        if (shd->desc_set[i].singular)
+            has_singular = 1;
     }
+    shd->use_push = (s->extensions & FF_VK_EXT_PUSH_DESCRIPTOR) &&
+                    (max_descriptors <= s->push_desc_props.maxPushDescriptors) 
&&
+                    (shd->nb_descriptor_sets == 1) &&
+                    (has_singular == 0);
 
     for (int i = 0; i < shd->nb_descriptor_sets; i++) {
         FFVulkanDescriptorSet *set = &shd->desc_set[i];
@@ -2355,9 +2331,7 @@ static int init_descriptors(FFVulkanContext *s, 
FFVulkanShader *shd)
             .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
             .bindingCount = set->nb_bindings,
             .pBindings = set->binding,
-            .flags = (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) ?
-                     VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT 
:
-                     (shd->use_push) ?
+            .flags = (shd->use_push) ?
                      VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR :
                      0x0,
         };
@@ -2371,20 +2345,6 @@ static int init_descriptors(FFVulkanContext *s, 
FFVulkanShader *shd)
                    ff_vk_ret2str(ret));
             return AVERROR_EXTERNAL;
         }
-
-        if (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) {
-            vk->GetDescriptorSetLayoutSizeEXT(s->hwctx->act_dev, 
shd->desc_layout[i],
-                                              &set->layout_size);
-
-            set->aligned_size = FFALIGN(set->layout_size,
-                                        
s->desc_buf_props.descriptorBufferOffsetAlignment);
-
-            for (int j = 0; j < set->nb_bindings; j++)
-                vk->GetDescriptorSetLayoutBindingOffsetEXT(s->hwctx->act_dev,
-                                                           shd->desc_layout[i],
-                                                           j,
-                                                           
&set->binding_offset[j]);
-        }
     }
 
     return 0;
@@ -2444,11 +2404,6 @@ int ff_vk_shader_link(FFVulkanContext *s, FFVulkanShader 
*shd,
     if (err < 0)
         goto end;
 
-    if (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) {
-        for (int i = 0; i < shd->nb_descriptor_sets; i++)
-            shd->bound_buffer_indices[i] = i;
-    }
-
     if (s->extensions & FF_VK_EXT_SHADER_OBJECT) {
         err = create_shader_object(s, shd, spirv, spirv_len,
                                    &binary_size, entrypoint);
@@ -2526,8 +2481,6 @@ int ff_vk_shader_add_descriptor_set(FFVulkanContext *s, 
FFVulkanShader *shd,
                                     const FFVulkanDescriptorSetBinding *desc, 
int nb,
                                     int singular, int print_to_shader_only)
 {
-    int has_sampler = 0;
-
     if (print_to_shader_only)
         goto print;
 
@@ -2541,30 +2494,20 @@ int ff_vk_shader_add_descriptor_set(FFVulkanContext *s, 
FFVulkanShader *shd,
         set->binding[i].descriptorCount    = FFMAX(desc[i].elems, 1);
         set->binding[i].stageFlags         = desc[i].stages;
         set->binding[i].pImmutableSamplers = desc[i].samplers;
-
-        if (desc[i].type == VK_DESCRIPTOR_TYPE_SAMPLER ||
-            desc[i].type == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
-            has_sampler |= 1;
     }
 
-    set->usage = VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT |
-                 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
-    if (has_sampler)
-        set->usage |= VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT;
-
-    if (!(s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER)) {
-        for (int i = 0; i < nb; i++) {
-            int j;
-            for (j = 0; j < shd->nb_desc_pool_size; j++)
-                if (shd->desc_pool_size[j].type == desc[i].type)
-                    break;
-            if (j >= shd->nb_desc_pool_size) {
-                shd->nb_desc_pool_size++;
-                av_assert1(shd->nb_desc_pool_size < 
FF_VK_MAX_DESCRIPTOR_TYPES);
-            }
-            shd->desc_pool_size[j].type             = desc[i].type;
-            shd->desc_pool_size[j].descriptorCount += FFMAX(desc[i].elems, 1);
+    for (int i = 0; i < nb; i++) {
+        int j;
+        for (j = 0; j < shd->nb_desc_pool_size; j++)
+            if (shd->desc_pool_size[j].type == desc[i].type)
+                break;
+        if (j >= shd->nb_desc_pool_size) {
+            shd->nb_desc_pool_size++;
+            av_assert1(shd->nb_desc_pool_size < FF_VK_MAX_DESCRIPTOR_TYPES);
         }
+
+        shd->desc_pool_size[j].type             = desc[i].type;
+        shd->desc_pool_size[j].descriptorCount += FFMAX(desc[i].elems, 1);
     }
 
     set->singular = singular;
@@ -2637,8 +2580,6 @@ print:
 int ff_vk_shader_register_exec(FFVulkanContext *s, FFVkExecPool *pool,
                                FFVulkanShader *shd)
 {
-    int err;
-
     if (!shd->nb_descriptor_sets)
         return 0;
 
@@ -2648,32 +2589,7 @@ int ff_vk_shader_register_exec(FFVulkanContext *s, 
FFVkExecPool *pool,
     sd->shd = shd;
     sd->nb_descriptor_sets = shd->nb_descriptor_sets;
 
-    if (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) {
-        for (int i = 0; i < sd->nb_descriptor_sets; i++) {
-            FFVulkanDescriptorSet *set = &shd->desc_set[i];
-            FFVulkanDescriptorSetData *sdb = &sd->desc_set_buf[i];
-            int nb = set->singular ? 1 : pool->pool_size;
-
-            err = ff_vk_create_buf(s, &sdb->buf,
-                                   set->aligned_size*nb,
-                                   NULL, NULL, set->usage,
-                                   VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
-                                   VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
-                                   VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
-            if (err < 0)
-                return err;
-
-            err = ff_vk_map_buffer(s, &sdb->buf, &sdb->desc_mem, 0);
-            if (err < 0)
-                return err;
-
-            sd->desc_bind[i] = (VkDescriptorBufferBindingInfoEXT) {
-                .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT,
-                .usage = set->usage,
-                .address = sdb->buf.address,
-            };
-        }
-    } else if (!shd->use_push) {
+    if (!shd->use_push) {
         VkResult ret;
         FFVulkanFunctions *vk = &s->vkfn;
         VkDescriptorSetLayout *tmp_layouts;
@@ -2744,25 +2660,6 @@ static inline const FFVulkanShaderData 
*get_shd_data(FFVkExecContext *e,
     return NULL;
 }
 
-static inline void update_set_descriptor(FFVulkanContext *s, FFVkExecContext 
*e,
-                                         FFVulkanShader *shd, int set,
-                                         int bind_idx, int array_idx,
-                                         VkDescriptorGetInfoEXT *desc_get_info,
-                                         size_t desc_size)
-{
-    FFVulkanFunctions *vk = &s->vkfn;
-    FFVulkanDescriptorSet *desc_set = &shd->desc_set[set];
-    const FFVulkanShaderData *sd = get_shd_data(e, shd);
-    const size_t exec_offset = desc_set->singular ? 0 : 
desc_set->aligned_size*e->idx;
-
-    void *desc = sd->desc_set_buf[set].desc_mem +     /* Base */
-                 exec_offset +                        /* Execution context */
-                 desc_set->binding_offset[bind_idx] + /* Descriptor binding */
-                 array_idx*desc_size;                 /* Array position */
-
-    vk->GetDescriptorEXT(s->hwctx->act_dev, desc_get_info, desc_size, desc);
-}
-
 static inline void update_set_pool_write(FFVulkanContext *s, FFVkExecContext 
*e,
                                          FFVulkanShader *shd, int set,
                                          VkWriteDescriptorSet *write_info)
@@ -2797,60 +2694,20 @@ int ff_vk_shader_update_img(FFVulkanContext *s, 
FFVkExecContext *e,
 {
     FFVulkanDescriptorSet *desc_set = &shd->desc_set[set];
 
-    if (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) {
-        VkDescriptorGetInfoEXT desc_get_info = {
-            .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT,
-            .type = desc_set->binding[bind].descriptorType,
-        };
-        VkDescriptorImageInfo desc_img_info = {
-            .imageView = view,
-            .sampler = sampler,
-            .imageLayout = layout,
-        };
-        size_t desc_size;
-
-        switch (desc_get_info.type) {
-        case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
-            desc_get_info.data.pSampledImage = &desc_img_info;
-            desc_size = s->desc_buf_props.sampledImageDescriptorSize;
-            break;
-        case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
-            desc_get_info.data.pStorageImage = &desc_img_info;
-            desc_size = s->desc_buf_props.storageImageDescriptorSize;
-            break;
-        case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
-            desc_get_info.data.pInputAttachmentImage = &desc_img_info;
-            desc_size = s->desc_buf_props.inputAttachmentDescriptorSize;
-            break;
-        case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
-            desc_get_info.data.pCombinedImageSampler = &desc_img_info;
-            desc_size = s->desc_buf_props.combinedImageSamplerDescriptorSize;
-            break;
-        default:
-            av_log(s, AV_LOG_ERROR, "Invalid descriptor type at set %i binding 
%i: %i!\n",
-                   set, bind, desc_get_info.type);
-            return AVERROR(EINVAL);
-            break;
-        };
-
-        update_set_descriptor(s, e, shd, set, bind, offs,
-                              &desc_get_info, desc_size);
-    } else {
-        VkDescriptorImageInfo desc_pool_write_info_img = {
-            .sampler = sampler,
-            .imageView = view,
-            .imageLayout = layout,
-        };
-        VkWriteDescriptorSet desc_pool_write_info = {
-            .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-            .dstBinding = bind,
-            .descriptorCount = 1,
-            .dstArrayElement = offs,
-            .descriptorType = desc_set->binding[bind].descriptorType,
-            .pImageInfo = &desc_pool_write_info_img,
-        };
-        update_set_pool_write(s, e, shd, set, &desc_pool_write_info);
-    }
+    VkDescriptorImageInfo desc_pool_write_info_img = {
+        .sampler = sampler,
+        .imageView = view,
+        .imageLayout = layout,
+    };
+    VkWriteDescriptorSet desc_pool_write_info = {
+        .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+        .dstBinding = bind,
+        .descriptorCount = 1,
+        .dstArrayElement = offs,
+        .descriptorType = desc_set->binding[bind].descriptorType,
+        .pImageInfo = &desc_pool_write_info_img,
+    };
+    update_set_pool_write(s, e, shd, set, &desc_pool_write_info);
 
     return 0;
 }
@@ -2876,60 +2733,20 @@ int ff_vk_shader_update_desc_buffer(FFVulkanContext *s, 
FFVkExecContext *e,
 {
     FFVulkanDescriptorSet *desc_set = &shd->desc_set[set];
 
-    if (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) {
-        VkDescriptorGetInfoEXT desc_get_info = {
-            .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT,
-            .type = desc_set->binding[bind].descriptorType,
-        };
-        VkDescriptorAddressInfoEXT desc_buf_info = {
-            .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT,
-            .address = buf->address + offset,
-            .range = len,
-            .format = fmt,
-        };
-        size_t desc_size;
-
-        switch (desc_get_info.type) {
-        case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
-            desc_get_info.data.pUniformBuffer = &desc_buf_info;
-            desc_size = s->desc_buf_props.uniformBufferDescriptorSize;
-            break;
-        case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
-            desc_get_info.data.pStorageBuffer = &desc_buf_info;
-            desc_size = s->desc_buf_props.storageBufferDescriptorSize;
-            break;
-        case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
-            desc_get_info.data.pUniformTexelBuffer = &desc_buf_info;
-            desc_size = s->desc_buf_props.uniformTexelBufferDescriptorSize;
-            break;
-        case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
-            desc_get_info.data.pStorageTexelBuffer = &desc_buf_info;
-            desc_size = s->desc_buf_props.storageTexelBufferDescriptorSize;
-            break;
-        default:
-            av_log(s, AV_LOG_ERROR, "Invalid descriptor type at set %i binding 
%i: %i!\n",
-                   set, bind, desc_get_info.type);
-            return AVERROR(EINVAL);
-            break;
-        };
-
-        update_set_descriptor(s, e, shd, set, bind, elem, &desc_get_info, 
desc_size);
-    } else {
-        VkDescriptorBufferInfo desc_pool_write_info_buf = {
-            .buffer = buf->buf,
-            .offset = buf->virtual_offset + offset,
-            .range = len,
-        };
-        VkWriteDescriptorSet desc_pool_write_info = {
-            .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-            .dstBinding = bind,
-            .descriptorCount = 1,
-            .dstArrayElement = elem,
-            .descriptorType = desc_set->binding[bind].descriptorType,
-            .pBufferInfo = &desc_pool_write_info_buf,
-        };
-        update_set_pool_write(s, e, shd, set, &desc_pool_write_info);
-    }
+    VkDescriptorBufferInfo desc_pool_write_info_buf = {
+        .buffer = buf->buf,
+        .offset = buf->virtual_offset + offset,
+        .range = len,
+    };
+    VkWriteDescriptorSet desc_pool_write_info = {
+        .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+        .dstBinding = bind,
+        .descriptorCount = 1,
+        .dstArrayElement = elem,
+        .descriptorType = desc_set->binding[bind].descriptorType,
+        .pBufferInfo = &desc_pool_write_info_buf,
+    };
+    update_set_pool_write(s, e, shd, set, &desc_pool_write_info);
 
     return 0;
 }
@@ -2948,7 +2765,6 @@ void ff_vk_exec_bind_shader(FFVulkanContext *s, 
FFVkExecContext *e,
                             FFVulkanShader *shd)
 {
     FFVulkanFunctions *vk = &s->vkfn;
-    VkDeviceSize offsets[1024];
     const FFVulkanShaderData *sd = get_shd_data(e, shd);
 
     if (s->extensions & FF_VK_EXT_SHADER_OBJECT) {
@@ -2959,20 +2775,7 @@ void ff_vk_exec_bind_shader(FFVulkanContext *s, 
FFVkExecContext *e,
     }
 
     if (sd && sd->nb_descriptor_sets) {
-        if (s->extensions & FF_VK_EXT_DESCRIPTOR_BUFFER) {
-            for (int i = 0; i < sd->nb_descriptor_sets; i++)
-                offsets[i] = shd->desc_set[i].singular ?
-                             0 : shd->desc_set[i].aligned_size*e->idx;
-
-            /* Bind descriptor buffers */
-            vk->CmdBindDescriptorBuffersEXT(e->buf, sd->nb_descriptor_sets,
-                                            sd->desc_bind);
-            /* Binding offsets */
-            vk->CmdSetDescriptorBufferOffsetsEXT(e->buf, shd->bind_point,
-                                                 shd->pipeline_layout,
-                                                 0, sd->nb_descriptor_sets,
-                                                 shd->bound_buffer_indices, 
offsets);
-        } else if (!shd->use_push) {
+        if (!shd->use_push) {
             vk->CmdBindDescriptorSets(e->buf, shd->bind_point, 
shd->pipeline_layout,
                                       0, sd->nb_descriptor_sets,
                                       
&sd->desc_sets[e->idx*sd->nb_descriptor_sets],
diff --git a/libavutil/vulkan.h b/libavutil/vulkan.h
index 6a30a68280..9d1a53e2be 100644
--- a/libavutil/vulkan.h
+++ b/libavutil/vulkan.h
@@ -258,9 +258,8 @@ typedef struct FFVulkanShader {
     FFVulkanDescriptorSet desc_set[FF_VK_MAX_DESCRIPTOR_SETS];
     int nb_descriptor_sets;
 
-    /* Descriptor buffer */
+    /* Descriptors */
     VkDescriptorSetLayout desc_layout[FF_VK_MAX_DESCRIPTOR_SETS];
-    uint32_t bound_buffer_indices[FF_VK_MAX_DESCRIPTOR_SETS];
 
     /* Descriptor pool */
     int use_push;
diff --git a/libavutil/vulkan_functions.h b/libavutil/vulkan_functions.h
index 79fb02e8e5..d4be2ca4e0 100644
--- a/libavutil/vulkan_functions.h
+++ b/libavutil/vulkan_functions.h
@@ -39,7 +39,6 @@ typedef uint64_t FFVulkanExtensions;
 #define FF_VK_EXT_EXTERNAL_WIN32_MEMORY  (1ULL <<  6) /* 
VK_KHR_external_memory_win32 */
 #define FF_VK_EXT_EXTERNAL_WIN32_SEM     (1ULL <<  7) /* 
VK_KHR_external_semaphore_win32 */
 
-#define FF_VK_EXT_DESCRIPTOR_BUFFER      (1ULL <<  8) /* 
VK_EXT_descriptor_buffer */
 #define FF_VK_EXT_DEVICE_DRM             (1ULL <<  9) /* 
VK_EXT_physical_device_drm */
 #define FF_VK_EXT_ATOMIC_FLOAT           (1ULL << 10) /* 
VK_EXT_shader_atomic_float */
 #define FF_VK_EXT_COOP_MATRIX            (1ULL << 11) /* 
VK_KHR_cooperative_matrix */
@@ -188,13 +187,6 @@ typedef uint64_t FFVulkanExtensions;
     MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyDescriptorPool)         
          \
     MACRO(1, 1, FF_VK_EXT_NO_FLAG,              DestroyDescriptorSetLayout)    
          \
                                                                                
          \
-    /* Descriptor buffers */                                                   
            \
-    MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER,    GetDescriptorSetLayoutSizeEXT) 
            \
-    MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER,    
GetDescriptorSetLayoutBindingOffsetEXT)    \
-    MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER,    GetDescriptorEXT)              
            \
-    MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER,    CmdBindDescriptorBuffersEXT)   
            \
-    MACRO(1, 1, FF_VK_EXT_DESCRIPTOR_BUFFER,    
CmdSetDescriptorBufferOffsetsEXT)          \
-                                                                               
            \
     /* DescriptorUpdateTemplate */                                             
          \
     MACRO(1, 1, FF_VK_EXT_NO_FLAG,              
UpdateDescriptorSetWithTemplate)         \
     MACRO(1, 1, FF_VK_EXT_NO_FLAG,              
CreateDescriptorUpdateTemplate)          \
diff --git a/libavutil/vulkan_loader.h b/libavutil/vulkan_loader.h
index c3c43562a5..45a296e2fa 100644
--- a/libavutil/vulkan_loader.h
+++ b/libavutil/vulkan_loader.h
@@ -78,7 +78,6 @@ static inline uint64_t ff_vk_extensions_to_mask(const char * 
const *extensions,
         { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,     
FF_VK_EXT_EXTERNAL_WIN32_MEMORY  },
         { VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME,  
FF_VK_EXT_EXTERNAL_WIN32_SEM     },
 #endif
-        { VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME,         
FF_VK_EXT_DESCRIPTOR_BUFFER,     },
         { VK_KHR_VIDEO_QUEUE_EXTENSION_NAME,               
FF_VK_EXT_VIDEO_QUEUE            },
         { VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME,        
FF_VK_EXT_VIDEO_ENCODE_QUEUE     },
         { VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME,        
FF_VK_EXT_VIDEO_DECODE_QUEUE     },

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to