1e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------ 2e5c31af7Sopenharmony_ci * Vulkan Conformance Tests 3e5c31af7Sopenharmony_ci * ------------------------ 4e5c31af7Sopenharmony_ci * 5e5c31af7Sopenharmony_ci * Copyright (c) 2021 The Khronos Group Inc. 6e5c31af7Sopenharmony_ci * 7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 10e5c31af7Sopenharmony_ci * 11e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 12e5c31af7Sopenharmony_ci * 13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 17e5c31af7Sopenharmony_ci * limitations under the License. 18e5c31af7Sopenharmony_ci * 19e5c31af7Sopenharmony_ci *//*! 20e5c31af7Sopenharmony_ci * \file 21e5c31af7Sopenharmony_ci * \brief Video Encoding and Decoding Capabilities tests 22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/ 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci#include "vktVideoCapabilitiesTests.hpp" 25e5c31af7Sopenharmony_ci#include "vktVideoTestUtils.hpp" 26e5c31af7Sopenharmony_ci 27e5c31af7Sopenharmony_ci#include "vkDefs.hpp" 28e5c31af7Sopenharmony_ci#include "vkTypeUtil.hpp" 29e5c31af7Sopenharmony_ci 30e5c31af7Sopenharmony_ci 31e5c31af7Sopenharmony_ci#include "vktTestCase.hpp" 32e5c31af7Sopenharmony_ci#include "vktCustomInstancesDevices.hpp" 33e5c31af7Sopenharmony_ci 34e5c31af7Sopenharmony_ci 35e5c31af7Sopenharmony_cinamespace vkt 36e5c31af7Sopenharmony_ci{ 37e5c31af7Sopenharmony_cinamespace video 38e5c31af7Sopenharmony_ci{ 39e5c31af7Sopenharmony_cinamespace 40e5c31af7Sopenharmony_ci{ 41e5c31af7Sopenharmony_ciusing namespace vk; 42e5c31af7Sopenharmony_ciusing namespace std; 43e5c31af7Sopenharmony_ci 44e5c31af7Sopenharmony_cienum TestType 45e5c31af7Sopenharmony_ci{ 46e5c31af7Sopenharmony_ci TEST_TYPE_QUEUE_SUPPORT_QUERY, // Test case 1 47e5c31af7Sopenharmony_ci TEST_TYPE_H264_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 2 iteration 1 ? 48e5c31af7Sopenharmony_ci TEST_TYPE_H264_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 2 iteration 2 ? 49e5c31af7Sopenharmony_ci TEST_TYPE_H264_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 3 iteration 1 50e5c31af7Sopenharmony_ci TEST_TYPE_H264_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 3 iteration 2 51e5c31af7Sopenharmony_ci TEST_TYPE_H265_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 4a iteration 1 ? 52e5c31af7Sopenharmony_ci TEST_TYPE_H265_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 4a iteration 2 ? 53e5c31af7Sopenharmony_ci TEST_TYPE_H265_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 4b iteration 1 54e5c31af7Sopenharmony_ci TEST_TYPE_H265_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY, // Test case 4b iteration 2 55e5c31af7Sopenharmony_ci TEST_TYPE_H264_DECODE_CAPABILITIES_QUERY, // Test case 5a 56e5c31af7Sopenharmony_ci TEST_TYPE_H264_ENCODE_CAPABILITIES_QUERY, // Test case 5b 57e5c31af7Sopenharmony_ci TEST_TYPE_H265_DECODE_CAPABILITIES_QUERY, // Test case 5c 58e5c31af7Sopenharmony_ci TEST_TYPE_H265_ENCODE_CAPABILITIES_QUERY, // Test case 5d 59e5c31af7Sopenharmony_ci TEST_TYPE_LAST 60e5c31af7Sopenharmony_ci}; 61e5c31af7Sopenharmony_ci 62e5c31af7Sopenharmony_cistruct CaseDef 63e5c31af7Sopenharmony_ci{ 64e5c31af7Sopenharmony_ci TestType testType; 65e5c31af7Sopenharmony_ci}; 66e5c31af7Sopenharmony_ci 67e5c31af7Sopenharmony_ci#define VALIDATE_FIELD_EQUAL(A,B,X) if (deMemCmp(&A.X, &B.X, sizeof(A.X)) != 0) TCU_FAIL("Unequal " #A "." #X) 68e5c31af7Sopenharmony_ci 69e5c31af7Sopenharmony_ciclass VideoQueueQueryTestInstance : public VideoBaseTestInstance 70e5c31af7Sopenharmony_ci{ 71e5c31af7Sopenharmony_cipublic: 72e5c31af7Sopenharmony_ci VideoQueueQueryTestInstance (Context& context, const CaseDef& data); 73e5c31af7Sopenharmony_ci ~VideoQueueQueryTestInstance (void); 74e5c31af7Sopenharmony_ci 75e5c31af7Sopenharmony_ci tcu::TestStatus iterate (void); 76e5c31af7Sopenharmony_ci 77e5c31af7Sopenharmony_ciprivate: 78e5c31af7Sopenharmony_ci CaseDef m_caseDef; 79e5c31af7Sopenharmony_ci}; 80e5c31af7Sopenharmony_ci 81e5c31af7Sopenharmony_ciVideoQueueQueryTestInstance::VideoQueueQueryTestInstance (Context& context, const CaseDef& data) 82e5c31af7Sopenharmony_ci : VideoBaseTestInstance (context) 83e5c31af7Sopenharmony_ci , m_caseDef (data) 84e5c31af7Sopenharmony_ci{ 85e5c31af7Sopenharmony_ci DE_UNREF(m_caseDef); 86e5c31af7Sopenharmony_ci} 87e5c31af7Sopenharmony_ci 88e5c31af7Sopenharmony_ciVideoQueueQueryTestInstance::~VideoQueueQueryTestInstance (void) 89e5c31af7Sopenharmony_ci{ 90e5c31af7Sopenharmony_ci} 91e5c31af7Sopenharmony_ci 92e5c31af7Sopenharmony_citcu::TestStatus VideoQueueQueryTestInstance::iterate (void) 93e5c31af7Sopenharmony_ci{ 94e5c31af7Sopenharmony_ci const InstanceInterface& vk = m_context.getInstanceInterface(); 95e5c31af7Sopenharmony_ci const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); 96e5c31af7Sopenharmony_ci deUint32 queueFamilyPropertiesCount = 0u; 97e5c31af7Sopenharmony_ci vector<VkQueueFamilyProperties2> queueFamilyProperties2; 98e5c31af7Sopenharmony_ci vector<VkQueueFamilyVideoPropertiesKHR> videoQueueFamilyProperties2; 99e5c31af7Sopenharmony_ci bool encodePass = false; 100e5c31af7Sopenharmony_ci bool decodePass = false; 101e5c31af7Sopenharmony_ci 102e5c31af7Sopenharmony_ci vk.getPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyPropertiesCount, DE_NULL); 103e5c31af7Sopenharmony_ci 104e5c31af7Sopenharmony_ci if(queueFamilyPropertiesCount == 0u) 105e5c31af7Sopenharmony_ci TCU_FAIL("Device reports an empty set of queue family properties"); 106e5c31af7Sopenharmony_ci 107e5c31af7Sopenharmony_ci queueFamilyProperties2.resize(queueFamilyPropertiesCount); 108e5c31af7Sopenharmony_ci videoQueueFamilyProperties2.resize(queueFamilyPropertiesCount); 109e5c31af7Sopenharmony_ci 110e5c31af7Sopenharmony_ci for (size_t ndx = 0; ndx < queueFamilyPropertiesCount; ++ndx) 111e5c31af7Sopenharmony_ci { 112e5c31af7Sopenharmony_ci queueFamilyProperties2[ndx].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2; 113e5c31af7Sopenharmony_ci queueFamilyProperties2[ndx].pNext = &videoQueueFamilyProperties2[ndx]; 114e5c31af7Sopenharmony_ci videoQueueFamilyProperties2[ndx].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_VIDEO_PROPERTIES_KHR; 115e5c31af7Sopenharmony_ci videoQueueFamilyProperties2[ndx].pNext = DE_NULL; 116e5c31af7Sopenharmony_ci videoQueueFamilyProperties2[ndx].videoCodecOperations = 0; 117e5c31af7Sopenharmony_ci } 118e5c31af7Sopenharmony_ci 119e5c31af7Sopenharmony_ci vk.getPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queueFamilyPropertiesCount, queueFamilyProperties2.data()); 120e5c31af7Sopenharmony_ci 121e5c31af7Sopenharmony_ci if (queueFamilyPropertiesCount != queueFamilyProperties2.size()) 122e5c31af7Sopenharmony_ci TCU_FAIL("Device returns less queue families than initially reported"); 123e5c31af7Sopenharmony_ci 124e5c31af7Sopenharmony_ci for (uint32_t ndx = 0; ndx < queueFamilyPropertiesCount; ++ndx) 125e5c31af7Sopenharmony_ci { 126e5c31af7Sopenharmony_ci const uint32_t queueCount = queueFamilyProperties2[ndx].queueFamilyProperties.queueCount; 127e5c31af7Sopenharmony_ci const VkQueueFlags queueFlags = queueFamilyProperties2[ndx].queueFamilyProperties.queueFlags; 128e5c31af7Sopenharmony_ci const VkVideoCodecOperationFlagsKHR queueVideoCodecOperations = videoQueueFamilyProperties2[ndx].videoCodecOperations; 129e5c31af7Sopenharmony_ci 130e5c31af7Sopenharmony_ci if ((queueFlags & VK_QUEUE_VIDEO_ENCODE_BIT_KHR) != 0) 131e5c31af7Sopenharmony_ci { 132e5c31af7Sopenharmony_ci if (!VideoDevice::isVideoEncodeOperation(queueVideoCodecOperations)) 133e5c31af7Sopenharmony_ci TCU_FAIL("Invalid codec operations for encode queue"); 134e5c31af7Sopenharmony_ci 135e5c31af7Sopenharmony_ci if (queueCount == 0) 136e5c31af7Sopenharmony_ci TCU_FAIL("Video encode queue returned queueCount is zero"); 137e5c31af7Sopenharmony_ci 138e5c31af7Sopenharmony_ci encodePass = true; 139e5c31af7Sopenharmony_ci } 140e5c31af7Sopenharmony_ci 141e5c31af7Sopenharmony_ci if ((queueFlags & VK_QUEUE_VIDEO_DECODE_BIT_KHR) != 0) 142e5c31af7Sopenharmony_ci { 143e5c31af7Sopenharmony_ci if (!VideoDevice::isVideoDecodeOperation(queueVideoCodecOperations)) 144e5c31af7Sopenharmony_ci TCU_FAIL("Invalid codec operations for decode queue"); 145e5c31af7Sopenharmony_ci 146e5c31af7Sopenharmony_ci if (queueCount == 0) 147e5c31af7Sopenharmony_ci TCU_FAIL("Video decode queue returned queueCount is zero"); 148e5c31af7Sopenharmony_ci 149e5c31af7Sopenharmony_ci decodePass = true; 150e5c31af7Sopenharmony_ci } 151e5c31af7Sopenharmony_ci } 152e5c31af7Sopenharmony_ci 153e5c31af7Sopenharmony_ci if (!m_context.isDeviceFunctionalitySupported("VK_KHR_video_encode_queue")) 154e5c31af7Sopenharmony_ci encodePass = false; 155e5c31af7Sopenharmony_ci 156e5c31af7Sopenharmony_ci if (!m_context.isDeviceFunctionalitySupported("VK_KHR_video_decode_queue")) 157e5c31af7Sopenharmony_ci decodePass = false; 158e5c31af7Sopenharmony_ci 159e5c31af7Sopenharmony_ci if (encodePass || decodePass) 160e5c31af7Sopenharmony_ci return tcu::TestStatus::pass("Pass"); 161e5c31af7Sopenharmony_ci else 162e5c31af7Sopenharmony_ci return tcu::TestStatus::fail("Neither encode, nor decode is available"); 163e5c31af7Sopenharmony_ci} 164e5c31af7Sopenharmony_ci 165e5c31af7Sopenharmony_citemplate<typename ProfileOperation> 166e5c31af7Sopenharmony_ciclass VideoFormatPropertiesQueryTestInstance : public VideoBaseTestInstance 167e5c31af7Sopenharmony_ci{ 168e5c31af7Sopenharmony_cipublic: 169e5c31af7Sopenharmony_ci VideoFormatPropertiesQueryTestInstance (Context& context, const CaseDef& data); 170e5c31af7Sopenharmony_ci ~VideoFormatPropertiesQueryTestInstance (void); 171e5c31af7Sopenharmony_ci tcu::TestStatus iterate (void); 172e5c31af7Sopenharmony_ci 173e5c31af7Sopenharmony_ciprivate: 174e5c31af7Sopenharmony_ci ProfileOperation getProfileOperation (void); 175e5c31af7Sopenharmony_ci 176e5c31af7Sopenharmony_ci CaseDef m_caseDef; 177e5c31af7Sopenharmony_ci VkVideoCodecOperationFlagsKHR m_videoCodecOperation; 178e5c31af7Sopenharmony_ci VkImageUsageFlags m_imageUsageFlags; 179e5c31af7Sopenharmony_ci}; 180e5c31af7Sopenharmony_ci 181e5c31af7Sopenharmony_citemplate<typename ProfileOperation> 182e5c31af7Sopenharmony_ciVideoFormatPropertiesQueryTestInstance<ProfileOperation>::VideoFormatPropertiesQueryTestInstance (Context& context, const CaseDef& data) 183e5c31af7Sopenharmony_ci : VideoBaseTestInstance (context) 184e5c31af7Sopenharmony_ci , m_caseDef (data) 185e5c31af7Sopenharmony_ci{ 186e5c31af7Sopenharmony_ci switch (m_caseDef.testType) 187e5c31af7Sopenharmony_ci { 188e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: 189e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR; break; 190e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: 191e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_videoCodecOperation = VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT; break; 192e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: 193e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR; break; 194e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: 195e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_videoCodecOperation = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT; break; 196e5c31af7Sopenharmony_ci default: TCU_THROW(InternalError, "Unknown testType"); 197e5c31af7Sopenharmony_ci } 198e5c31af7Sopenharmony_ci 199e5c31af7Sopenharmony_ci switch (m_caseDef.testType) 200e5c31af7Sopenharmony_ci { 201e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR; break; 202e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR; break; 203e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR; break; 204e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR; break; 205e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR; break; 206e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR; break; 207e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR; break; 208e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: m_imageUsageFlags = VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR; break; 209e5c31af7Sopenharmony_ci default: TCU_THROW(InternalError, "Unknown testType"); 210e5c31af7Sopenharmony_ci } 211e5c31af7Sopenharmony_ci} 212e5c31af7Sopenharmony_ci 213e5c31af7Sopenharmony_citemplate<typename ProfileOperation> 214e5c31af7Sopenharmony_ciVideoFormatPropertiesQueryTestInstance<ProfileOperation>::~VideoFormatPropertiesQueryTestInstance (void) 215e5c31af7Sopenharmony_ci{ 216e5c31af7Sopenharmony_ci} 217e5c31af7Sopenharmony_ci 218e5c31af7Sopenharmony_citemplate<> 219e5c31af7Sopenharmony_ciVkVideoDecodeH264ProfileInfoKHR VideoFormatPropertiesQueryTestInstance<VkVideoDecodeH264ProfileInfoKHR>::getProfileOperation (void) 220e5c31af7Sopenharmony_ci{ 221e5c31af7Sopenharmony_ci return getProfileOperationH264Decode(); 222e5c31af7Sopenharmony_ci} 223e5c31af7Sopenharmony_ci 224e5c31af7Sopenharmony_citemplate<> 225e5c31af7Sopenharmony_ciVkVideoEncodeH264ProfileInfoEXT VideoFormatPropertiesQueryTestInstance<VkVideoEncodeH264ProfileInfoEXT>::getProfileOperation () 226e5c31af7Sopenharmony_ci{ 227e5c31af7Sopenharmony_ci return getProfileOperationH264Encode(); 228e5c31af7Sopenharmony_ci} 229e5c31af7Sopenharmony_ci 230e5c31af7Sopenharmony_citemplate<> 231e5c31af7Sopenharmony_ciVkVideoDecodeH265ProfileInfoKHR VideoFormatPropertiesQueryTestInstance<VkVideoDecodeH265ProfileInfoKHR>::getProfileOperation () 232e5c31af7Sopenharmony_ci{ 233e5c31af7Sopenharmony_ci return getProfileOperationH265Decode(); 234e5c31af7Sopenharmony_ci} 235e5c31af7Sopenharmony_ci 236e5c31af7Sopenharmony_citemplate<> 237e5c31af7Sopenharmony_ciVkVideoEncodeH265ProfileInfoEXT VideoFormatPropertiesQueryTestInstance<VkVideoEncodeH265ProfileInfoEXT>::getProfileOperation () 238e5c31af7Sopenharmony_ci{ 239e5c31af7Sopenharmony_ci return getProfileOperationH265Encode(); 240e5c31af7Sopenharmony_ci} 241e5c31af7Sopenharmony_ci 242e5c31af7Sopenharmony_citemplate<typename ProfileOperation> 243e5c31af7Sopenharmony_citcu::TestStatus VideoFormatPropertiesQueryTestInstance<ProfileOperation>::iterate (void) 244e5c31af7Sopenharmony_ci{ 245e5c31af7Sopenharmony_ci const InstanceInterface& vk = m_context.getInstanceInterface(); 246e5c31af7Sopenharmony_ci const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); 247e5c31af7Sopenharmony_ci deUint32 videoFormatPropertiesCount = 0u; 248e5c31af7Sopenharmony_ci bool testResult = false; 249e5c31af7Sopenharmony_ci 250e5c31af7Sopenharmony_ci const ProfileOperation videoProfileOperation = getProfileOperation(); 251e5c31af7Sopenharmony_ci const VkVideoCodecOperationFlagBitsKHR videoCodecOperation = static_cast<VkVideoCodecOperationFlagBitsKHR>(m_videoCodecOperation); 252e5c31af7Sopenharmony_ci const VkVideoProfileInfoKHR videoProfile = 253e5c31af7Sopenharmony_ci { 254e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR, // VkStructureType sType; 255e5c31af7Sopenharmony_ci (void*)&videoProfileOperation, // void* pNext; 256e5c31af7Sopenharmony_ci videoCodecOperation, // VkVideoCodecOperationFlagBitsKHR videoCodecOperation; 257e5c31af7Sopenharmony_ci VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR, // VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; 258e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR lumaBitDepth; 259e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR chromaBitDepth; 260e5c31af7Sopenharmony_ci }; 261e5c31af7Sopenharmony_ci const VkVideoProfileListInfoKHR videoProfiles = 262e5c31af7Sopenharmony_ci { 263e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR, // VkStructureType sType; 264e5c31af7Sopenharmony_ci DE_NULL, // void* pNext; 265e5c31af7Sopenharmony_ci 1u, // deUint32 profilesCount; 266e5c31af7Sopenharmony_ci &videoProfile, // const VkVideoProfileInfoKHR* pProfiles; 267e5c31af7Sopenharmony_ci }; 268e5c31af7Sopenharmony_ci 269e5c31af7Sopenharmony_ci const VkPhysicalDeviceVideoFormatInfoKHR videoFormatInfo = 270e5c31af7Sopenharmony_ci { 271e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR, // VkStructureType sType; 272e5c31af7Sopenharmony_ci const_cast<VkVideoProfileListInfoKHR *>(&videoProfiles), // const void* pNext; 273e5c31af7Sopenharmony_ci m_imageUsageFlags, // VkImageUsageFlags imageUsage; 274e5c31af7Sopenharmony_ci }; 275e5c31af7Sopenharmony_ci const VkImageUsageFlags imageUsageFlagsDPB = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR; 276e5c31af7Sopenharmony_ci const bool imageUsageDPB = (videoFormatInfo.imageUsage & imageUsageFlagsDPB) != 0; 277e5c31af7Sopenharmony_ci 278e5c31af7Sopenharmony_ci { 279e5c31af7Sopenharmony_ci const VkResult result = vk.getPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &videoFormatInfo, &videoFormatPropertiesCount, DE_NULL); 280e5c31af7Sopenharmony_ci 281e5c31af7Sopenharmony_ci if (result != VK_SUCCESS) 282e5c31af7Sopenharmony_ci { 283e5c31af7Sopenharmony_ci ostringstream failMsg; 284e5c31af7Sopenharmony_ci 285e5c31af7Sopenharmony_ci failMsg << "Failed query call to vkGetPhysicalDeviceVideoFormatPropertiesKHR with " << result; 286e5c31af7Sopenharmony_ci 287e5c31af7Sopenharmony_ci return tcu::TestStatus::fail(failMsg.str()); 288e5c31af7Sopenharmony_ci } 289e5c31af7Sopenharmony_ci 290e5c31af7Sopenharmony_ci if (videoFormatPropertiesCount == 0) 291e5c31af7Sopenharmony_ci return tcu::TestStatus::fail("vkGetPhysicalDeviceVideoFormatPropertiesKHR reports 0 formats"); 292e5c31af7Sopenharmony_ci } 293e5c31af7Sopenharmony_ci 294e5c31af7Sopenharmony_ci { 295e5c31af7Sopenharmony_ci const VkVideoFormatPropertiesKHR videoFormatPropertiesKHR = 296e5c31af7Sopenharmony_ci { 297e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR, // VkStructureType sType; 298e5c31af7Sopenharmony_ci DE_NULL, // void* pNext; 299e5c31af7Sopenharmony_ci VK_FORMAT_MAX_ENUM, // VkFormat format; 300e5c31af7Sopenharmony_ci vk::makeComponentMappingIdentity(), // VkComponentMapping componentMapping; 301e5c31af7Sopenharmony_ci (VkImageCreateFlags)0u, // VkImageCreateFlags imageCreateFlags; 302e5c31af7Sopenharmony_ci VK_IMAGE_TYPE_2D, // VkImageType imageType; 303e5c31af7Sopenharmony_ci VK_IMAGE_TILING_OPTIMAL, // VkImageTiling imageTiling; 304e5c31af7Sopenharmony_ci VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR 305e5c31af7Sopenharmony_ci | VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR, // VkImageUsageFlags imageUsageFlags; 306e5c31af7Sopenharmony_ci }; 307e5c31af7Sopenharmony_ci std::vector<VkVideoFormatPropertiesKHR> videoFormatProperties (videoFormatPropertiesCount, videoFormatPropertiesKHR); 308e5c31af7Sopenharmony_ci 309e5c31af7Sopenharmony_ci const VkResult result = vk.getPhysicalDeviceVideoFormatPropertiesKHR(physicalDevice, &videoFormatInfo, &videoFormatPropertiesCount, videoFormatProperties.data()); 310e5c31af7Sopenharmony_ci 311e5c31af7Sopenharmony_ci if (result != VK_SUCCESS) 312e5c31af7Sopenharmony_ci { 313e5c31af7Sopenharmony_ci ostringstream failMsg; 314e5c31af7Sopenharmony_ci 315e5c31af7Sopenharmony_ci failMsg << "Failed query data call to vkGetPhysicalDeviceVideoFormatPropertiesKHR with " << result; 316e5c31af7Sopenharmony_ci 317e5c31af7Sopenharmony_ci return tcu::TestStatus::fail(failMsg.str()); 318e5c31af7Sopenharmony_ci } 319e5c31af7Sopenharmony_ci 320e5c31af7Sopenharmony_ci if (videoFormatPropertiesCount == 0) 321e5c31af7Sopenharmony_ci return tcu::TestStatus::fail("vkGetPhysicalDeviceVideoFormatPropertiesKHR reports 0 formats supported for chosen encding/decoding"); 322e5c31af7Sopenharmony_ci 323e5c31af7Sopenharmony_ci if (videoFormatPropertiesCount != videoFormatProperties.size()) 324e5c31af7Sopenharmony_ci return tcu::TestStatus::fail("Number of formats returned is less than reported."); 325e5c31af7Sopenharmony_ci 326e5c31af7Sopenharmony_ci for (const auto& videoFormatProperty: videoFormatProperties) 327e5c31af7Sopenharmony_ci { 328e5c31af7Sopenharmony_ci if (videoFormatProperty.format == VK_FORMAT_MAX_ENUM) 329e5c31af7Sopenharmony_ci return tcu::TestStatus::fail("Format is not written"); 330e5c31af7Sopenharmony_ci 331e5c31af7Sopenharmony_ci if (videoFormatProperty.format == VK_FORMAT_UNDEFINED) 332e5c31af7Sopenharmony_ci { 333e5c31af7Sopenharmony_ci if (!imageUsageDPB) 334e5c31af7Sopenharmony_ci TCU_FAIL("VK_FORMAT_UNDEFINED is allowed only for DPB image usage"); 335e5c31af7Sopenharmony_ci 336e5c31af7Sopenharmony_ci if (videoFormatProperties.size() != 1) 337e5c31af7Sopenharmony_ci TCU_FAIL("VK_FORMAT_UNDEFINED must be the only format returned for opaque DPB"); 338e5c31af7Sopenharmony_ci 339e5c31af7Sopenharmony_ci testResult = true; 340e5c31af7Sopenharmony_ci 341e5c31af7Sopenharmony_ci break; 342e5c31af7Sopenharmony_ci } 343e5c31af7Sopenharmony_ci 344e5c31af7Sopenharmony_ci if (videoFormatProperty.format == VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM || 345e5c31af7Sopenharmony_ci videoFormatProperty.format == VK_FORMAT_G8_B8R8_2PLANE_420_UNORM) 346e5c31af7Sopenharmony_ci { 347e5c31af7Sopenharmony_ci testResult = true; 348e5c31af7Sopenharmony_ci 349e5c31af7Sopenharmony_ci break; 350e5c31af7Sopenharmony_ci } 351e5c31af7Sopenharmony_ci } 352e5c31af7Sopenharmony_ci } 353e5c31af7Sopenharmony_ci 354e5c31af7Sopenharmony_ci if (testResult) 355e5c31af7Sopenharmony_ci return tcu::TestStatus::pass("Pass"); 356e5c31af7Sopenharmony_ci else 357e5c31af7Sopenharmony_ci return tcu::TestStatus::fail("Fail"); 358e5c31af7Sopenharmony_ci} 359e5c31af7Sopenharmony_ci 360e5c31af7Sopenharmony_citypedef VideoFormatPropertiesQueryTestInstance<VkVideoDecodeH264ProfileInfoKHR> VideoFormatPropertiesQueryH264DecodeTestInstance; 361e5c31af7Sopenharmony_citypedef VideoFormatPropertiesQueryTestInstance<VkVideoEncodeH264ProfileInfoEXT> VideoFormatPropertiesQueryH264EncodeTestInstance; 362e5c31af7Sopenharmony_citypedef VideoFormatPropertiesQueryTestInstance<VkVideoDecodeH265ProfileInfoKHR> VideoFormatPropertiesQueryH265DecodeTestInstance; 363e5c31af7Sopenharmony_citypedef VideoFormatPropertiesQueryTestInstance<VkVideoEncodeH265ProfileInfoEXT> VideoFormatPropertiesQueryH265EncodeTestInstance; 364e5c31af7Sopenharmony_ci 365e5c31af7Sopenharmony_ciclass VideoCapabilitiesQueryTestInstance : public VideoBaseTestInstance 366e5c31af7Sopenharmony_ci{ 367e5c31af7Sopenharmony_cipublic: 368e5c31af7Sopenharmony_ci VideoCapabilitiesQueryTestInstance (Context& context, const CaseDef& data); 369e5c31af7Sopenharmony_ci ~VideoCapabilitiesQueryTestInstance (void); 370e5c31af7Sopenharmony_ci 371e5c31af7Sopenharmony_ciprotected: 372e5c31af7Sopenharmony_ci void validateVideoCapabilities (const VkVideoCapabilitiesKHR& videoCapabilitiesKHR, 373e5c31af7Sopenharmony_ci const VkVideoCapabilitiesKHR& videoCapabilitiesKHRSecond); 374e5c31af7Sopenharmony_ci void validateVideoDecodeCapabilities (const VkVideoDecodeCapabilitiesKHR& videoDecodeCapabilitiesKHR, 375e5c31af7Sopenharmony_ci const VkVideoDecodeCapabilitiesKHR& videoDecodeCapabilitiesKHRSecond); 376e5c31af7Sopenharmony_ci void validateVideoEncodeCapabilities (const VkVideoEncodeCapabilitiesKHR& videoEncodeCapabilitiesKHR, 377e5c31af7Sopenharmony_ci const VkVideoEncodeCapabilitiesKHR& videoEncodeCapabilitiesKHRSecond); 378e5c31af7Sopenharmony_ci void validateExtensionProperties (const VkExtensionProperties& extensionProperties, 379e5c31af7Sopenharmony_ci const VkExtensionProperties& extensionPropertiesSecond); 380e5c31af7Sopenharmony_ci CaseDef m_caseDef; 381e5c31af7Sopenharmony_ci}; 382e5c31af7Sopenharmony_ci 383e5c31af7Sopenharmony_ciVideoCapabilitiesQueryTestInstance::VideoCapabilitiesQueryTestInstance (Context& context, const CaseDef& data) 384e5c31af7Sopenharmony_ci : VideoBaseTestInstance (context) 385e5c31af7Sopenharmony_ci , m_caseDef (data) 386e5c31af7Sopenharmony_ci{ 387e5c31af7Sopenharmony_ci DE_UNREF(m_caseDef); 388e5c31af7Sopenharmony_ci} 389e5c31af7Sopenharmony_ci 390e5c31af7Sopenharmony_ciVideoCapabilitiesQueryTestInstance::~VideoCapabilitiesQueryTestInstance (void) 391e5c31af7Sopenharmony_ci{ 392e5c31af7Sopenharmony_ci} 393e5c31af7Sopenharmony_ci 394e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryTestInstance::validateVideoCapabilities (const VkVideoCapabilitiesKHR& videoCapabilitiesKHR, 395e5c31af7Sopenharmony_ci const VkVideoCapabilitiesKHR& videoCapabilitiesKHRSecond) 396e5c31af7Sopenharmony_ci{ 397e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, sType); 398e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, flags); 399e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, minBitstreamBufferOffsetAlignment); 400e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, minBitstreamBufferSizeAlignment); 401e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, pictureAccessGranularity); 402e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, minCodedExtent); 403e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxCodedExtent); 404e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxDpbSlots); 405e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxActiveReferencePictures); 406e5c31af7Sopenharmony_ci validateExtensionProperties(videoCapabilitiesKHR.stdHeaderVersion, videoCapabilitiesKHRSecond.stdHeaderVersion); 407e5c31af7Sopenharmony_ci 408e5c31af7Sopenharmony_ci const VkVideoCapabilityFlagsKHR videoCapabilityFlagsKHR = VK_VIDEO_CAPABILITY_PROTECTED_CONTENT_BIT_KHR 409e5c31af7Sopenharmony_ci | VK_VIDEO_CAPABILITY_SEPARATE_REFERENCE_IMAGES_BIT_KHR; 410e5c31af7Sopenharmony_ci 411e5c31af7Sopenharmony_ci if ((videoCapabilitiesKHR.flags & ~videoCapabilityFlagsKHR) != 0) 412e5c31af7Sopenharmony_ci TCU_FAIL("Undeclared videoCapabilitiesKHR.flags returned"); 413e5c31af7Sopenharmony_ci 414e5c31af7Sopenharmony_ci if (!deIsPowerOfTwo64(videoCapabilitiesKHR.minBitstreamBufferOffsetAlignment)) 415e5c31af7Sopenharmony_ci TCU_FAIL("Expected to be Power-Of-Two: videoCapabilitiesKHR.minBitstreamBufferOffsetAlignment"); 416e5c31af7Sopenharmony_ci 417e5c31af7Sopenharmony_ci if (!deIsPowerOfTwo64(videoCapabilitiesKHR.minBitstreamBufferSizeAlignment)) 418e5c31af7Sopenharmony_ci TCU_FAIL("Expected to be Power-Of-Two: videoCapabilitiesKHR.minBitstreamBufferSizeAlignment"); 419e5c31af7Sopenharmony_ci 420e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.minBitstreamBufferOffsetAlignment == 0) 421e5c31af7Sopenharmony_ci TCU_FAIL("Expected to be non zero: videoCapabilitiesKHR.minBitstreamBufferOffsetAlignment"); 422e5c31af7Sopenharmony_ci 423e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.minBitstreamBufferSizeAlignment == 0) 424e5c31af7Sopenharmony_ci TCU_FAIL("Expected to be non zero: videoCapabilitiesKHR.minBitstreamBufferSizeAlignment"); 425e5c31af7Sopenharmony_ci 426e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.pictureAccessGranularity.width == 0) 427e5c31af7Sopenharmony_ci TCU_FAIL("Expected to be non-zero: videoCapabilitiesKHR.pictureAccessGranularity.width"); 428e5c31af7Sopenharmony_ci 429e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.pictureAccessGranularity.height == 0) 430e5c31af7Sopenharmony_ci TCU_FAIL("Expected to be non-zero: videoCapabilitiesKHR.pictureAccessGranularity.height"); 431e5c31af7Sopenharmony_ci 432e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.minCodedExtent.width == 0 || videoCapabilitiesKHR.minCodedExtent.height == 0) 433e5c31af7Sopenharmony_ci TCU_FAIL("Invalid videoCapabilitiesKHR.minCodedExtent"); 434e5c31af7Sopenharmony_ci 435e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.maxCodedExtent.width < videoCapabilitiesKHR.minCodedExtent.width) 436e5c31af7Sopenharmony_ci TCU_FAIL("Invalid videoCapabilitiesKHR.maxCodedExtent.width"); 437e5c31af7Sopenharmony_ci 438e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.maxCodedExtent.height < videoCapabilitiesKHR.minCodedExtent.height) 439e5c31af7Sopenharmony_ci TCU_FAIL("Invalid videoCapabilitiesKHR.maxCodedExtent.height"); 440e5c31af7Sopenharmony_ci 441e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.maxDpbSlots == 0) 442e5c31af7Sopenharmony_ci TCU_FAIL("Invalid videoCapabilitiesKHR.maxDpbSlots"); 443e5c31af7Sopenharmony_ci 444e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.maxActiveReferencePictures == 0) 445e5c31af7Sopenharmony_ci TCU_FAIL("Invalid videoCapabilitiesKHR.maxActiveReferencePictures"); 446e5c31af7Sopenharmony_ci} 447e5c31af7Sopenharmony_ci 448e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryTestInstance::validateVideoDecodeCapabilities (const VkVideoDecodeCapabilitiesKHR& videoDecodeCapabilitiesKHR, 449e5c31af7Sopenharmony_ci const VkVideoDecodeCapabilitiesKHR& videoDecodeCapabilitiesKHRSecond) 450e5c31af7Sopenharmony_ci{ 451e5c31af7Sopenharmony_ci const VkVideoDecodeCapabilityFlagsKHR videoDecodeCapabilitiesFlags = VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_COINCIDE_BIT_KHR 452e5c31af7Sopenharmony_ci | VK_VIDEO_DECODE_CAPABILITY_DPB_AND_OUTPUT_DISTINCT_BIT_KHR; 453e5c31af7Sopenharmony_ci 454e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoDecodeCapabilitiesKHR, videoDecodeCapabilitiesKHRSecond, sType); 455e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoDecodeCapabilitiesKHR, videoDecodeCapabilitiesKHRSecond, flags); 456e5c31af7Sopenharmony_ci 457e5c31af7Sopenharmony_ci if ((videoDecodeCapabilitiesKHR.flags & ~videoDecodeCapabilitiesFlags) != 0) 458e5c31af7Sopenharmony_ci TCU_FAIL("Undefined videoDecodeCapabilitiesKHR.flags"); 459e5c31af7Sopenharmony_ci} 460e5c31af7Sopenharmony_ci 461e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryTestInstance::validateVideoEncodeCapabilities (const VkVideoEncodeCapabilitiesKHR& videoEncodeCapabilitiesKHR, 462e5c31af7Sopenharmony_ci const VkVideoEncodeCapabilitiesKHR& videoEncodeCapabilitiesKHRSecond) 463e5c31af7Sopenharmony_ci{ 464e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoEncodeCapabilitiesKHR, videoEncodeCapabilitiesKHRSecond, sType); 465e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoEncodeCapabilitiesKHR, videoEncodeCapabilitiesKHRSecond, flags); 466e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoEncodeCapabilitiesKHR, videoEncodeCapabilitiesKHRSecond, rateControlModes); 467e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoEncodeCapabilitiesKHR, videoEncodeCapabilitiesKHRSecond, maxRateControlLayers); 468e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoEncodeCapabilitiesKHR, videoEncodeCapabilitiesKHRSecond, maxQualityLevels); 469e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoEncodeCapabilitiesKHR, videoEncodeCapabilitiesKHRSecond, encodeInputPictureGranularity); 470e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoEncodeCapabilitiesKHR, videoEncodeCapabilitiesKHRSecond, supportedEncodeFeedbackFlags); 471e5c31af7Sopenharmony_ci 472e5c31af7Sopenharmony_ci const VkVideoEncodeCapabilityFlagsKHR videoEncodeCapabilityFlags = VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR; 473e5c31af7Sopenharmony_ci 474e5c31af7Sopenharmony_ci if ((videoEncodeCapabilitiesKHR.flags & ~videoEncodeCapabilityFlags) != 0) 475e5c31af7Sopenharmony_ci TCU_FAIL("Undeclared VkVideoEncodeCapabilitiesKHR.flags returned"); 476e5c31af7Sopenharmony_ci 477e5c31af7Sopenharmony_ci if (videoEncodeCapabilitiesKHR.maxRateControlLayers == 0) 478e5c31af7Sopenharmony_ci TCU_FAIL("videoEncodeCapabilitiesKHR.maxRateControlLayers is zero. Implementations must report at least 1."); 479e5c31af7Sopenharmony_ci 480e5c31af7Sopenharmony_ci if (videoEncodeCapabilitiesKHR.maxQualityLevels == 0) 481e5c31af7Sopenharmony_ci TCU_FAIL("videoEncodeCapabilitiesKHR.maxQualityLevels is zero. Implementations must report at least 1."); 482e5c31af7Sopenharmony_ci} 483e5c31af7Sopenharmony_ci 484e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryTestInstance::validateExtensionProperties (const VkExtensionProperties& extensionProperties, 485e5c31af7Sopenharmony_ci const VkExtensionProperties& extensionPropertiesSecond) 486e5c31af7Sopenharmony_ci{ 487e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(extensionProperties, extensionPropertiesSecond, specVersion); 488e5c31af7Sopenharmony_ci 489e5c31af7Sopenharmony_ci for (size_t ndx = 0; ndx < VK_MAX_EXTENSION_NAME_SIZE; ++ndx) 490e5c31af7Sopenharmony_ci { 491e5c31af7Sopenharmony_ci if (extensionProperties.extensionName[ndx] != extensionPropertiesSecond.extensionName[ndx]) 492e5c31af7Sopenharmony_ci TCU_FAIL("Unequal extensionProperties.extensionName"); 493e5c31af7Sopenharmony_ci 494e5c31af7Sopenharmony_ci if (extensionProperties.extensionName[ndx] == 0) 495e5c31af7Sopenharmony_ci return; 496e5c31af7Sopenharmony_ci } 497e5c31af7Sopenharmony_ci 498e5c31af7Sopenharmony_ci TCU_FAIL("Non-zero terminated string extensionProperties.extensionName"); 499e5c31af7Sopenharmony_ci} 500e5c31af7Sopenharmony_ci 501e5c31af7Sopenharmony_ci 502e5c31af7Sopenharmony_ciclass VideoCapabilitiesQueryH264DecodeTestInstance : public VideoCapabilitiesQueryTestInstance 503e5c31af7Sopenharmony_ci{ 504e5c31af7Sopenharmony_cipublic: 505e5c31af7Sopenharmony_ci VideoCapabilitiesQueryH264DecodeTestInstance (Context& context, const CaseDef& data); 506e5c31af7Sopenharmony_ci virtual ~VideoCapabilitiesQueryH264DecodeTestInstance (void); 507e5c31af7Sopenharmony_ci tcu::TestStatus iterate (void); 508e5c31af7Sopenharmony_ci 509e5c31af7Sopenharmony_ciprotected: 510e5c31af7Sopenharmony_ci void validateVideoCapabilitiesExt (const VkVideoDecodeH264CapabilitiesKHR& videoCapabilitiesKHR, 511e5c31af7Sopenharmony_ci const VkVideoDecodeH264CapabilitiesKHR& videoCapabilitiesKHRSecond); 512e5c31af7Sopenharmony_ci}; 513e5c31af7Sopenharmony_ci 514e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH264DecodeTestInstance::VideoCapabilitiesQueryH264DecodeTestInstance (Context& context, const CaseDef& data) 515e5c31af7Sopenharmony_ci : VideoCapabilitiesQueryTestInstance(context, data) 516e5c31af7Sopenharmony_ci{ 517e5c31af7Sopenharmony_ci} 518e5c31af7Sopenharmony_ci 519e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH264DecodeTestInstance::~VideoCapabilitiesQueryH264DecodeTestInstance (void) 520e5c31af7Sopenharmony_ci{ 521e5c31af7Sopenharmony_ci} 522e5c31af7Sopenharmony_ci 523e5c31af7Sopenharmony_citcu::TestStatus VideoCapabilitiesQueryH264DecodeTestInstance::iterate (void) 524e5c31af7Sopenharmony_ci{ 525e5c31af7Sopenharmony_ci const InstanceInterface& vk = m_context.getInstanceInterface(); 526e5c31af7Sopenharmony_ci const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); 527e5c31af7Sopenharmony_ci const VkVideoCodecOperationFlagBitsKHR videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR; 528e5c31af7Sopenharmony_ci const VkVideoDecodeH264ProfileInfoKHR videoProfileOperation = 529e5c31af7Sopenharmony_ci { 530e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_INFO_KHR, // VkStructureType sType; 531e5c31af7Sopenharmony_ci DE_NULL, // const void* pNext; 532e5c31af7Sopenharmony_ci STD_VIDEO_H264_PROFILE_IDC_BASELINE, // StdVideoH264ProfileIdc stdProfileIdc; 533e5c31af7Sopenharmony_ci VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR, // VkVideoDecodeH264PictureLayoutFlagsEXT pictureLayout; 534e5c31af7Sopenharmony_ci }; 535e5c31af7Sopenharmony_ci const VkVideoProfileInfoKHR videoProfile = 536e5c31af7Sopenharmony_ci { 537e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR, // VkStructureType sType; 538e5c31af7Sopenharmony_ci (void*)&videoProfileOperation, // void* pNext; 539e5c31af7Sopenharmony_ci videoCodecOperation, // VkVideoCodecOperationFlagBitsKHR videoCodecOperation; 540e5c31af7Sopenharmony_ci VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR, // VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; 541e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR lumaBitDepth; 542e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR chromaBitDepth; 543e5c31af7Sopenharmony_ci }; 544e5c31af7Sopenharmony_ci 545e5c31af7Sopenharmony_ci VkVideoDecodeH264CapabilitiesKHR videoDecodeH264Capabilities[2]; 546e5c31af7Sopenharmony_ci VkVideoDecodeCapabilitiesKHR videoDecodeCapabilities[2]; 547e5c31af7Sopenharmony_ci VkVideoCapabilitiesKHR videoCapabilites[2]; 548e5c31af7Sopenharmony_ci 549e5c31af7Sopenharmony_ci for (size_t ndx = 0; ndx < DE_LENGTH_OF_ARRAY(videoCapabilites); ++ndx) 550e5c31af7Sopenharmony_ci { 551e5c31af7Sopenharmony_ci const deUint8 filling = (ndx == 0) ? 0x00 : 0xFF; 552e5c31af7Sopenharmony_ci 553e5c31af7Sopenharmony_ci deMemset(&videoCapabilites[ndx], filling, sizeof(videoCapabilites[ndx])); 554e5c31af7Sopenharmony_ci deMemset(&videoDecodeCapabilities[ndx], filling, sizeof(videoDecodeCapabilities[ndx])); 555e5c31af7Sopenharmony_ci deMemset(&videoDecodeH264Capabilities[ndx], filling, sizeof(videoDecodeH264Capabilities[ndx])); 556e5c31af7Sopenharmony_ci 557e5c31af7Sopenharmony_ci videoCapabilites[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR; 558e5c31af7Sopenharmony_ci videoCapabilites[ndx].pNext = &videoDecodeCapabilities[ndx]; 559e5c31af7Sopenharmony_ci videoDecodeCapabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR; 560e5c31af7Sopenharmony_ci videoDecodeCapabilities[ndx].pNext = &videoDecodeH264Capabilities[ndx]; 561e5c31af7Sopenharmony_ci videoDecodeH264Capabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR; 562e5c31af7Sopenharmony_ci videoDecodeH264Capabilities[ndx].pNext = DE_NULL; 563e5c31af7Sopenharmony_ci 564e5c31af7Sopenharmony_ci VkResult result = vk.getPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &videoProfile, &videoCapabilites[ndx]); 565e5c31af7Sopenharmony_ci 566e5c31af7Sopenharmony_ci if (result != VK_SUCCESS) 567e5c31af7Sopenharmony_ci { 568e5c31af7Sopenharmony_ci ostringstream failMsg; 569e5c31af7Sopenharmony_ci 570e5c31af7Sopenharmony_ci failMsg << "Failed query call to vkGetPhysicalDeviceVideoCapabilitiesKHR with " << result << " at iteration " << ndx; 571e5c31af7Sopenharmony_ci 572e5c31af7Sopenharmony_ci return tcu::TestStatus::fail(failMsg.str()); 573e5c31af7Sopenharmony_ci } 574e5c31af7Sopenharmony_ci } 575e5c31af7Sopenharmony_ci 576e5c31af7Sopenharmony_ci validateVideoCapabilities(videoCapabilites[0], videoCapabilites[1]); 577e5c31af7Sopenharmony_ci validateExtensionProperties(videoCapabilites[0].stdHeaderVersion, *getVideoExtensionProperties(videoCodecOperation)); 578e5c31af7Sopenharmony_ci validateVideoDecodeCapabilities(videoDecodeCapabilities[0], videoDecodeCapabilities[1]); 579e5c31af7Sopenharmony_ci validateVideoCapabilitiesExt(videoDecodeH264Capabilities[0], videoDecodeH264Capabilities[1]); 580e5c31af7Sopenharmony_ci 581e5c31af7Sopenharmony_ci return tcu::TestStatus::pass("Pass"); 582e5c31af7Sopenharmony_ci} 583e5c31af7Sopenharmony_ci 584e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryH264DecodeTestInstance::validateVideoCapabilitiesExt (const VkVideoDecodeH264CapabilitiesKHR& videoCapabilitiesKHR, 585e5c31af7Sopenharmony_ci const VkVideoDecodeH264CapabilitiesKHR& videoCapabilitiesKHRSecond) 586e5c31af7Sopenharmony_ci{ 587e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, sType); 588e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxLevelIdc); 589e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, fieldOffsetGranularity); 590e5c31af7Sopenharmony_ci} 591e5c31af7Sopenharmony_ci 592e5c31af7Sopenharmony_ci 593e5c31af7Sopenharmony_ciclass VideoCapabilitiesQueryH264EncodeTestInstance : public VideoCapabilitiesQueryTestInstance 594e5c31af7Sopenharmony_ci{ 595e5c31af7Sopenharmony_cipublic: 596e5c31af7Sopenharmony_ci VideoCapabilitiesQueryH264EncodeTestInstance (Context& context, const CaseDef& data); 597e5c31af7Sopenharmony_ci virtual ~VideoCapabilitiesQueryH264EncodeTestInstance (void); 598e5c31af7Sopenharmony_ci tcu::TestStatus iterate (void); 599e5c31af7Sopenharmony_ci 600e5c31af7Sopenharmony_ciprivate: 601e5c31af7Sopenharmony_ci void validateVideoCapabilitiesExt (const VkVideoEncodeH264CapabilitiesEXT& videoCapabilitiesKHR, 602e5c31af7Sopenharmony_ci const VkVideoEncodeH264CapabilitiesEXT& videoCapabilitiesKHRSecond); 603e5c31af7Sopenharmony_ci}; 604e5c31af7Sopenharmony_ci 605e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH264EncodeTestInstance::VideoCapabilitiesQueryH264EncodeTestInstance (Context& context, const CaseDef& data) 606e5c31af7Sopenharmony_ci : VideoCapabilitiesQueryTestInstance(context, data) 607e5c31af7Sopenharmony_ci{ 608e5c31af7Sopenharmony_ci} 609e5c31af7Sopenharmony_ci 610e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH264EncodeTestInstance::~VideoCapabilitiesQueryH264EncodeTestInstance (void) 611e5c31af7Sopenharmony_ci{ 612e5c31af7Sopenharmony_ci} 613e5c31af7Sopenharmony_ci 614e5c31af7Sopenharmony_citcu::TestStatus VideoCapabilitiesQueryH264EncodeTestInstance::iterate (void) 615e5c31af7Sopenharmony_ci{ 616e5c31af7Sopenharmony_ci const InstanceInterface& vk = m_context.getInstanceInterface(); 617e5c31af7Sopenharmony_ci const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); 618e5c31af7Sopenharmony_ci const VkVideoCodecOperationFlagBitsKHR videoCodecOperation = VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT; 619e5c31af7Sopenharmony_ci const VkVideoEncodeH264ProfileInfoEXT videoProfileOperation = 620e5c31af7Sopenharmony_ci { 621e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_INFO_EXT, // VkStructureType sType; 622e5c31af7Sopenharmony_ci DE_NULL, // const void* pNext; 623e5c31af7Sopenharmony_ci STD_VIDEO_H264_PROFILE_IDC_BASELINE, // StdVideoH264ProfileIdc stdProfileIdc; 624e5c31af7Sopenharmony_ci }; 625e5c31af7Sopenharmony_ci const VkVideoProfileInfoKHR videoProfile = 626e5c31af7Sopenharmony_ci { 627e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR, // VkStructureType sType; 628e5c31af7Sopenharmony_ci (void*)&videoProfileOperation, // void* pNext; 629e5c31af7Sopenharmony_ci videoCodecOperation, // VkVideoCodecOperationFlagBitsKHR videoCodecOperation; 630e5c31af7Sopenharmony_ci VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR, // VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; 631e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR lumaBitDepth; 632e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR chromaBitDepth; 633e5c31af7Sopenharmony_ci }; 634e5c31af7Sopenharmony_ci VkVideoEncodeH264CapabilitiesEXT videoEncodeH264Capabilities[2]; 635e5c31af7Sopenharmony_ci VkVideoEncodeCapabilitiesKHR videoEncodeCapabilities[2]; 636e5c31af7Sopenharmony_ci VkVideoCapabilitiesKHR videoCapabilites[2]; 637e5c31af7Sopenharmony_ci 638e5c31af7Sopenharmony_ci for (size_t ndx = 0; ndx < DE_LENGTH_OF_ARRAY(videoCapabilites); ++ndx) 639e5c31af7Sopenharmony_ci { 640e5c31af7Sopenharmony_ci const deUint8 filling = (ndx == 0) ? 0x00 : 0xFF; 641e5c31af7Sopenharmony_ci 642e5c31af7Sopenharmony_ci deMemset(&videoCapabilites[ndx], filling, sizeof(videoCapabilites[ndx])); 643e5c31af7Sopenharmony_ci deMemset(&videoEncodeCapabilities[ndx], filling, sizeof(videoEncodeCapabilities[ndx])); 644e5c31af7Sopenharmony_ci deMemset(&videoEncodeH264Capabilities[ndx], filling, sizeof(videoEncodeH264Capabilities[ndx])); 645e5c31af7Sopenharmony_ci 646e5c31af7Sopenharmony_ci videoCapabilites[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR; 647e5c31af7Sopenharmony_ci videoCapabilites[ndx].pNext = &videoEncodeCapabilities[ndx]; 648e5c31af7Sopenharmony_ci videoEncodeCapabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR; 649e5c31af7Sopenharmony_ci videoEncodeCapabilities[ndx].pNext = &videoEncodeH264Capabilities[ndx]; 650e5c31af7Sopenharmony_ci videoEncodeH264Capabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT; 651e5c31af7Sopenharmony_ci videoEncodeH264Capabilities[ndx].pNext = DE_NULL; 652e5c31af7Sopenharmony_ci 653e5c31af7Sopenharmony_ci VkResult result = vk.getPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &videoProfile, &videoCapabilites[ndx]); 654e5c31af7Sopenharmony_ci 655e5c31af7Sopenharmony_ci if (result != VK_SUCCESS) 656e5c31af7Sopenharmony_ci { 657e5c31af7Sopenharmony_ci ostringstream failMsg; 658e5c31af7Sopenharmony_ci 659e5c31af7Sopenharmony_ci failMsg << "Failed query call to vkGetPhysicalDeviceVideoCapabilitiesKHR with " << result << " at iteration " << ndx; 660e5c31af7Sopenharmony_ci 661e5c31af7Sopenharmony_ci return tcu::TestStatus::fail(failMsg.str()); 662e5c31af7Sopenharmony_ci } 663e5c31af7Sopenharmony_ci } 664e5c31af7Sopenharmony_ci 665e5c31af7Sopenharmony_ci validateVideoCapabilities(videoCapabilites[0], videoCapabilites[1]); 666e5c31af7Sopenharmony_ci validateVideoEncodeCapabilities(videoEncodeCapabilities[0], videoEncodeCapabilities[1]); 667e5c31af7Sopenharmony_ci validateExtensionProperties(videoCapabilites[0].stdHeaderVersion, *getVideoExtensionProperties(videoCodecOperation)); 668e5c31af7Sopenharmony_ci validateVideoCapabilitiesExt(videoEncodeH264Capabilities[0], videoEncodeH264Capabilities[1]); 669e5c31af7Sopenharmony_ci 670e5c31af7Sopenharmony_ci return tcu::TestStatus::pass("Pass"); 671e5c31af7Sopenharmony_ci} 672e5c31af7Sopenharmony_ci 673e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryH264EncodeTestInstance::validateVideoCapabilitiesExt (const VkVideoEncodeH264CapabilitiesEXT& videoCapabilitiesKHR, const VkVideoEncodeH264CapabilitiesEXT& videoCapabilitiesKHRSecond) 674e5c31af7Sopenharmony_ci{ 675e5c31af7Sopenharmony_ci const VkVideoEncodeH264CapabilityFlagsEXT videoCapabilityFlags = VK_VIDEO_ENCODE_H264_CAPABILITY_HRD_COMPLIANCE_BIT_EXT 676e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_PREDICTION_WEIGHT_TABLE_GENERATED_BIT_EXT 677e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_ROW_UNALIGNED_SLICE_BIT_EXT 678e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_DIFFERENT_SLICE_TYPE_BIT_EXT 679e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L0_LIST_BIT_EXT 680e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_B_FRAME_IN_L1_LIST_BIT_EXT 681e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_EXT 682e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_EXT 683e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_EXT; 684e5c31af7Sopenharmony_ci 685e5c31af7Sopenharmony_ci 686e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, sType); 687e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, flags); 688e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxLevelIdc); 689e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxSliceCount); 690e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxPPictureL0ReferenceCount); 691e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxBPictureL0ReferenceCount); 692e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxL1ReferenceCount); 693e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxTemporalLayerCount); 694e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, expectDyadicTemporalLayerPattern); 695e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, minQp); 696e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxQp); 697e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, prefersGopRemainingFrames); 698e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, requiresGopRemainingFrames); 699e5c31af7Sopenharmony_ci 700e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.flags == 0) 701e5c31af7Sopenharmony_ci TCU_FAIL("videoCapabilitiesKHR.flags must not be 0"); 702e5c31af7Sopenharmony_ci 703e5c31af7Sopenharmony_ci if ((videoCapabilitiesKHR.flags & ~videoCapabilityFlags) != 0) 704e5c31af7Sopenharmony_ci TCU_FAIL("Undefined videoCapabilitiesKHR.flags"); 705e5c31af7Sopenharmony_ci} 706e5c31af7Sopenharmony_ci 707e5c31af7Sopenharmony_ci 708e5c31af7Sopenharmony_ciclass VideoCapabilitiesQueryH265DecodeTestInstance : public VideoCapabilitiesQueryTestInstance 709e5c31af7Sopenharmony_ci{ 710e5c31af7Sopenharmony_cipublic: 711e5c31af7Sopenharmony_ci VideoCapabilitiesQueryH265DecodeTestInstance (Context& context, const CaseDef& data); 712e5c31af7Sopenharmony_ci virtual ~VideoCapabilitiesQueryH265DecodeTestInstance (void); 713e5c31af7Sopenharmony_ci tcu::TestStatus iterate (void); 714e5c31af7Sopenharmony_ci 715e5c31af7Sopenharmony_ciprotected: 716e5c31af7Sopenharmony_ci void validateVideoCapabilitiesExt (const VkVideoDecodeH265CapabilitiesKHR& videoCapabilitiesKHR, 717e5c31af7Sopenharmony_ci const VkVideoDecodeH265CapabilitiesKHR& videoCapabilitiesKHRSecond); 718e5c31af7Sopenharmony_ci}; 719e5c31af7Sopenharmony_ci 720e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH265DecodeTestInstance::VideoCapabilitiesQueryH265DecodeTestInstance (Context& context, const CaseDef& data) 721e5c31af7Sopenharmony_ci : VideoCapabilitiesQueryTestInstance(context, data) 722e5c31af7Sopenharmony_ci{ 723e5c31af7Sopenharmony_ci} 724e5c31af7Sopenharmony_ci 725e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH265DecodeTestInstance::~VideoCapabilitiesQueryH265DecodeTestInstance (void) 726e5c31af7Sopenharmony_ci{ 727e5c31af7Sopenharmony_ci} 728e5c31af7Sopenharmony_ci 729e5c31af7Sopenharmony_citcu::TestStatus VideoCapabilitiesQueryH265DecodeTestInstance::iterate (void) 730e5c31af7Sopenharmony_ci{ 731e5c31af7Sopenharmony_ci const InstanceInterface& vk = m_context.getInstanceInterface(); 732e5c31af7Sopenharmony_ci const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); 733e5c31af7Sopenharmony_ci const VkVideoCodecOperationFlagBitsKHR videoCodecOperation = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR; 734e5c31af7Sopenharmony_ci const VkVideoDecodeH265ProfileInfoKHR videoProfileOperation = 735e5c31af7Sopenharmony_ci { 736e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR, // VkStructureType sType; 737e5c31af7Sopenharmony_ci DE_NULL, // const void* pNext; 738e5c31af7Sopenharmony_ci STD_VIDEO_H265_PROFILE_IDC_MAIN, // StdVideoH265ProfileIdc stdProfileIdc; 739e5c31af7Sopenharmony_ci }; 740e5c31af7Sopenharmony_ci const VkVideoProfileInfoKHR videoProfile = 741e5c31af7Sopenharmony_ci { 742e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR, // VkStructureType sType; 743e5c31af7Sopenharmony_ci (void*)&videoProfileOperation, // void* pNext; 744e5c31af7Sopenharmony_ci videoCodecOperation, // VkVideoCodecOperationFlagBitsKHR videoCodecOperation; 745e5c31af7Sopenharmony_ci VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR, // VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; 746e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR lumaBitDepth; 747e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR chromaBitDepth; 748e5c31af7Sopenharmony_ci }; 749e5c31af7Sopenharmony_ci VkVideoDecodeH265CapabilitiesKHR videoDecodeH265Capabilities[2]; 750e5c31af7Sopenharmony_ci VkVideoDecodeCapabilitiesKHR videoDecodeCapabilities[2]; 751e5c31af7Sopenharmony_ci VkVideoCapabilitiesKHR videoCapabilites[2]; 752e5c31af7Sopenharmony_ci 753e5c31af7Sopenharmony_ci for (size_t ndx = 0; ndx < DE_LENGTH_OF_ARRAY(videoCapabilites); ++ndx) 754e5c31af7Sopenharmony_ci { 755e5c31af7Sopenharmony_ci const deUint8 filling = (ndx == 0) ? 0x00 : 0xFF; 756e5c31af7Sopenharmony_ci 757e5c31af7Sopenharmony_ci deMemset(&videoCapabilites[ndx], filling, sizeof(videoCapabilites[ndx])); 758e5c31af7Sopenharmony_ci deMemset(&videoDecodeCapabilities[ndx], filling, sizeof(videoDecodeCapabilities[ndx])); 759e5c31af7Sopenharmony_ci deMemset(&videoDecodeH265Capabilities[ndx], filling, sizeof(videoDecodeH265Capabilities[ndx])); 760e5c31af7Sopenharmony_ci 761e5c31af7Sopenharmony_ci videoCapabilites[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR; 762e5c31af7Sopenharmony_ci videoCapabilites[ndx].pNext = &videoDecodeCapabilities[ndx]; 763e5c31af7Sopenharmony_ci videoDecodeCapabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_KHR; 764e5c31af7Sopenharmony_ci videoDecodeCapabilities[ndx].pNext = &videoDecodeH265Capabilities[ndx]; 765e5c31af7Sopenharmony_ci videoDecodeH265Capabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_KHR; 766e5c31af7Sopenharmony_ci videoDecodeH265Capabilities[ndx].pNext = DE_NULL; 767e5c31af7Sopenharmony_ci 768e5c31af7Sopenharmony_ci VkResult result = vk.getPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &videoProfile, &videoCapabilites[ndx]); 769e5c31af7Sopenharmony_ci 770e5c31af7Sopenharmony_ci if (result != VK_SUCCESS) 771e5c31af7Sopenharmony_ci { 772e5c31af7Sopenharmony_ci ostringstream failMsg; 773e5c31af7Sopenharmony_ci 774e5c31af7Sopenharmony_ci failMsg << "Failed query call to vkGetPhysicalDeviceVideoCapabilitiesKHR with " << result << " at iteration " << ndx; 775e5c31af7Sopenharmony_ci 776e5c31af7Sopenharmony_ci return tcu::TestStatus::fail(failMsg.str()); 777e5c31af7Sopenharmony_ci } 778e5c31af7Sopenharmony_ci } 779e5c31af7Sopenharmony_ci 780e5c31af7Sopenharmony_ci validateVideoCapabilities(videoCapabilites[0], videoCapabilites[1]); 781e5c31af7Sopenharmony_ci validateExtensionProperties(videoCapabilites[0].stdHeaderVersion, *getVideoExtensionProperties(videoCodecOperation)); 782e5c31af7Sopenharmony_ci validateVideoDecodeCapabilities(videoDecodeCapabilities[0], videoDecodeCapabilities[1]); 783e5c31af7Sopenharmony_ci validateVideoCapabilitiesExt(videoDecodeH265Capabilities[0], videoDecodeH265Capabilities[1]); 784e5c31af7Sopenharmony_ci 785e5c31af7Sopenharmony_ci return tcu::TestStatus::pass("Pass"); 786e5c31af7Sopenharmony_ci} 787e5c31af7Sopenharmony_ci 788e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryH265DecodeTestInstance::validateVideoCapabilitiesExt (const VkVideoDecodeH265CapabilitiesKHR& videoCapabilitiesKHR, 789e5c31af7Sopenharmony_ci const VkVideoDecodeH265CapabilitiesKHR& videoCapabilitiesKHRSecond) 790e5c31af7Sopenharmony_ci{ 791e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, sType); 792e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxLevelIdc); 793e5c31af7Sopenharmony_ci} 794e5c31af7Sopenharmony_ci 795e5c31af7Sopenharmony_ciclass VideoCapabilitiesQueryH265EncodeTestInstance : public VideoCapabilitiesQueryTestInstance 796e5c31af7Sopenharmony_ci{ 797e5c31af7Sopenharmony_cipublic: 798e5c31af7Sopenharmony_ci VideoCapabilitiesQueryH265EncodeTestInstance (Context& context, const CaseDef& data); 799e5c31af7Sopenharmony_ci virtual ~VideoCapabilitiesQueryH265EncodeTestInstance (void); 800e5c31af7Sopenharmony_ci tcu::TestStatus iterate (void); 801e5c31af7Sopenharmony_ci 802e5c31af7Sopenharmony_ciprotected: 803e5c31af7Sopenharmony_ci void validateVideoCapabilitiesExt (const VkVideoEncodeH265CapabilitiesEXT& videoCapabilitiesKHR, 804e5c31af7Sopenharmony_ci const VkVideoEncodeH265CapabilitiesEXT& videoCapabilitiesKHRSecond); 805e5c31af7Sopenharmony_ci}; 806e5c31af7Sopenharmony_ci 807e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH265EncodeTestInstance::VideoCapabilitiesQueryH265EncodeTestInstance (Context& context, const CaseDef& data) 808e5c31af7Sopenharmony_ci : VideoCapabilitiesQueryTestInstance(context, data) 809e5c31af7Sopenharmony_ci{ 810e5c31af7Sopenharmony_ci} 811e5c31af7Sopenharmony_ci 812e5c31af7Sopenharmony_ciVideoCapabilitiesQueryH265EncodeTestInstance::~VideoCapabilitiesQueryH265EncodeTestInstance (void) 813e5c31af7Sopenharmony_ci{ 814e5c31af7Sopenharmony_ci} 815e5c31af7Sopenharmony_ci 816e5c31af7Sopenharmony_citcu::TestStatus VideoCapabilitiesQueryH265EncodeTestInstance::iterate (void) 817e5c31af7Sopenharmony_ci{ 818e5c31af7Sopenharmony_ci const InstanceInterface& vk = m_context.getInstanceInterface(); 819e5c31af7Sopenharmony_ci const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); 820e5c31af7Sopenharmony_ci const VkVideoCodecOperationFlagBitsKHR videoCodecOperation = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT; 821e5c31af7Sopenharmony_ci const VkVideoEncodeH265ProfileInfoEXT videoProfileOperation = 822e5c31af7Sopenharmony_ci { 823e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_INFO_EXT, // VkStructureType sType; 824e5c31af7Sopenharmony_ci DE_NULL, // const void* pNext; 825e5c31af7Sopenharmony_ci STD_VIDEO_H265_PROFILE_IDC_MAIN, // StdVideoH265ProfileIdc stdProfileIdc; 826e5c31af7Sopenharmony_ci }; 827e5c31af7Sopenharmony_ci const VkVideoProfileInfoKHR videoProfile = 828e5c31af7Sopenharmony_ci { 829e5c31af7Sopenharmony_ci VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR, // VkStructureType sType; 830e5c31af7Sopenharmony_ci (void*)&videoProfileOperation, // void* pNext; 831e5c31af7Sopenharmony_ci videoCodecOperation, // VkVideoCodecOperationFlagBitsKHR videoCodecOperation; 832e5c31af7Sopenharmony_ci VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR, // VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; 833e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR lumaBitDepth; 834e5c31af7Sopenharmony_ci VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR, // VkVideoComponentBitDepthFlagsKHR chromaBitDepth; 835e5c31af7Sopenharmony_ci }; 836e5c31af7Sopenharmony_ci VkVideoEncodeH265CapabilitiesEXT videoEncodeH265Capabilities[2]; 837e5c31af7Sopenharmony_ci VkVideoEncodeCapabilitiesKHR videoEncodeCapabilities[2]; 838e5c31af7Sopenharmony_ci VkVideoCapabilitiesKHR videoCapabilites[2]; 839e5c31af7Sopenharmony_ci 840e5c31af7Sopenharmony_ci for (size_t ndx = 0; ndx < DE_LENGTH_OF_ARRAY(videoCapabilites); ++ndx) 841e5c31af7Sopenharmony_ci { 842e5c31af7Sopenharmony_ci const deUint8 filling = (ndx == 0) ? 0x00 : 0xFF; 843e5c31af7Sopenharmony_ci 844e5c31af7Sopenharmony_ci deMemset(&videoCapabilites[ndx], filling, sizeof(videoCapabilites[ndx])); 845e5c31af7Sopenharmony_ci deMemset(&videoEncodeCapabilities[ndx], filling, sizeof(videoEncodeCapabilities[ndx])); 846e5c31af7Sopenharmony_ci deMemset(&videoEncodeH265Capabilities[ndx], filling, sizeof(videoEncodeH265Capabilities[ndx])); 847e5c31af7Sopenharmony_ci 848e5c31af7Sopenharmony_ci videoCapabilites[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR; 849e5c31af7Sopenharmony_ci videoCapabilites[ndx].pNext = &videoEncodeCapabilities[ndx]; 850e5c31af7Sopenharmony_ci videoEncodeCapabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_KHR; 851e5c31af7Sopenharmony_ci videoEncodeCapabilities[ndx].pNext = &videoEncodeH265Capabilities[ndx]; 852e5c31af7Sopenharmony_ci videoEncodeH265Capabilities[ndx].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT; 853e5c31af7Sopenharmony_ci videoEncodeH265Capabilities[ndx].pNext = DE_NULL; 854e5c31af7Sopenharmony_ci 855e5c31af7Sopenharmony_ci VkResult result = vk.getPhysicalDeviceVideoCapabilitiesKHR(physicalDevice, &videoProfile, &videoCapabilites[ndx]); 856e5c31af7Sopenharmony_ci 857e5c31af7Sopenharmony_ci if (result != VK_SUCCESS) 858e5c31af7Sopenharmony_ci { 859e5c31af7Sopenharmony_ci ostringstream failMsg; 860e5c31af7Sopenharmony_ci 861e5c31af7Sopenharmony_ci failMsg << "Failed query call to vkGetPhysicalDeviceVideoCapabilitiesKHR with " << result << " at iteration " << ndx; 862e5c31af7Sopenharmony_ci 863e5c31af7Sopenharmony_ci return tcu::TestStatus::fail(failMsg.str()); 864e5c31af7Sopenharmony_ci } 865e5c31af7Sopenharmony_ci } 866e5c31af7Sopenharmony_ci 867e5c31af7Sopenharmony_ci validateVideoCapabilities(videoCapabilites[0], videoCapabilites[1]); 868e5c31af7Sopenharmony_ci validateVideoEncodeCapabilities(videoEncodeCapabilities[0], videoEncodeCapabilities[1]); 869e5c31af7Sopenharmony_ci validateExtensionProperties(videoCapabilites[0].stdHeaderVersion, *getVideoExtensionProperties(videoCodecOperation)); 870e5c31af7Sopenharmony_ci validateVideoCapabilitiesExt(videoEncodeH265Capabilities[0], videoEncodeH265Capabilities[1]); 871e5c31af7Sopenharmony_ci 872e5c31af7Sopenharmony_ci return tcu::TestStatus::pass("Pass"); 873e5c31af7Sopenharmony_ci} 874e5c31af7Sopenharmony_ci 875e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryH265EncodeTestInstance::validateVideoCapabilitiesExt (const VkVideoEncodeH265CapabilitiesEXT& videoCapabilitiesKHR, 876e5c31af7Sopenharmony_ci const VkVideoEncodeH265CapabilitiesEXT& videoCapabilitiesKHRSecond) 877e5c31af7Sopenharmony_ci{ 878e5c31af7Sopenharmony_ci const VkVideoEncodeH265CtbSizeFlagsEXT ctbSizeFlags = VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT 879e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT 880e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT; 881e5c31af7Sopenharmony_ci const VkVideoEncodeH265TransformBlockSizeFlagsEXT transformBlockSizes = VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_4_BIT_EXT 882e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_8_BIT_EXT 883e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_16_BIT_EXT 884e5c31af7Sopenharmony_ci | VK_VIDEO_ENCODE_H265_TRANSFORM_BLOCK_SIZE_32_BIT_EXT; 885e5c31af7Sopenharmony_ci 886e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, sType); 887e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, flags); 888e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxLevelIdc); 889e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxSliceSegmentCount); 890e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxTiles); 891e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxPPictureL0ReferenceCount); 892e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxBPictureL0ReferenceCount); 893e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxL1ReferenceCount); 894e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxSubLayerCount); 895e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, expectDyadicTemporalSubLayerPattern); 896e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, minQp); 897e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, maxQp); 898e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, prefersGopRemainingFrames); 899e5c31af7Sopenharmony_ci VALIDATE_FIELD_EQUAL(videoCapabilitiesKHR, videoCapabilitiesKHRSecond, requiresGopRemainingFrames); 900e5c31af7Sopenharmony_ci 901e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.flags != 0) 902e5c31af7Sopenharmony_ci TCU_FAIL("videoCapabilitiesKHR.flags must be 0"); 903e5c31af7Sopenharmony_ci 904e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.ctbSizes == 0) 905e5c31af7Sopenharmony_ci TCU_FAIL("Invalid videoCapabilitiesKHR.ctbSizes"); 906e5c31af7Sopenharmony_ci 907e5c31af7Sopenharmony_ci if ((videoCapabilitiesKHR.ctbSizes & ~ctbSizeFlags) != 0) 908e5c31af7Sopenharmony_ci TCU_FAIL("Undefined videoCapabilitiesKHR.ctbSizeFlags"); 909e5c31af7Sopenharmony_ci 910e5c31af7Sopenharmony_ci if (videoCapabilitiesKHR.transformBlockSizes == 0) 911e5c31af7Sopenharmony_ci TCU_FAIL("Invalid videoCapabilitiesKHR.transformBlockSizes"); 912e5c31af7Sopenharmony_ci 913e5c31af7Sopenharmony_ci if ((videoCapabilitiesKHR.transformBlockSizes & ~transformBlockSizes) != 0) 914e5c31af7Sopenharmony_ci TCU_FAIL("Undefined videoCapabilitiesKHR.transformBlockSizes"); 915e5c31af7Sopenharmony_ci} 916e5c31af7Sopenharmony_ci 917e5c31af7Sopenharmony_ci 918e5c31af7Sopenharmony_ciclass VideoCapabilitiesQueryTestCase : public TestCase 919e5c31af7Sopenharmony_ci{ 920e5c31af7Sopenharmony_ci public: 921e5c31af7Sopenharmony_ci VideoCapabilitiesQueryTestCase (tcu::TestContext& context, const char* name, const CaseDef caseDef); 922e5c31af7Sopenharmony_ci ~VideoCapabilitiesQueryTestCase (void); 923e5c31af7Sopenharmony_ci 924e5c31af7Sopenharmony_ci virtual TestInstance* createInstance (Context& context) const; 925e5c31af7Sopenharmony_ci virtual void checkSupport (Context& context) const; 926e5c31af7Sopenharmony_ci 927e5c31af7Sopenharmony_ciprivate: 928e5c31af7Sopenharmony_ci CaseDef m_caseDef; 929e5c31af7Sopenharmony_ci}; 930e5c31af7Sopenharmony_ci 931e5c31af7Sopenharmony_ciVideoCapabilitiesQueryTestCase::VideoCapabilitiesQueryTestCase (tcu::TestContext& context, const char* name, const CaseDef caseDef) 932e5c31af7Sopenharmony_ci : vkt::TestCase (context, name) 933e5c31af7Sopenharmony_ci , m_caseDef (caseDef) 934e5c31af7Sopenharmony_ci{ 935e5c31af7Sopenharmony_ci} 936e5c31af7Sopenharmony_ci 937e5c31af7Sopenharmony_ciVideoCapabilitiesQueryTestCase::~VideoCapabilitiesQueryTestCase (void) 938e5c31af7Sopenharmony_ci{ 939e5c31af7Sopenharmony_ci} 940e5c31af7Sopenharmony_ci 941e5c31af7Sopenharmony_civoid VideoCapabilitiesQueryTestCase::checkSupport (Context& context) const 942e5c31af7Sopenharmony_ci{ 943e5c31af7Sopenharmony_ci context.requireDeviceFunctionality("VK_KHR_video_queue"); 944e5c31af7Sopenharmony_ci 945e5c31af7Sopenharmony_ci switch (m_caseDef.testType) 946e5c31af7Sopenharmony_ci { 947e5c31af7Sopenharmony_ci case TEST_TYPE_QUEUE_SUPPORT_QUERY: break; 948e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: 949e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: context.requireDeviceFunctionality("VK_KHR_video_decode_h264"); break; 950e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: 951e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: context.requireDeviceFunctionality("VK_EXT_video_encode_h264"); break; 952e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: 953e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: context.requireDeviceFunctionality("VK_KHR_video_decode_h265"); break; 954e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: 955e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: context.requireDeviceFunctionality("VK_EXT_video_encode_h265"); break; 956e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_CAPABILITIES_QUERY: context.requireDeviceFunctionality("VK_KHR_video_decode_h264"); break; 957e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_CAPABILITIES_QUERY: context.requireDeviceFunctionality("VK_EXT_video_encode_h264"); break; 958e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_CAPABILITIES_QUERY: context.requireDeviceFunctionality("VK_KHR_video_decode_h265"); break; 959e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_CAPABILITIES_QUERY: context.requireDeviceFunctionality("VK_EXT_video_encode_h265"); break; 960e5c31af7Sopenharmony_ci default: TCU_THROW(NotSupportedError, "Unknown TestType"); 961e5c31af7Sopenharmony_ci } 962e5c31af7Sopenharmony_ci} 963e5c31af7Sopenharmony_ci 964e5c31af7Sopenharmony_ciTestInstance* VideoCapabilitiesQueryTestCase::createInstance (Context& context) const 965e5c31af7Sopenharmony_ci{ 966e5c31af7Sopenharmony_ci switch (m_caseDef.testType) 967e5c31af7Sopenharmony_ci { 968e5c31af7Sopenharmony_ci case TEST_TYPE_QUEUE_SUPPORT_QUERY: return new VideoQueueQueryTestInstance(context, m_caseDef); 969e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH264DecodeTestInstance(context, m_caseDef); 970e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH264DecodeTestInstance(context, m_caseDef); 971e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH264EncodeTestInstance(context, m_caseDef); 972e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH264EncodeTestInstance(context, m_caseDef); 973e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH265DecodeTestInstance(context, m_caseDef); 974e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH265DecodeTestInstance(context, m_caseDef); 975e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH265EncodeTestInstance(context, m_caseDef); 976e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return new VideoFormatPropertiesQueryH265EncodeTestInstance(context, m_caseDef); 977e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_CAPABILITIES_QUERY: return new VideoCapabilitiesQueryH264DecodeTestInstance(context, m_caseDef); 978e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_CAPABILITIES_QUERY: return new VideoCapabilitiesQueryH264EncodeTestInstance(context, m_caseDef); 979e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_CAPABILITIES_QUERY: return new VideoCapabilitiesQueryH265DecodeTestInstance(context, m_caseDef); 980e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_CAPABILITIES_QUERY: return new VideoCapabilitiesQueryH265EncodeTestInstance(context, m_caseDef); 981e5c31af7Sopenharmony_ci default: TCU_THROW(NotSupportedError, "Unknown TestType"); 982e5c31af7Sopenharmony_ci } 983e5c31af7Sopenharmony_ci} 984e5c31af7Sopenharmony_ci 985e5c31af7Sopenharmony_ciconst char* getTestName (const TestType testType) 986e5c31af7Sopenharmony_ci{ 987e5c31af7Sopenharmony_ci switch (testType) 988e5c31af7Sopenharmony_ci { 989e5c31af7Sopenharmony_ci case TEST_TYPE_QUEUE_SUPPORT_QUERY: return "queue_support_query"; 990e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: return "h264_decode_dst_video_format_support_query"; 991e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return "h264_decode_dpb_video_format_support_query"; 992e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: return "h264_encode_src_video_format_support_query"; 993e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return "h264_encode_dpb_video_format_support_query"; 994e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DST_VIDEO_FORMAT_SUPPORT_QUERY: return "h265_decode_dst_video_format_support_query"; 995e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return "h265_decode_spb_video_format_support_query"; 996e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_SRC_VIDEO_FORMAT_SUPPORT_QUERY: return "h265_encode_src_video_format_support_query"; 997e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_DPB_VIDEO_FORMAT_SUPPORT_QUERY: return "h265_encode_dpb_video_format_support_query"; 998e5c31af7Sopenharmony_ci case TEST_TYPE_H264_DECODE_CAPABILITIES_QUERY: return "h264_decode_capabilities_query"; 999e5c31af7Sopenharmony_ci case TEST_TYPE_H264_ENCODE_CAPABILITIES_QUERY: return "h264_encode_capabilities_query"; 1000e5c31af7Sopenharmony_ci case TEST_TYPE_H265_DECODE_CAPABILITIES_QUERY: return "h265_decode_capabilities_query"; 1001e5c31af7Sopenharmony_ci case TEST_TYPE_H265_ENCODE_CAPABILITIES_QUERY: return "h265_encode_capabilities_query"; 1002e5c31af7Sopenharmony_ci default: TCU_THROW(NotSupportedError, "Unknown TestType"); 1003e5c31af7Sopenharmony_ci } 1004e5c31af7Sopenharmony_ci} 1005e5c31af7Sopenharmony_ci} // anonymous 1006e5c31af7Sopenharmony_ci 1007e5c31af7Sopenharmony_citcu::TestCaseGroup* createVideoCapabilitiesTests (tcu::TestContext& testCtx) 1008e5c31af7Sopenharmony_ci{ 1009e5c31af7Sopenharmony_ci // Video encoding and decoding capability query tests 1010e5c31af7Sopenharmony_ci de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "capabilities")); 1011e5c31af7Sopenharmony_ci 1012e5c31af7Sopenharmony_ci for (int testTypeNdx = 0; testTypeNdx < TEST_TYPE_LAST; ++testTypeNdx) 1013e5c31af7Sopenharmony_ci { 1014e5c31af7Sopenharmony_ci const TestType testType = static_cast<TestType>(testTypeNdx); 1015e5c31af7Sopenharmony_ci const CaseDef caseDef = 1016e5c31af7Sopenharmony_ci { 1017e5c31af7Sopenharmony_ci testType, // TestType testType; 1018e5c31af7Sopenharmony_ci }; 1019e5c31af7Sopenharmony_ci 1020e5c31af7Sopenharmony_ci group->addChild(new VideoCapabilitiesQueryTestCase(testCtx, getTestName(testType), caseDef)); 1021e5c31af7Sopenharmony_ci } 1022e5c31af7Sopenharmony_ci 1023e5c31af7Sopenharmony_ci return group.release(); 1024e5c31af7Sopenharmony_ci} 1025e5c31af7Sopenharmony_ci} // video 1026e5c31af7Sopenharmony_ci} // vkt 1027