From patchwork Wed Aug 14 14:33:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51020 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:a746:0:b0:489:2eb3:e4c4 with SMTP id f6csp962240vqm; Wed, 14 Aug 2024 07:41:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXUFtC7i0ZCKXyN8ZnC6GM78zUuRug5yAQEY1QOxR8O+LiPhQVmRhh06FKCu2KXxfSP4sbW+FFQ5SEcz5FachdC8NUnh4/zqhag3A== X-Google-Smtp-Source: AGHT+IFF7erbrEeWFZ2nda3RhZ2XYgkP6UleiCFyFYTAndSeEQRz6ZGebnrz4H0SKh8Bqbvw64eY X-Received: by 2002:a05:6512:3b1e:b0:530:baec:3975 with SMTP id 2adb3069b0e04-532eda5b322mr1353338e87.1.1723646479091; Wed, 14 Aug 2024 07:41:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1723646479; cv=none; d=google.com; s=arc-20160816; b=PpyCcpj/fv7cst1fXUp52bCKwHcU1lXq0cJ48ERNcbRtPI2NiXsO3N8oTv5P8mbwnU alUYnxChyPlOM/4Qjgz/VIw7o69yhe8ITT4BENJU62FSOnnVBdLX5Lm+kyuFJQvQkt98 YRJLFHHFhSWSYjvDqY96kRCjsB79GNcZ3aPIWEtJtW9QXXeSM1PyffzAcmzxHMR3Jh80 IZ63rvxsHbzOiSALyVcwK19cUiDpeG4i3kZAizEKy3iog5FzKlxD710eQi1tFd7XOGgm NZRt1vWgjX0Ep24H+IDhDmYp9XFnmYsbloBIDRUpeG7ii3N6EpDoTyu6/4xePdUab5/l HfDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to :delivered-to; bh=jJJULMYaMt4Y72tlkAUymEYGxb0iuD/qJIuQVTuLp9k=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=GWXeYEO5ZiWm/di9smcAJKDOZJEEaWkxiOHFDV/JIybTs8lYAE1yiFNsNRCB6C03fg zqmtJSVUkvYjK8aRaWD8F4uJ6ZQF2b8C4dtnkocgl80jy50eN/+eUVKsiVBEz9oTUwcH Or4GWzXzsv7hYU3CjfgXJLROdGr9KYIimtUH0rVLn2DAz2hDq3ckbKISlrj5JHJVC8SY xGRkprdnlueYNAW5CtNx60/naJVGdxvYX4Ro5vlVdxdls4ck+jQXUBVy26R9NC8vgdOf HKAUoZoYXBLqsYaFt9YMo9bKXIKOsAJZhBQjYCGjHTr5IuNEu8p0EMW3B8ebBd0QNMzr Fpxw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 2adb3069b0e04-53200e96319si2954523e87.29.2024.08.14.07.41.18; Wed, 14 Aug 2024 07:41:19 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E0F6768DB59; Wed, 14 Aug 2024 17:34:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 93F8F68DB53 for ; Wed, 14 Aug 2024 17:33:55 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Wed, 14 Aug 2024 16:33:42 +0200 Message-ID: <20240814143351.841585-1-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] vulkan_decode: use the correct queue family for decoding ops X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: PZ8N6a86oVDK In 680d969a305c0927480573a1b455024088b51aeb, the new API was used to find a queue family for dispatch, but the found queue family was not used for decoding, just for dispatching. --- libavcodec/vulkan_decode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index b89bfa17f2..c7a32cc439 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -1198,7 +1198,7 @@ int ff_vk_decode_init(AVCodecContext *avctx) nb_q = 1; session_create.flags = 0x0; - session_create.queueFamilyIndex = s->hwctx->queue_family_decode_index; + session_create.queueFamilyIndex = ctx->qf.queue_family; session_create.maxCodedExtent = ctx->caps.maxCodedExtent; session_create.maxDpbSlots = ctx->caps.maxDpbSlots; session_create.maxActiveReferencePictures = ctx->caps.maxActiveReferencePictures; From patchwork Wed Aug 14 14:33:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51015 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:a746:0:b0:489:2eb3:e4c4 with SMTP id f6csp962194vqm; Wed, 14 Aug 2024 07:41:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXRwhrOyB78CBC7nwye5XrdVkbWFT7aJ3MWS7FW5cDPdg0EMtnz6FAwWhXDXKhTo01BmQPvK8jYS4W85H/YGE8/@gmail.com X-Google-Smtp-Source: AGHT+IG7NDu7utvafACK8ZThtZ+FdSDLfMCMLPSFa6zlqjatxXNk20bgcYLrpQbNPC2vWrjtZvHJ X-Received: by 2002:a17:907:980b:b0:a80:91b0:f501 with SMTP id a640c23a62f3a-a8366d6fc56mr107921366b.4.1723646474244; Wed, 14 Aug 2024 07:41:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1723646474; cv=none; d=google.com; s=arc-20160816; b=qEkijg8iKub8jNY1EYQiAECiJn+qtYmuFYDnAoqvanZmw7eqoo+H7/MljBIrsQul5M Z8ZbFKyhY+hdsEUJVsGUNJn07qUHk7pXAlo9swh1CqsurmNg+aJw8/1H4DY7+sR1xTj7 K49MudBualOjqHILyEkjfK7wdtuBVlYUN0zgZzYXZSRfTq6kCd3cdBm2a9dPbDjJlK+Z r0BAj783zWjt+m9WBWxyEbdOZPrUMRHhlas+qXvFFatZLn6qWAqP3+jQMPRZJmSuzExG bNYmA/f478iwGCBT0d7d13NVxmvlXYyX2DwocaiiICYq1IjHAKezhAUGbz5QYZc+uZJF G6Eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=kax+AiGepH9vqW0uujrZJIdHkBDQprRoLgq6PTbh8Ow=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=dW744sP/rQNCKM36nwT0l6/Lo5n1wY5xcf8jKbI36EpDhEx4cfZwSHXYkqS2xlABs5 weJ4ca6sXfn5GTN/JMdmNFr+4mVNl6Gs9jzJ+BsJYhFxVNquWNHdm1TV5iYwlH7k7QQm gw6dlluf7dL3q4kbM3TD4+aUSW67ElxG80btIkBI3dFh6qf9Gp4C6Q/bpDC86UTpFCOy IDa3ac0Jv6tTz3oQYjxyy6v1YuJsyTENTvkdwtq2QfcFFXpAKLUxm5fk2J1LxUvyt3Ik +Q9p/+eHrqsF7jWIjUi3Zs5E7ATLv0pCqJJaCjScr3OuIC2qc+gL7J8+Owap+W5m5uxh iBHg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a80f411c1e5si225177566b.389.2024.08.14.07.41.13; Wed, 14 Aug 2024 07:41:14 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 585FF68DB5F; Wed, 14 Aug 2024 17:34:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 89A5D68DB5C for ; Wed, 14 Aug 2024 17:34:00 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Wed, 14 Aug 2024 16:33:43 +0200 Message-ID: <20240814143351.841585-2-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20240814143351.841585-1-dev@lynne.ee> References: <20240814143351.841585-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] hwcontext_vulkan: fix user layers, add support for different debug modes X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1zdDbwPcSw55 The validation layer option only supported GPU-assisted validation. This is mutually exclusive with shader debug printfs, so we need to differentiate between the two. This also fixes issues with user-given layers, and leaks in case of errors. --- libavutil/hwcontext_vulkan.c | 215 +++++++++++++++++++++++------------ 1 file changed, 143 insertions(+), 72 deletions(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 55dd657ddd..506629141e 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -498,8 +498,19 @@ static VkBool32 VKAPI_CALL vk_dbg_callback(VkDebugUtilsMessageSeverityFlagBitsEX av_free((void *)props); \ } +enum FFVulkanDebugMode { + FF_VULKAN_DEBUG_NONE = 0, + /* Standard GPU-assisted validation */ + FF_VULKAN_DEBUG_VALIDATE = 1, + /* Passes printfs in shaders to the debug callback */ + FF_VULKAN_DEBUG_PRINTF = 2, + /* Enables extra printouts */ + FF_VULKAN_DEBUG_PRACTICES = 3, +}; + static int check_extensions(AVHWDeviceContext *ctx, int dev, AVDictionary *opts, - const char * const **dst, uint32_t *num, int debug) + const char * const **dst, uint32_t *num, + enum FFVulkanDebugMode debug_mode) { const char *tstr; const char **extension_names = NULL; @@ -571,7 +582,10 @@ static int check_extensions(AVHWDeviceContext *ctx, int dev, AVDictionary *opts, ADD_VAL_TO_LIST(extension_names, extensions_found, tstr); } - if (debug && !dev) { + if (!dev && + ((debug_mode == FF_VULKAN_DEBUG_VALIDATE) || + (debug_mode == FF_VULKAN_DEBUG_PRINTF) || + (debug_mode == FF_VULKAN_DEBUG_PRACTICES))) { tstr = VK_EXT_DEBUG_UTILS_EXTENSION_NAME; found = 0; for (int j = 0; j < sup_ext_count; j++) { @@ -627,20 +641,21 @@ fail: return err; } -static int check_validation_layers(AVHWDeviceContext *ctx, AVDictionary *opts, - const char * const **dst, uint32_t *num, - int *debug_mode) +static int check_layers(AVHWDeviceContext *ctx, AVDictionary *opts, + const char * const **dst, uint32_t *num, + enum FFVulkanDebugMode *debug_mode) { - static const char default_layer[] = { "VK_LAYER_KHRONOS_validation" }; - - int found = 0, err = 0; + int err = 0; VulkanDevicePriv *priv = ctx->hwctx; FFVulkanFunctions *vk = &priv->vkctx.vkfn; + static const char layer_standard_validation[] = { "VK_LAYER_KHRONOS_validation" }; + int layer_standard_validation_found = 0; + uint32_t sup_layer_count; VkLayerProperties *sup_layers; - AVDictionaryEntry *user_layers; + AVDictionaryEntry *user_layers = av_dict_get(opts, "validation_layers", NULL, 0); char *user_layers_str = NULL; char *save, *token; @@ -648,99 +663,134 @@ static int check_validation_layers(AVHWDeviceContext *ctx, AVDictionary *opts, uint32_t enabled_layers_count = 0; AVDictionaryEntry *debug_opt = av_dict_get(opts, "debug", NULL, 0); - int debug = debug_opt && strtol(debug_opt->value, NULL, 10); + enum FFVulkanDebugMode mode; - /* If `debug=0`, enable no layers at all. */ - if (debug_opt && !debug) - return 0; + *debug_mode = mode = FF_VULKAN_DEBUG_NONE; + /* Get a list of all layers */ vk->EnumerateInstanceLayerProperties(&sup_layer_count, NULL); sup_layers = av_malloc_array(sup_layer_count, sizeof(VkLayerProperties)); if (!sup_layers) return AVERROR(ENOMEM); vk->EnumerateInstanceLayerProperties(&sup_layer_count, sup_layers); - av_log(ctx, AV_LOG_VERBOSE, "Supported validation layers:\n"); + av_log(ctx, AV_LOG_VERBOSE, "Supported layers:\n"); for (int i = 0; i < sup_layer_count; i++) av_log(ctx, AV_LOG_VERBOSE, "\t%s\n", sup_layers[i].layerName); - /* If `debug=1` is specified, enable the standard validation layer extension */ - if (debug) { - *debug_mode = debug; + /* If no user layers or debug layers are given, return */ + if (!debug_opt && !user_layers) + goto end; + + /* Check for any properly supported validation layer */ + if (debug_opt) { + if (!strcmp(debug_opt->value, "printf")) { + mode = FF_VULKAN_DEBUG_PRINTF; + } else if (!strcmp(debug_opt->value, "validate")) { + mode = FF_VULKAN_DEBUG_VALIDATE; + } else if (!strcmp(debug_opt->value, "practices")) { + mode = FF_VULKAN_DEBUG_PRACTICES; + } else { + int idx = strtol(debug_opt->value, NULL, 10); + if (idx < 0 || idx > FF_VULKAN_DEBUG_PRACTICES) { + av_log(ctx, AV_LOG_ERROR, "Invalid debugging mode \"%s\"\n", + debug_opt->value); + err = AVERROR(EINVAL); + goto end; + } + mode = idx; + } + } + + /* If mode is VALIDATE or PRINTF, try to find the standard validation layer extension */ + if ((mode == FF_VULKAN_DEBUG_VALIDATE) || + (mode == FF_VULKAN_DEBUG_PRINTF) || + (mode == FF_VULKAN_DEBUG_PRACTICES)) { for (int i = 0; i < sup_layer_count; i++) { - if (!strcmp(default_layer, sup_layers[i].layerName)) { - found = 1; - av_log(ctx, AV_LOG_VERBOSE, "Default validation layer %s is enabled\n", - default_layer); - ADD_VAL_TO_LIST(enabled_layers, enabled_layers_count, default_layer); + if (!strcmp(layer_standard_validation, sup_layers[i].layerName)) { + av_log(ctx, AV_LOG_VERBOSE, "Standard validation layer %s is enabled\n", + layer_standard_validation); + ADD_VAL_TO_LIST(enabled_layers, enabled_layers_count, layer_standard_validation); + *debug_mode = mode; + layer_standard_validation_found = 1; break; } } + if (!layer_standard_validation_found) { + av_log(ctx, AV_LOG_ERROR, + "Validation Layer \"%s\" not supported\n", layer_standard_validation); + err = AVERROR(ENOTSUP); + goto end; + } } - user_layers = av_dict_get(opts, "validation_layers", NULL, 0); - if (!user_layers) - goto end; + /* Process any custom layers enabled */ + if (user_layers) { + int found; - user_layers_str = av_strdup(user_layers->value); - if (!user_layers_str) { - err = AVERROR(ENOMEM); - goto fail; - } + user_layers_str = av_strdup(user_layers->value); + if (!user_layers_str) { + err = AVERROR(ENOMEM); + goto fail; + } - token = av_strtok(user_layers_str, "+", &save); - while (token) { - found = 0; - if (!strcmp(default_layer, token)) { - if (debug) { - /* if the `debug=1`, default_layer is enabled, skip here */ + token = av_strtok(user_layers_str, "+", &save); + while (token) { + found = 0; + + /* If debug=1/2 was specified as an option, skip this layer */ + if (!strcmp(layer_standard_validation, token) && layer_standard_validation_found) { token = av_strtok(NULL, "+", &save); - continue; - } else { - /* if the `debug=0`, enable debug mode to load its callback properly */ - *debug_mode = debug; - } - } - for (int j = 0; j < sup_layer_count; j++) { - if (!strcmp(token, sup_layers[j].layerName)) { - found = 1; break; } - } - if (found) { - av_log(ctx, AV_LOG_VERBOSE, "Requested Validation Layer: %s\n", token); - ADD_VAL_TO_LIST(enabled_layers, enabled_layers_count, token); - } else { - av_log(ctx, AV_LOG_ERROR, - "Validation Layer \"%s\" not support.\n", token); - err = AVERROR(EINVAL); - goto fail; - } - token = av_strtok(NULL, "+", &save); - } - av_free(user_layers_str); + /* Try to find the layer in the list of supported layers */ + for (int j = 0; j < sup_layer_count; j++) { + if (!strcmp(token, sup_layers[j].layerName)) { + found = 1; + break; + } + } -end: - av_free(sup_layers); + if (found) { + av_log(ctx, AV_LOG_VERBOSE, "Requested layer: %s\n", token); + ADD_VAL_TO_LIST(enabled_layers, enabled_layers_count, token); - *dst = enabled_layers; - *num = enabled_layers_count; + /* If debug was not set as an option, force it */ + if (!strcmp(layer_standard_validation, token)) + *debug_mode = FF_VULKAN_DEBUG_VALIDATE; + } else { + av_log(ctx, AV_LOG_ERROR, + "Layer \"%s\" not supported\n", token); + err = AVERROR(EINVAL); + goto end; + } - return 0; + token = av_strtok(NULL, "+", &save); + } + } fail: - RELEASE_PROPS(enabled_layers, enabled_layers_count); +end: av_free(sup_layers); av_free(user_layers_str); + + if (err < 0) { + RELEASE_PROPS(enabled_layers, enabled_layers_count); + } else { + *dst = enabled_layers; + *num = enabled_layers_count; + } + return err; } /* Creates a VkInstance */ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) { - int err = 0, debug_mode = 0; + int err = 0; VkResult ret; + enum FFVulkanDebugMode debug_mode; VulkanDevicePriv *p = ctx->hwctx; AVVulkanDeviceContext *hwctx = &p->p; FFVulkanFunctions *vk = &p->vkctx.vkfn; @@ -776,8 +826,8 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) return err; } - err = check_validation_layers(ctx, opts, &inst_props.ppEnabledLayerNames, - &inst_props.enabledLayerCount, &debug_mode); + err = check_layers(ctx, opts, &inst_props.ppEnabledLayerNames, + &inst_props.enabledLayerCount, &debug_mode); if (err) goto fail; @@ -789,14 +839,32 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) if (err < 0) goto fail; - if (debug_mode) { - static const VkValidationFeatureEnableEXT feat_list[] = { + /* Enable debug features if needed */ + if (debug_mode == FF_VULKAN_DEBUG_VALIDATE) { + static const VkValidationFeatureEnableEXT feat_list_validate[] = { + VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT, + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT, + }; + validation_features.pEnabledValidationFeatures = feat_list_validate; + validation_features.enabledValidationFeatureCount = FF_ARRAY_ELEMS(feat_list_validate); + inst_props.pNext = &validation_features; + } else if (debug_mode == FF_VULKAN_DEBUG_PRINTF) { + static const VkValidationFeatureEnableEXT feat_list_debug[] = { + VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT, VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, + VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT, + }; + validation_features.pEnabledValidationFeatures = feat_list_debug; + validation_features.enabledValidationFeatureCount = FF_ARRAY_ELEMS(feat_list_debug); + inst_props.pNext = &validation_features; + } else if (debug_mode == FF_VULKAN_DEBUG_PRACTICES) { + static const VkValidationFeatureEnableEXT feat_list_practices[] = { VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT, + VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT, }; - validation_features.pEnabledValidationFeatures = feat_list; - validation_features.enabledValidationFeatureCount = FF_ARRAY_ELEMS(feat_list); + validation_features.pEnabledValidationFeatures = feat_list_practices; + validation_features.enabledValidationFeatureCount = FF_ARRAY_ELEMS(feat_list_practices); inst_props.pNext = &validation_features; } @@ -827,7 +895,10 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) goto fail; } - if (debug_mode) { + /* Setup debugging callback if needed */ + if ((debug_mode == FF_VULKAN_DEBUG_VALIDATE) || + (debug_mode == FF_VULKAN_DEBUG_PRINTF) || + (debug_mode == FF_VULKAN_DEBUG_PRACTICES)) { VkDebugUtilsMessengerCreateInfoEXT dbg = { .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, .messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | From patchwork Wed Aug 14 14:33:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51016 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:a746:0:b0:489:2eb3:e4c4 with SMTP id f6csp957887vqm; Wed, 14 Aug 2024 07:34:26 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX+QJ0mFQ/qHZ+vgRYyw1pW22t7x8Pi8Hb3/+Bcuuivf/3ndOH89YrhqtcL22rHIuIqR52Fq080F3uKZA0k5xBR@gmail.com X-Google-Smtp-Source: AGHT+IHbPFSxmKlY7XXMY856Sd5HGJPU155gSAfDeCS7twksxuZD9q7cD4t9pI1tTWJVns5uDZlu X-Received: by 2002:a05:6512:ea0:b0:52f:cfba:403c with SMTP id 2adb3069b0e04-532eda739camr1019968e87.3.1723646065858; Wed, 14 Aug 2024 07:34:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1723646065; cv=none; d=google.com; s=arc-20160816; b=gZ1XF/ckz+ZYdq9hQZp1VhKQyOYakl8xik7aAQOywuuGegcKVpLsv7q0CmDFF3is1y PEpcWUS/NVH9bBLBXx48AxM3XWN+8Kzt8yFrMJ/GUnRiCWFOmAUXKa0LZDR1bCr5npIV dH2FkbfQn4JjA/d3AXgmzgNxZwOLgTsuHREv084qh60c5jYLW0qwJuQMEzmc9nuMGYHT sB1qfXRqR8wHyqo2QsztjhTiiCAm9t3cRIZJaeHPliPC7VQtwdMZVx5ccM9x4OKidL4L Xgk5AoThKPeDhHGSnGTRWxDHxx4Hc2Zollskz+Y3sNFP+FFWtmOLbx2ztEDj2RwflYeo ivwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=33sFnakGGzL5ahsHjZziWvMqJknc65XNn6F9OUfS+rI=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=f+2pwtmYSgSnua9g7IjWkKhJAcnGeP7C8ge2+xEG0xi87tV4f/UFR0zjsIyeDcJsfj qAqUKQ2TEFfjmTaTno9MpTfJmK7avIiwl+zZrjiha3dfGnAiuKx79i6A2au9O90kN2Cr MEeuHK3gp6mAT6rheIikDyANekgP5Xsf27/BR6iCJTUITIYh6/fPIEfKUC7kCa+d64xs E73iK6AUbW/ciXwvc84iAjD5Qdmp4fTPh+DJIutpLM/dJH2J1tLLT8SHxCpwBAuMCNiu 3txfAHLRKGDhsmzQuhtdM1fdPgNY81XdkEL6fnkgkvo+i9apUcb5kZ1xtRnT0wPPg2h3 p5aQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a80f3fa8efesi203995966b.240.2024.08.14.07.34.25; Wed, 14 Aug 2024 07:34:25 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B280368DB6B; Wed, 14 Aug 2024 17:34:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 48CD368DB57 for ; Wed, 14 Aug 2024 17:34:01 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Wed, 14 Aug 2024 16:33:44 +0200 Message-ID: <20240814143351.841585-3-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20240814143351.841585-1-dev@lynne.ee> References: <20240814143351.841585-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] hwcontext_vulkan: don't enable deprecated VK_KHR_sampler_ycbcr_conversion extension X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: xkiImOhjFkyz It was added to Vulkan 1.1 a long time ago. Validation layer will warn if this is enabled. --- libavutil/hwcontext_vulkan.c | 1 - 1 file changed, 1 deletion(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 506629141e..2c958b86bb 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -416,7 +416,6 @@ static const VulkanOptExtension optional_device_exts[] = { /* Misc or required by other extensions */ { VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, FF_VK_EXT_NO_FLAG }, { VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, FF_VK_EXT_NO_FLAG }, - { VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, FF_VK_EXT_NO_FLAG }, { 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 }, From patchwork Wed Aug 14 14:33:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51019 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:a746:0:b0:489:2eb3:e4c4 with SMTP id f6csp962224vqm; Wed, 14 Aug 2024 07:41:17 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXL9hqH+hmlEI0J+4a4vVi/KPfpwblx3ng6BcjB88LU4gEMLWr5MT0qmoIPK/R5Dzj9Ji8zNuodmzb3u8HUfthp@gmail.com X-Google-Smtp-Source: AGHT+IHEI53iuT4AkPk4j5St8KF7Eqpd/mMqA5A5HUZuJFLU/mfMigrGyX0DEZvwyxkhcDGuV8k9 X-Received: by 2002:a05:6512:2314:b0:530:db20:1f0e with SMTP id 2adb3069b0e04-532edbad9d3mr1146438e87.5.1723646477430; Wed, 14 Aug 2024 07:41:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1723646477; cv=none; d=google.com; s=arc-20160816; b=Thb3X1xYrY9CKKc+v/B1qdEOGZfhs+kMdwYEmBmYdTw79V1miLRxVYWdUbu3+4tc3y O3o2xnPA/zraAzaYrIb/mEcapcndQaD3XPgsW8uizAbgrnR7FN1aQJ3/cnqt9gskUrjo VTYNjDgUDeGCi5S+RQQcDdoLVorirj3hbFB2LYzNJbQHxd6m1q4oileap8U4px1gWnbW UNnVQzF0YHfoJ75VpYS/wRZAxvlb9f2xfH6v32LU2zL9RO5rRYmbO8+CN5ogiw1/7A8W Wh6q8Wnbyd+a8yMW/PRYjHexRoYdlQUNOrexM3a65Ro0vDoTlxGagE+Tw96KfFM1VZD5 nvqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=1I/sd8npXjXXu+Z2maQ06r37owGp6XR8pfiZxNEiPrc=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=dsX48xrmIARUKcanPaFjSRzrCw0F4LCfdhJarjbmILCWdNcB02qZlVSfEwoGVTVgns MDpRbg3ju65Hn2uv3pHoE3KGA8yiHo5ur/zOb55YKUkHst/gjSzHgjhdkpig8TDqzg6S f21nJACW/dKKuq9aoAHmOhfs37Q2I5oAIUfguCOWK9Goj/MXPezwB89zIfwExysSwPfr O2hM6mzxaMplg5q4RKGCW3fmZy+fCK/hYhTXF9lK5Z4f+15Lp61tcxEuLyUPLq27S0pJ tPBq1Q/MyP1F8L773XJEhucwh9BASD2GostJDSwsPUI+r39qTKJpfF0laBxhwSUWOTTI uGVg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a80f41849edsi217294966b.786.2024.08.14.07.41.16; Wed, 14 Aug 2024 07:41:17 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0687B68DB70; Wed, 14 Aug 2024 17:34:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9760668DB64 for ; Wed, 14 Aug 2024 17:34:03 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Wed, 14 Aug 2024 16:33:45 +0200 Message-ID: <20240814143351.841585-4-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20240814143351.841585-1-dev@lynne.ee> References: <20240814143351.841585-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] hwcontext_vulkan: setup extensions before features X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kT6yQwD1zDD5 The issue is that enabling features requires that the device extension is supported. The extensions bitfield was set later, so it was always 0, leading to no features being added. --- libavutil/hwcontext_vulkan.c | 73 +++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 2c958b86bb..18148353c2 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -1440,35 +1440,6 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, }; - hwctx->device_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - hwctx->device_features.pNext = &p->device_features_1_1; - p->device_features_1_1.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES; - p->device_features_1_1.pNext = &p->device_features_1_2; - p->device_features_1_2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; - p->device_features_1_2.pNext = &p->device_features_1_3; - p->device_features_1_3.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; - p->device_features_1_3.pNext = NULL; - -#define OPT_CHAIN(EXT_FLAG, STRUCT_P, TYPE) \ - do { \ - if (p->vkctx.extensions & EXT_FLAG) { \ - (STRUCT_P)->sType = TYPE; \ - ff_vk_link_struct(hwctx->device_features.pNext, STRUCT_P); \ - } \ - } while (0) - - OPT_CHAIN(FF_VK_EXT_DESCRIPTOR_BUFFER, &p->desc_buf_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT); - OPT_CHAIN(FF_VK_EXT_ATOMIC_FLOAT, &p->atomic_float_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT); - OPT_CHAIN(FF_VK_EXT_COOP_MATRIX, &p->coop_matrix_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR); - OPT_CHAIN(FF_VK_EXT_SHADER_OBJECT, &p->shader_object_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT); - OPT_CHAIN(FF_VK_EXT_OPTICAL_FLOW, &p->optical_flow_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV); -#undef OPT_CHAIN - ctx->free = vulkan_device_free; /* Create an instance if not given one */ @@ -1537,12 +1508,7 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, p->shader_object_features.shaderObject = shader_object_features.shaderObject; - dev_info.pNext = &hwctx->device_features; - - /* Setup queue family */ - if ((err = setup_queue_families(ctx, &dev_info))) - goto end; - + /* Find and enable extensions */ if ((err = check_extensions(ctx, 1, opts, &dev_info.ppEnabledExtensionNames, &dev_info.enabledExtensionCount, 0))) { for (int i = 0; i < dev_info.queueCreateInfoCount; i++) @@ -1551,6 +1517,43 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, goto end; } + /* Setup enabled device features */ + hwctx->device_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; + hwctx->device_features.pNext = &p->device_features_1_1; + p->device_features_1_1.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES; + p->device_features_1_1.pNext = &p->device_features_1_2; + p->device_features_1_2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; + p->device_features_1_2.pNext = &p->device_features_1_3; + p->device_features_1_3.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; + p->device_features_1_3.pNext = NULL; + +#define OPT_CHAIN(EXT_FLAG, STRUCT_P, TYPE) \ + do { \ + if (p->vkctx.extensions & EXT_FLAG) { \ + (STRUCT_P)->sType = TYPE; \ + ff_vk_link_struct(hwctx->device_features.pNext, STRUCT_P); \ + } \ + } while (0) + + OPT_CHAIN(FF_VK_EXT_DESCRIPTOR_BUFFER, &p->desc_buf_features, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT); + OPT_CHAIN(FF_VK_EXT_ATOMIC_FLOAT, &p->atomic_float_features, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT); + OPT_CHAIN(FF_VK_EXT_COOP_MATRIX, &p->coop_matrix_features, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR); + OPT_CHAIN(FF_VK_EXT_SHADER_OBJECT, &p->shader_object_features, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT); + OPT_CHAIN(FF_VK_EXT_OPTICAL_FLOW, &p->optical_flow_features, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV); +#undef OPT_CHAIN + + /* Add the enabled features into the pnext chain of device creation */ + dev_info.pNext = &hwctx->device_features; + + /* Setup enabled queue families */ + if ((err = setup_queue_families(ctx, &dev_info))) + goto end; + ret = vk->CreateDevice(hwctx->phys_dev, &dev_info, hwctx->alloc, &hwctx->act_dev);