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.

>From 8594a95ca1c0819fdf7b04f57542787c5f574223 Mon Sep 17 00:00:00 2001
From: Lynne <d...@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

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to