@@ -1423,4 +1423,122 @@ TEST_F(NegativeAndroidHardwareBuffer, NullAHBImport) {
14231423 m_errorMonitor->VerifyFound ();
14241424}
14251425
1426+ TEST_F (NegativeAndroidHardwareBuffer, DescriptorBufferDescriptorHeapYcbcr) {
1427+ SetTargetApiVersion (VK_API_VERSION_1_2 );
1428+ AddRequiredExtensions (VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME );
1429+ AddRequiredExtensions (VK_KHR_MAINTENANCE_6_EXTENSION_NAME );
1430+ AddRequiredExtensions (VK_KHR_MAINTENANCE_5_EXTENSION_NAME );
1431+ AddRequiredExtensions (VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME );
1432+ AddRequiredExtensions (VK_EXT_DESCRIPTOR_HEAP_EXTENSION_NAME );
1433+ AddRequiredExtensions (VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME );
1434+ AddRequiredFeature (vkt::Feature::samplerYcbcrConversion);
1435+ AddRequiredFeature (vkt::Feature::maintenance5);
1436+ AddRequiredFeature (vkt::Feature::descriptorBuffer);
1437+ AddRequiredFeature (vkt::Feature::descriptorHeap);
1438+ AddRequiredFeature (vkt::Feature::bufferDeviceAddress);
1439+ RETURN_IF_SKIP (Init ());
1440+
1441+ vkt::AHB ahb (AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420, AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE , 64 , 64 );
1442+ if (!ahb.handle ()) {
1443+ GTEST_SKIP () << " could not allocate AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420" ;
1444+ }
1445+
1446+ VkAndroidHardwareBufferFormatPropertiesANDROID ahb_fmt_props = vku::InitStructHelper ();
1447+ VkAndroidHardwareBufferPropertiesANDROID ahb_props = vku::InitStructHelper (&ahb_fmt_props);
1448+ vk::GetAndroidHardwareBufferPropertiesANDROID (device (), ahb.handle (), &ahb_props);
1449+ if (ahb_fmt_props.externalFormat == 0 ) {
1450+ GTEST_SKIP () << " externalFormat was zero which is not valid" ;
1451+ }
1452+
1453+ VkExternalFormatANDROID external_format = vku::InitStructHelper ();
1454+ external_format.externalFormat = ahb_fmt_props.externalFormat ;
1455+
1456+ VkExternalMemoryImageCreateInfo external_image_info = vku::InitStructHelper (&external_format);
1457+ external_image_info.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID ;
1458+
1459+ VkImageCreateInfo image_ci = vku::InitStructHelper (&external_image_info);
1460+ image_ci.imageType = VK_IMAGE_TYPE_2D ;
1461+ image_ci.format = VK_FORMAT_UNDEFINED ;
1462+ image_ci.extent = {64 , 64 , 1 };
1463+ image_ci.mipLevels = 1 ;
1464+ image_ci.arrayLayers = 1 ;
1465+ image_ci.samples = VK_SAMPLE_COUNT_1_BIT ;
1466+ image_ci.tiling = VK_IMAGE_TILING_OPTIMAL ;
1467+ image_ci.usage = VK_IMAGE_USAGE_SAMPLED_BIT ;
1468+ image_ci.sharingMode = VK_SHARING_MODE_EXCLUSIVE ;
1469+ image_ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED ;
1470+ vkt::Image image (*m_device, image_ci, vkt::no_mem);
1471+
1472+ VkMemoryDedicatedAllocateInfo dedicated_info = vku::InitStructHelper ();
1473+ dedicated_info.image = image;
1474+
1475+ VkImportAndroidHardwareBufferInfoANDROID import_info = vku::InitStructHelper (&dedicated_info);
1476+ import_info.buffer = ahb.handle ();
1477+
1478+ VkMemoryAllocateInfo memory_ci = vku::InitStructHelper (&import_info);
1479+ if (!SetAllocationInfoImportAHB (m_device, ahb_props, memory_ci)) {
1480+ GTEST_SKIP () << " No valid memory type index could be found" ;
1481+ }
1482+ vkt::DeviceMemory memory (*m_device, memory_ci);
1483+ vk::BindImageMemory (device (), image, memory, 0 );
1484+
1485+ VkSamplerYcbcrConversionCreateInfo conversion_ci = vku::InitStructHelper (&external_format);
1486+ conversion_ci.format = VK_FORMAT_UNDEFINED ;
1487+ conversion_ci.ycbcrModel = ahb_fmt_props.suggestedYcbcrModel ;
1488+ conversion_ci.ycbcrRange = ahb_fmt_props.suggestedYcbcrRange ;
1489+ conversion_ci.components = ahb_fmt_props.samplerYcbcrConversionComponents ;
1490+ conversion_ci.xChromaOffset = ahb_fmt_props.suggestedXChromaOffset ;
1491+ conversion_ci.yChromaOffset = ahb_fmt_props.suggestedYChromaOffset ;
1492+ conversion_ci.chromaFilter = VK_FILTER_NEAREST ;
1493+ conversion_ci.forceExplicitReconstruction = VK_FALSE ;
1494+ vkt::SamplerYcbcrConversion conversion (*m_device, conversion_ci);
1495+
1496+ VkSamplerYcbcrConversionInfo conversion_info = vku::InitStructHelper ();
1497+ conversion_info.conversion = conversion;
1498+
1499+ VkImageViewCreateInfo image_view_ci = vku::InitStructHelper (&conversion_info);
1500+ image_view_ci.image = image;
1501+ image_view_ci.viewType = VK_IMAGE_VIEW_TYPE_2D ;
1502+ image_view_ci.format = VK_FORMAT_UNDEFINED ;
1503+ image_view_ci.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT , 0 , 1 , 0 , 1 };
1504+ vkt::ImageView image_view (*m_device, image_view_ci);
1505+
1506+ VkSamplerCreateInfo sampler_ci = SafeSaneSamplerCreateInfo ();
1507+ sampler_ci.pNext = &conversion_info;
1508+ sampler_ci.magFilter = VK_FILTER_NEAREST ;
1509+ sampler_ci.minFilter = VK_FILTER_NEAREST ;
1510+ vkt::Sampler sampler (*m_device, sampler_ci);
1511+
1512+ uint8_t descriptor_data[256 ];
1513+
1514+ // VK_EXT_descriptor_buffer
1515+ {
1516+ VkDescriptorImageInfo image_info = {sampler, image_view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL };
1517+ VkDescriptorGetInfoEXT get_info = vku::InitStructHelper ();
1518+ get_info.type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER ;
1519+ get_info.data .pCombinedImageSampler = &image_info;
1520+
1521+ m_errorMonitor->SetDesiredError (" VUID-vkGetDescriptorEXT-pDescriptorInfo-12521" );
1522+ vk::GetDescriptorEXT (device (), &get_info, 256 , descriptor_data);
1523+ m_errorMonitor->VerifyFound ();
1524+ }
1525+
1526+ // VK_EXT_descriptor_heap
1527+ {
1528+ VkImageDescriptorInfoEXT image_info = vku::InitStructHelper ();
1529+ image_info.pView = &image_view_ci;
1530+ image_info.layout = VK_IMAGE_LAYOUT_GENERAL ;
1531+
1532+ VkResourceDescriptorInfoEXT resource_desc_info = vku::InitStructHelper ();
1533+ resource_desc_info.type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE ;
1534+ resource_desc_info.data .pImage = &image_info;
1535+
1536+ VkHostAddressRangeEXT descriptors = {descriptor_data, 256 };
1537+
1538+ m_errorMonitor->SetDesiredError (" VUID-vkWriteResourceDescriptorsEXT-pResources-12522" );
1539+ vk::WriteResourceDescriptorsEXT (device (), 1u , &resource_desc_info, &descriptors);
1540+ m_errorMonitor->VerifyFound ();
1541+ }
1542+ }
1543+
14261544#endif // VK_USE_PLATFORM_ANDROID_KHR
0 commit comments