From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 895E14D785 for ; Mon, 24 Feb 2025 08:06:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 508F068CD06; Mon, 24 Feb 2025 10:04:53 +0200 (EET) Received: from vidala.pars.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6580368CB24 for ; Mon, 24 Feb 2025 10:04:39 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; s=202405r; d=lynne.ee; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1740384278; bh=yflsIxzkMEE22XMem6pzZZs gDVTHzpYI+NUeWiq8OFg=; b=MNKsRjKc+XfOkhH0JgXFiPJTs++RUwyszbBWzFTp+xpAcKUllF VDwwbA6Lckyv81fobXEvCZ4DAIVI7NulgskyZH+/AfaY9TohTrwxISCQOKeiSxCylLZtkikYii6 cUQAbElTqU12S7ljE2zz5o9D/t/iNyX+0yFlqkgRUBLvw18/2MSddgZBu+ef4KDlOaJXD+etAXj C1nGQ9qcTCtNuWrJAI5eGU+9lCcLFHOh+JyfFY5UgoVduzqV429ZbmGRzCqGn/9VEyUNQ5FH0G6 sGwNZZsJGF9WZ06edDfTxBxlmKgyp0tV4em/7iWODxg1D/8GK4hAjEOfppaBWJ1n+jw==; DKIM-Signature: v=1; a=ed25519-sha256; s=202405e; d=lynne.ee; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1740384278; bh=yflsIxzkMEE22XMem6pzZZs gDVTHzpYI+NUeWiq8OFg=; b=9QaCX5evw4R3EB/l+v/tDkbRX4hqkOwdEWFtInvLHbpfsisSaf jcbbI7LxcUB8KVhSa8mhfpDXqLSKfbypGbBA==; From: Lynne To: ffmpeg-devel@ffmpeg.org Date: Mon, 24 Feb 2025 09:04:20 +0100 Message-ID: <20250224080434.5632-7-dev@lynne.ee> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250224080434.5632-1-dev@lynne.ee> References: <20250224080434.5632-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 07/12] vulkan: workaround BGR storage image undefined behaviour 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: , Reply-To: FFmpeg development discussions and patches Cc: Lynne Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --- libavutil/vulkan.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 4d60ac1b3a..40ca737422 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -1735,6 +1735,29 @@ static VkFormat map_fmt_to_rep(VkFormat fmt, enum FFVkShaderRepFormat rep_fmt) return VK_FORMAT_UNDEFINED; } +static void bgr_workaround(AVVulkanFramesContext *vkfc, + VkImageViewCreateInfo *ci) +{ + if (!(vkfc->usage & VK_IMAGE_USAGE_STORAGE_BIT)) + return; + switch (ci->format) { +#define REMAP(src, dst) \ + case src: \ + ci->format = dst; \ + return; + REMAP(VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM) + REMAP(VK_FORMAT_B8G8R8A8_SINT, VK_FORMAT_R8G8B8A8_SINT) + REMAP(VK_FORMAT_B8G8R8A8_UINT, VK_FORMAT_R8G8B8A8_UINT) + REMAP(VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_R8G8B8_UNORM) + REMAP(VK_FORMAT_B8G8R8_SINT, VK_FORMAT_R8G8B8_SINT) + REMAP(VK_FORMAT_B8G8R8_UINT, VK_FORMAT_R8G8B8_UINT) + REMAP(VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32) +#undef REMAP + default: + return; + } +} + int ff_vk_create_imageview(FFVulkanContext *s, VkImageView *img_view, VkImageAspectFlags *aspect, AVFrame *f, int plane, enum FFVkShaderRepFormat rep_fmt) @@ -1766,6 +1789,7 @@ int ff_vk_create_imageview(FFVulkanContext *s, .layerCount = 1, }, }; + bgr_workaround(vkfc, &view_create_info); if (view_create_info.format == VK_FORMAT_UNDEFINED) { av_log(s, AV_LOG_ERROR, "Unable to find a compatible representation " "of format %i and mode %i\n", @@ -1827,6 +1851,7 @@ int ff_vk_create_imageviews(FFVulkanContext *s, FFVkExecContext *e, .layerCount = 1, }, }; + bgr_workaround(vkfc, &view_create_info); if (view_create_info.format == VK_FORMAT_UNDEFINED) { av_log(s, AV_LOG_ERROR, "Unable to find a compatible representation " "of format %i and mode %i\n", -- 2.47.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".