From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id D72D04CB40 for <ffmpegdev@gitmailbox.com>; Thu, 13 Mar 2025 17:05:38 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D149968E743; Thu, 13 Mar 2025 19:04:11 +0200 (EET) Received: from vidala.pars.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52C5B68E558 for <ffmpeg-devel@ffmpeg.org>; Thu, 13 Mar 2025 19:03:58 +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=1741885437; bh=/4myr8LjE7AA65mO8uXOX3i rVQYiPZfEqm2pmJhpVxU=; b=kxIlrhoPjQ87faFYGTAfFgtn17cAwn81P3zuMesfkah0GWaRWJ jqPYJkzzWYtHDR/bywmt6N/bVb/6P+jQ9bxViw+3DyH7yvt/n/LDiyFxdR6sy+N85AhwkcuYmTS 6kW1WzG5dI81BQZ7bLkMpv5zwNPe5cPc4tLcQUKcR/il3VQ8sHqkXPcwf4cdx4ho8uueOzwqwgs eIgquR+cyupKoYGsplF1ZD2hfvDpAKb0p4zTsFgNCPUXMWgFWTHRQj+BOA3oPrFdlbRlO/CAtdh ogvww66KKIWdsXV4lxGSDOz4fHupaV53hECz2ozaYyhYIb/6zRB/aReUF9kLFERRxkg==; DKIM-Signature: v=1; a=ed25519-sha256; s=202405e; d=lynne.ee; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1741885437; bh=/4myr8LjE7AA65mO8uXOX3i rVQYiPZfEqm2pmJhpVxU=; b=UYbgxpShH2uuYa3yEY3Lb2NJ8yNWtv2RmxwuzY13/ugZejaSl9 nldtMEsapW1TXkgMmTKsILVqBCA5PB//BdCA==; From: Lynne <dev@lynne.ee> To: ffmpeg-devel@ffmpeg.org Date: Thu, 13 Mar 2025 18:03:38 +0100 Message-ID: <20250313170355.92290-7-dev@lynne.ee> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250313170355.92290-1-dev@lynne.ee> References: <20250313170355.92290-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 06/16] 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 <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Cc: Lynne <dev@lynne.ee> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250313170355.92290-7-dev@lynne.ee/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> --- libavutil/vulkan.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 235c76d1d0..e517a42b86 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -1719,6 +1719,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) @@ -1750,6 +1773,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", @@ -1811,6 +1835,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".