ffmpeg | branch: master | Lynne <d...@lynne.ee> | Sat Apr 19 18:38:16 2025 +0200| [7cd1edeaa410d977a9f1ff8436f480cb45b80178] | committer: Lynne
vulkan: drop bgr_workaround Vulkan's main issue around using BGR is simple. The letters in the shader don't match up (rgba in shader, bgra in format). So of course, rather than allowing "bgra" or other permutations of formats in the shader, they went the nuclear option and spent months writing an extension to get rid of the need to have a format in the shader to begin with. All this to solve a problem that should never have existed to begin with. This fixes BGRA images since enabling WithoutFormat, as the GPU now remaps without your involvement. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7cd1edeaa410d977a9f1ff8436f480cb45b80178 --- libavutil/vulkan.c | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 30ed576416..8b02abecf1 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -1483,15 +1483,6 @@ int ff_vk_mt_is_np_rgb(enum AVPixelFormat pix_fmt) void ff_vk_set_perm(enum AVPixelFormat pix_fmt, int lut[4], int inv) { switch (pix_fmt) { - case AV_PIX_FMT_BGRA: - case AV_PIX_FMT_BGR0: - case AV_PIX_FMT_BGR565: - case AV_PIX_FMT_X2BGR10: - lut[0] = 2; - lut[1] = 1; - lut[2] = 0; - lut[3] = 3; - break; case AV_PIX_FMT_GBRAP: case AV_PIX_FMT_GBRP: case AV_PIX_FMT_GBRAP10: @@ -1804,32 +1795,6 @@ static VkFormat map_fmt_to_rep(VkFormat fmt, enum FFVkShaderRepFormat rep_fmt) return VK_FORMAT_UNDEFINED; } -static void bgr_workaround(FFVulkanContext *s, - AVVulkanFramesContext *vkfc, - VkImageViewCreateInfo *ci) -{ - if (!(vkfc->usage & VK_IMAGE_USAGE_STORAGE_BIT) || - s->feats.features.shaderStorageImageReadWithoutFormat || - s->feats.features.shaderStorageImageWriteWithoutFormat) - 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) @@ -1861,7 +1826,6 @@ int ff_vk_create_imageview(FFVulkanContext *s, .layerCount = 1, }, }; - bgr_workaround(s, 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", @@ -1923,7 +1887,6 @@ int ff_vk_create_imageviews(FFVulkanContext *s, FFVkExecContext *e, .layerCount = 1, }, }; - bgr_workaround(s, 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", _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".