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 },