From 71eaf09189db4e4984c69a684038de13987391ab Mon Sep 17 00:00:00 2001 From: "Bernhard C. Schrenk" Date: Thu, 12 Sep 2024 23:41:24 +0200 Subject: [PATCH 1/2] video: reduce dpbImageUsage to minimum The test cases do not need DPB images to support VK_IMAGE_USAGE_TRANSFER_SRC_BIT. This change reduces the usage flags to the necessary minimum. Affects: dEQP-VK.video.encode.* --- external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp b/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp index 909eb9e697..b56a4e156f 100644 --- a/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp +++ b/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp @@ -1691,7 +1691,7 @@ tcu::TestStatus VideoEncodeTestInstance::iterate(void) videoDeviceDriver, videoDevice, videoEncodeSessionParametersCreateInfos.back().get())); } - const VkImageUsageFlags dpbImageUsage = VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + const VkImageUsageFlags dpbImageUsage = VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR; // If the implementation does not support individual images for DPB and so must use arrays const bool separateReferenceImages = videoCapabilities.get()->flags & VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR; From cb005bed25a98fa5ce81a03d3465920711a1bbb4 Mon Sep 17 00:00:00 2001 From: "Bernhard C. Schrenk" Date: Thu, 12 Sep 2024 23:48:24 +0200 Subject: [PATCH 2/2] video: support multiple DPB image formats The encoder test cases are not dependent on the DPB image format as they do not access the images. Still they required support for VK_FORMAT_G8_B8R8_2PLANE_420_UNORM. This change allows any image format requested by the implementation. It also changes some places were imageFormat was used instead of dpbImageFormat. Affects: dEQP-VK.video.encode.* --- .../vulkan/video/vktVideoEncodeTests.cpp | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp b/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp index b56a4e156f..5af453c799 100644 --- a/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp +++ b/external/vulkancts/modules/vulkan/video/vktVideoEncodeTests.cpp @@ -1325,6 +1325,7 @@ class VideoEncodeTestInstance : public VideoBaseTestInstance VkFormat checkImageFormat(VkImageUsageFlags flags, const VkVideoProfileListInfoKHR *videoProfileList, const VkFormat requiredFormat); + VkFormat getFirstSupportedImageFormat(VkImageUsageFlags flags, const VkVideoProfileListInfoKHR *videoProfileList); bool checkQueryResultSupport(void); @@ -1388,6 +1389,19 @@ VkFormat VideoEncodeTestInstance::checkImageFormat(VkImageUsageFlags flags, TCU_THROW(NotSupportedError, "Failed to find required picture format"); } +VkFormat VideoEncodeTestInstance::getFirstSupportedImageFormat(VkImageUsageFlags flags, + const VkVideoProfileListInfoKHR *videoProfileList) +{ + const InstanceInterface &vki = m_context.getInstanceInterface(); + const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); + MovePtr> supportedFormats = getSupportedFormats(vki, physicalDevice, flags, videoProfileList); + + if (!supportedFormats || supportedFormats->empty()) + TCU_THROW(NotSupportedError, "No supported picture formats"); + + return supportedFormats->front(); +} + bool VideoEncodeTestInstance::checkQueryResultSupport(void) { uint32_t count = 0; @@ -1500,8 +1514,8 @@ tcu::TestStatus VideoEncodeTestInstance::iterate(void) const VkFormat imageFormat = checkImageFormat(VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR, videoEncodeProfileList.get(), VK_FORMAT_G8_B8R8_2PLANE_420_UNORM); - const VkFormat dpbImageFormat = checkImageFormat(VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, - videoEncodeProfileList.get(), VK_FORMAT_G8_B8R8_2PLANE_420_UNORM); + const VkFormat dpbImageFormat = + getFirstSupportedImageFormat(VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, videoEncodeProfileList.get()); const VideoDevice::VideoDeviceFlags videoDeviceFlags = m_testDefinition->requiredDeviceFlags(); @@ -1696,7 +1710,7 @@ tcu::TestStatus VideoEncodeTestInstance::iterate(void) const bool separateReferenceImages = videoCapabilities.get()->flags & VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR; const VkImageCreateInfo dpbImageCreateInfo = - makeImageCreateInfo(imageFormat, codedExtent, 0, &encodeQueueFamilyIndex, dpbImageUsage, + makeImageCreateInfo(dpbImageFormat, codedExtent, 0, &encodeQueueFamilyIndex, dpbImageUsage, videoEncodeProfileList.get(), separateReferenceImages ? 1 : dpbSlots); const VkImageViewType dpbImageViewType = separateReferenceImages ? VK_IMAGE_VIEW_TYPE_2D : VK_IMAGE_VIEW_TYPE_2D_ARRAY; @@ -1753,7 +1767,7 @@ tcu::TestStatus VideoEncodeTestInstance::iterate(void) std::unique_ptr> dpbImageView(new Move( makeImageView(videoDeviceDriver, videoDevice, dpbImages[separateReferenceImages ? j : 0]->get(), - dpbImageViewType, imageFormat, dpbImageSubresourceRange))); + dpbImageViewType, dpbImageFormat, dpbImageSubresourceRange))); std::unique_ptr dpbPictureResource( new VkVideoPictureResourceInfoKHR(makeVideoPictureResource(codedExtent, 0, dpbImageView->get())));