From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id D3DE84C928 for ; Mon, 27 Oct 2025 10:47:48 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'Ha5PvxaRiPS0sSQeI1UEjqdSerCMK94LIxd/WLQHMYo=', expected b'1csg1KV/C7TTaIjpILs0GHNwL2HOi9gVu243BjlHPrk=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1761562058; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=Ha5PvxaRiPS0sSQeI1UEjqdSerCMK94LIxd/WLQHMYo=; b=Mlf+PTu3u/eSZ8kfAf//6Qd9eyfVUJAxVDsAq0AcHU0RXaqasMte3PtTKWdT6/MiHgaTy kivS48QBXcTqp7RfXvK67Dxl+8iPp8mcaEyjXKDWoIrh3A+Eh7ADuRoNpsT29eyQmToVsLa jZ+Ndt8C6GeCoDbj/Gk+NaopkRjc/pK7opqfJnWr4XL/A8aLfqb0+5Z17F8G5zQYaCCNhtQ cYHkNuo0GGjOhPpUkfPHclrzUVPbwOrLwscslRd82XJEAfhN3AyuL/h/EkMZwhrLoF84QLx CgQEHw5iHMSunVL3/m7DFQudsXD5MeCa4a1sBKKdThi2sSlxb8bnEpXfntVA== Received: from [172.19.0.2] (unknown [172.19.0.2]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 4E72568F6D3; Mon, 27 Oct 2025 12:47:38 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1761562035; b=nSjS098CtBllJDa/Qg6i8wC5hgEC3/n5JzSJmlpwOjiC80AQtnJX65MWcRopq+5OPJuMz XlPrvX0vi0wEvNujTjRQIk0YBiycef7TBx3mwydEdUnceRgundgRq17gvXAA7Y+0yA+WQ/M DWiDX1EvFrz/+VhEyfMMbiOAoMVGfRePVuV+OXxK/j6PXs3Z2sldgaNaGOnvz0NXRIE2MAa x2vU3OkahahJ81dnXuTiofremfFtMnknokumG6YxJK2CM2HjRQdW2c7hxyPAK6DZSeXwvGv 4H6OS8UzHhGeAbi1UbPgijOEjFqhjKaSt9IxVXT9uQuX6dHBmjN+5jV6LVdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1761562035; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=xmEacj8u6ChMzSsS43bTwjgvpaJlyaMTbKqOgKbVdXs=; b=pmW6d/5yY1EYPijvjoAvEep4B4EFQeOq82toimH10tEz7tgwBN3go+/QgqJ0oH/qHuBiC 6egX6jc07BBSrSc4Voe9Noqx4rksjr3twD8DqwZx3cJ8xVbyRgKmtyufVTJNOMNn3x3m9eK 8QLM8ddO5+CAK6eHLc4nMDgtUnYA/DsisFV12RZF/W2Z2NgHnO6kQrWkea+Kqpo2Eg5t2BH bnhx07Hen2jE0X1EaTwGl7X7OjMOFNChbL8Dh84vFKBWxOZaYm6IWz7OR6ZEUneLai+ukIH ywehMqfPfHVzR+yLNe2lmEgXW3YGV8exAGNgyeFyxeT785yWxN8QFPWhSmdw== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1761562029; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=1csg1KV/C7TTaIjpILs0GHNwL2HOi9gVu243BjlHPrk=; b=J4s1MsztjoiZiH3UcLrTw1qpTIBnYsxhCE2h5uH02AxRkzkiEkOy4rtzM1wVzu87GnRY7 O6lx9kpRtmpWUynzBtaAK98M5rK28WEMdTlTDR3JtFbzrgEfB8Fv2t2YQ+qr2uSAEoWeILw Mtiko99Oaqim4B3doaRR/geDlXpa/dvphlYZh50GS6ujjxz3QYZMg1cKhBxpXcmIxp1Oeec 8pXVbLciDuWEv0VjaJaCF6CNUe+ADTgfKmg68MnQ/MDXCVGj7G4VXTqrO6ZbUUfQ3Llc+V6 XHxsA44yGOkXN6/5CsqSKXqZjUAa0g9yyYysJQsEKW96AIHi4vlC1emFA/GA== Received: from 02c22a36bd31 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id A7ED968E90E for ; Mon, 27 Oct 2025 12:47:09 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Mon, 27 Oct 2025 10:47:09 -0000 Message-ID: <176156202981.81.16361665454271303784@7d278768979e> Message-ID-Hash: UXV4VQPDX25ATCBI34GOMVKT2UYRM5ND X-Message-ID-Hash: UXV4VQPDX25ATCBI34GOMVKT2UYRM5ND X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] Miscellaneous small Vulkan fixes (PR #20761) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Lynne via ffmpeg-devel Cc: Lynne Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #20761 opened by Lynne URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20761 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20761.patch Support for one new extension, image alignment for subsampled images. >>From 48e0b65d6fb4b7a64f575815b3a1952a3eb94187 Mon Sep 17 00:00:00 2001 From: Lynne Date: Sat, 18 Oct 2025 05:57:05 +0200 Subject: [PATCH 1/4] hwcontext_vulkan: add support for VK_EXT_zero_initialize_device_memory --- libavutil/hwcontext_vulkan.c | 16 ++++++++++++++++ libavutil/vulkan_functions.h | 1 + libavutil/vulkan_loader.h | 3 +++ 3 files changed, 20 insertions(+) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index ae4b07c698..45ca628070 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -82,6 +82,10 @@ typedef struct VulkanDeviceFeatures { VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR subgroup_rotate; VkPhysicalDeviceHostImageCopyFeaturesEXT host_image_copy; +#ifdef VK_EXT_zero_initialize_device_memory + VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT zero_initialize; +#endif + #ifdef VK_KHR_shader_expect_assume VkPhysicalDeviceShaderExpectAssumeFeaturesKHR expect_assume; #endif @@ -225,6 +229,11 @@ static void device_features_init(AVHWDeviceContext *ctx, VulkanDeviceFeatures *f FF_VK_STRUCT_EXT(s, &feats->device, &feats->host_image_copy, FF_VK_EXT_HOST_IMAGE_COPY, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT); +#ifdef VK_EXT_zero_initialize_device_memory + FF_VK_STRUCT_EXT(s, &feats->device, &feats->zero_initialize, FF_VK_EXT_ZERO_INITIALIZE, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT); +#endif + #ifdef VK_KHR_shader_expect_assume FF_VK_STRUCT_EXT(s, &feats->device, &feats->expect_assume, FF_VK_EXT_EXPECT_ASSUME, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR); @@ -311,6 +320,10 @@ static void device_features_copy_needed(VulkanDeviceFeatures *dst, VulkanDeviceF COPY_VAL(subgroup_rotate.shaderSubgroupRotate); COPY_VAL(host_image_copy.hostImageCopy); +#ifdef VK_EXT_zero_initialize_device_memory + COPY_VAL(zero_initialize.zeroInitializeDeviceMemory); +#endif + COPY_VAL(video_maintenance_1.videoMaintenance1); #ifdef VK_KHR_video_maintenance2 COPY_VAL(video_maintenance_2.videoMaintenance2); @@ -642,6 +655,9 @@ static const VulkanOptExtension optional_device_exts[] = { { VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME, FF_VK_EXT_COOP_MATRIX }, { VK_EXT_SHADER_OBJECT_EXTENSION_NAME, FF_VK_EXT_SHADER_OBJECT }, { VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME, FF_VK_EXT_SUBGROUP_ROTATE }, +#ifdef VK_EXT_zero_initialize_device_memory + { VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME, FF_VK_EXT_ZERO_INITIALIZE }, +#endif #ifdef VK_KHR_shader_expect_assume { VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME, FF_VK_EXT_EXPECT_ASSUME }, #endif diff --git a/libavutil/vulkan_functions.h b/libavutil/vulkan_functions.h index 4d20b7d806..d6a88160f8 100644 --- a/libavutil/vulkan_functions.h +++ b/libavutil/vulkan_functions.h @@ -50,6 +50,7 @@ typedef uint64_t FFVulkanExtensions; #define FF_VK_EXT_EXPECT_ASSUME (1ULL << 16) /* VK_KHR_shader_expect_assume */ #define FF_VK_EXT_SUBGROUP_ROTATE (1ULL << 17) /* VK_KHR_shader_subgroup_rotate */ #define FF_VK_EXT_HOST_IMAGE_COPY (1ULL << 18) /* VK_EXT_host_image_copy */ +#define FF_VK_EXT_ZERO_INITIALIZE (1ULL << 19) /* VK_EXT_zero_initialize_device_memory */ /* Video extensions */ #define FF_VK_EXT_VIDEO_QUEUE (1ULL << 36) /* VK_KHR_video_queue */ diff --git a/libavutil/vulkan_loader.h b/libavutil/vulkan_loader.h index 3207511663..dc558f9d64 100644 --- a/libavutil/vulkan_loader.h +++ b/libavutil/vulkan_loader.h @@ -60,6 +60,9 @@ static inline uint64_t ff_vk_extensions_to_mask(const char * const *extensions, { VK_EXT_SHADER_OBJECT_EXTENSION_NAME, FF_VK_EXT_SHADER_OBJECT }, { VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME, FF_VK_EXT_SUBGROUP_ROTATE }, { VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME, FF_VK_EXT_HOST_IMAGE_COPY }, +#ifdef VK_EXT_zero_initialize_device_memory + { VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME, FF_VK_EXT_ZERO_INITIALIZE }, +#endif { VK_KHR_VIDEO_MAINTENANCE_1_EXTENSION_NAME, FF_VK_EXT_VIDEO_MAINTENANCE_1 }, #ifdef VK_KHR_video_maintenance2 { VK_KHR_VIDEO_MAINTENANCE_2_EXTENSION_NAME, FF_VK_EXT_VIDEO_MAINTENANCE_2 }, -- 2.49.1 >>From e7566cc5baa86c536904b96b31084c4b1e4a0739 Mon Sep 17 00:00:00 2001 From: Lynne Date: Thu, 16 Oct 2025 03:11:32 +0200 Subject: [PATCH 2/4] vulkan_decode: align images to the subsampling Normally, the Vulkan drivers handle this. But Vulkan decided "nah". This requires API users to crop out odd-numbered images with subsampling. --- libavcodec/vulkan_decode.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index cbf2ab8194..d22ccc21aa 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -1130,8 +1130,9 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) } } - frames_ctx->width = avctx->coded_width; - frames_ctx->height = avctx->coded_height; + const AVPixFmtDescriptor *pdesc = av_pix_fmt_desc_get(frames_ctx->sw_format); + frames_ctx->width = FFALIGN(avctx->coded_width, 1 << pdesc->log2_chroma_w); + frames_ctx->height = FFALIGN(avctx->coded_height, 1 << pdesc->log2_chroma_h); frames_ctx->format = AV_PIX_FMT_VULKAN; hwfc->format[0] = vkfmt; @@ -1338,8 +1339,8 @@ int ff_vk_decode_init(AVCodecContext *avctx) dpb_frames = (AVHWFramesContext *)ctx->common.dpb_hwfc_ref->data; dpb_frames->format = s->frames->format; dpb_frames->sw_format = s->frames->sw_format; - dpb_frames->width = avctx->coded_width; - dpb_frames->height = avctx->coded_height; + dpb_frames->width = s->frames->width; + dpb_frames->height = s->frames->height; dpb_hwfc = dpb_frames->hwctx; dpb_hwfc->create_pnext = (void *)ff_vk_find_struct(ctx->s.hwfc->create_pnext, -- 2.49.1 >>From f71c2bcc4bc9032e85f2c0e8c933e4eb3c7f235f Mon Sep 17 00:00:00 2001 From: Lynne Date: Fri, 17 Oct 2025 14:12:11 +0200 Subject: [PATCH 3/4] vulkan/rangecoder: ifdef out encode and decode chunks There's little code sharing between them. --- libavcodec/vulkan/rangecoder.comp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/libavcodec/vulkan/rangecoder.comp b/libavcodec/vulkan/rangecoder.comp index b6b6c0490f..98ff743b2e 100644 --- a/libavcodec/vulkan/rangecoder.comp +++ b/libavcodec/vulkan/rangecoder.comp @@ -31,6 +31,19 @@ struct RangeCoder { uint8_t outstanding_byte; }; +void rac_init(out RangeCoder r, u8buf data, uint buf_size) +{ + r.bytestream_start = uint64_t(data); + r.bytestream = uint64_t(data); + r.bytestream_end = uint64_t(data) + buf_size; + r.low = 0; + r.range = 0xFF00; + r.outstanding_count = uint16_t(0); + r.outstanding_byte = uint8_t(0xFF); +} + +#if !defined(DECODE) + #ifdef FULL_RENORM /* Full renorm version that can handle outstanding_byte == 0xFF */ void renorm_encoder(inout RangeCoder c) @@ -165,16 +178,7 @@ uint32_t rac_terminate(inout RangeCoder c) return uint32_t(uint64_t(c.bytestream) - uint64_t(c.bytestream_start)); } -void rac_init(out RangeCoder r, u8buf data, uint buf_size) -{ - r.bytestream_start = uint64_t(data); - r.bytestream = uint64_t(data); - r.bytestream_end = uint64_t(data) + buf_size; - r.low = 0; - r.range = 0xFF00; - r.outstanding_count = uint16_t(0); - r.outstanding_byte = uint8_t(0xFF); -} +#else /* Decoder */ uint overread = 0; @@ -239,3 +243,5 @@ bool get_rac_equi(inout RangeCoder c) { return get_rac_internal(c, c.range >> 1); } + +#endif -- 2.49.1 >>From 8787bd1a49997e6e8cb9fa1adc41b9068c9e7edd Mon Sep 17 00:00:00 2001 From: Lynne Date: Sun, 26 Oct 2025 22:46:35 +0100 Subject: [PATCH 4/4] lavc/hwaccels: properly order list --- libavcodec/hwaccels.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/hwaccels.h b/libavcodec/hwaccels.h index 0894d84a9c..638a7bfb1d 100644 --- a/libavcodec/hwaccels.h +++ b/libavcodec/hwaccels.h @@ -67,8 +67,8 @@ extern const struct FFHWAccel ff_mpeg4_vaapi_hwaccel; extern const struct FFHWAccel ff_mpeg4_vdpau_hwaccel; extern const struct FFHWAccel ff_mpeg4_videotoolbox_hwaccel; extern const struct FFHWAccel ff_prores_videotoolbox_hwaccel; -extern const struct FFHWAccel ff_prores_raw_vulkan_hwaccel; extern const struct FFHWAccel ff_prores_vulkan_hwaccel; +extern const struct FFHWAccel ff_prores_raw_vulkan_hwaccel; extern const struct FFHWAccel ff_vc1_d3d11va_hwaccel; extern const struct FFHWAccel ff_vc1_d3d11va2_hwaccel; extern const struct FFHWAccel ff_vc1_d3d12va_hwaccel; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org