| 20 | class NegativeAndroidHardwareBuffer : public VkLayerTest {}; |
| 21 | |
| 22 | TEST_F(NegativeAndroidHardwareBuffer, ImageCreate) { |
| 23 | TEST_DESCRIPTION("Verify AndroidHardwareBuffer image create info."); |
| 24 | |
| 25 | SetTargetApiVersion(VK_API_VERSION_1_1); |
| 26 | AddRequiredExtensions(VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME); |
| 27 | RETURN_IF_SKIP(Init()); |
| 28 | VkImage img = VK_NULL_HANDLE; |
| 29 | |
| 30 | VkImageCreateInfo ici = vku::InitStructHelper(); |
| 31 | ici.imageType = VK_IMAGE_TYPE_2D; |
| 32 | ici.arrayLayers = 1; |
| 33 | ici.extent = {64, 64, 1}; |
| 34 | ici.format = VK_FORMAT_UNDEFINED; |
| 35 | ici.mipLevels = 1; |
| 36 | ici.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; |
| 37 | ici.samples = VK_SAMPLE_COUNT_1_BIT; |
| 38 | ici.tiling = VK_IMAGE_TILING_OPTIMAL; |
| 39 | ici.usage = VK_IMAGE_USAGE_SAMPLED_BIT; |
| 40 | |
| 41 | // undefined format |
| 42 | m_errorMonitor->SetDesiredError("VUID-VkImageCreateInfo-pNext-01975"); |
| 43 | // Various extra errors for having VK_FORMAT_UNDEFINED without VkExternalFormatANDROID |
| 44 | m_errorMonitor->SetUnexpectedError("VUID_Undefined"); |
| 45 | m_errorMonitor->SetUnexpectedError("VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251"); |
| 46 | vk::CreateImage(device(), &ici, NULL, &img); |
| 47 | m_errorMonitor->VerifyFound(); |
| 48 | |
| 49 | // also undefined format |
| 50 | VkExternalFormatANDROID efa = vku::InitStructHelper(); |
| 51 | efa.externalFormat = 0; |
| 52 | ici.pNext = &efa; |
| 53 | m_errorMonitor->SetDesiredError("VUID-VkImageCreateInfo-pNext-01975"); |
| 54 | vk::CreateImage(device(), &ici, NULL, &img); |
| 55 | m_errorMonitor->VerifyFound(); |
| 56 | |
| 57 | // undefined format with an unknown external format |
| 58 | efa.externalFormat = 0xBADC0DE; |
| 59 | m_errorMonitor->SetDesiredError("VUID-VkExternalFormatANDROID-externalFormat-01894"); |
| 60 | vk::CreateImage(device(), &ici, NULL, &img); |
| 61 | m_errorMonitor->VerifyFound(); |
| 62 | |
| 63 | vkt::AHB ahb(AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM, AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE, 64, 64); |
| 64 | |
| 65 | // Retrieve it's properties to make it's external format 'known' (AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM) |
| 66 | VkAndroidHardwareBufferFormatPropertiesANDROID ahb_fmt_props = vku::InitStructHelper(); |
| 67 | VkAndroidHardwareBufferPropertiesANDROID ahb_props = vku::InitStructHelper(&ahb_fmt_props); |
| 68 | vk::GetAndroidHardwareBufferPropertiesANDROID(device(), ahb.handle(), &ahb_props); |
| 69 | |
| 70 | // a defined image format with a non-zero external format |
| 71 | ici.format = VK_FORMAT_R8G8B8A8_UNORM; |
| 72 | efa.externalFormat = ahb_fmt_props.externalFormat; |
| 73 | m_errorMonitor->SetDesiredError("VUID-VkImageCreateInfo-pNext-01974"); |
| 74 | vk::CreateImage(device(), &ici, NULL, &img); |
| 75 | m_errorMonitor->VerifyFound(); |
| 76 | ici.format = VK_FORMAT_UNDEFINED; |
| 77 | |
| 78 | // external format while MUTABLE |
| 79 | ici.flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; |
nothing calls this directly
no test coverage detected