diff mbox series

[FFmpeg-devel,2/2] vulkan_decode: fix another validation issue

Message ID NhZ3RbO--3-9@lynne.ee
State New
Headers show
Series [FFmpeg-devel,1/2] vulkan_decode: fix pedantic validation issue | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch
yinshiyou/configure_loongarch64 warning Failed to apply patch

Commit Message

Lynne Oct. 24, 2023, 11:42 p.m. UTC
Surprising no one, the insane usage rule has a catch.

Only happens in the layered_dpb path, which was poorly tested.

Fixes:
"[AVHWDeviceContext @ 0x557f4b87dc00] Validation Error: [ VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07122 ] Object 0: handle = 0xaf31600000000ce, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0xfe471484 | vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].oldLayout (VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR) is not compatible with VkImage 0xaf31600000000ce[] usage flags 0x405. The Vulkan spec states: If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, and oldLayout or newLayout is VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR then image must have been created with VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07122)
"

Patch attached.
diff mbox series

Patch

From 8594a95ca1c0819fdf7b04f57542787c5f574223 Mon Sep 17 00:00:00 2001
From: Lynne <dev@lynne.ee>
Date: Wed, 25 Oct 2023 01:32:20 +0200
Subject: [PATCH 2/2] vulkan_decode: fix another validation issue

Surprising no one, the insane usage rule has a catch.
---
 libavcodec/vulkan_decode.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c
index c01eeb9cdc..7f575d1283 100644
--- a/libavcodec/vulkan_decode.c
+++ b/libavcodec/vulkan_decode.c
@@ -449,7 +449,8 @@  int ff_vk_decode_frame(AVCodecContext *avctx,
         .srcAccessMask = VK_ACCESS_2_NONE,
         .dstAccessMask = VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR,
         .oldLayout = vkf->layout[0],
-        .newLayout = vp->dpb_frame ? VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR :
+        .newLayout = (dec->layered_dpb && vp->dpb_frame) ?
+                     VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR :
                      VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR, /* Spec, 07252 utter madness */
         .srcQueueFamilyIndex = vkf->queue_family[0],
         .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-- 
2.42.0