return fenceGroup;
}
-bool ValidateAHardwareBuffer(vk::VkFormat format, deUint64 requiredAhbUsage, const vk::DeviceDriver& vkd, const vk::VkDevice& device, vk::VkImageCreateFlags createFlag)
+bool ValidateAHardwareBuffer(vk::VkFormat format, deUint64 requiredAhbUsage, const vk::DeviceDriver& vkd, const vk::VkDevice& device, vk::VkImageCreateFlags createFlag, deUint32 layerCount, bool& enableMaxLayerTest)
{
DE_UNREF(createFlag);
return false;
#endif
- vk::pt::AndroidHardwareBufferPtr ahb = ahbApi->allocate(64u, 64u, 1u, ahbApi->vkFormatToAhbFormat(format), requiredAhbUsage);
+ vk::pt::AndroidHardwareBufferPtr ahb = ahbApi->allocate(64u, 64u, layerCount, ahbApi->vkFormatToAhbFormat(format), requiredAhbUsage);
if (ahb.internal == DE_NULL)
- return false;
-
+ {
+ enableMaxLayerTest = false;
+ // try again with layerCount '1'
+ ahb = ahbApi->allocate(64u, 64u, 1u, ahbApi->vkFormatToAhbFormat(format), requiredAhbUsage);
+ if (ahb.internal == DE_NULL)
+ {
+ return false;
+ }
+ }
NativeHandle nativeHandle(ahb);
vk::VkAndroidHardwareBufferFormatPropertiesANDROID formatProperties =
{
const vk::Unique<vk::VkDevice> device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, externalMemoryType, 0u, queueFamilyIndex));
const vk::DeviceDriver vkd (vkp, *instance, *device);
TestLog& log = context.getTestContext().getLog();
+ const vk::VkPhysicalDeviceLimits limits = getPhysicalDeviceProperties(vki, physicalDevice).limits;
vk::VkPhysicalDeviceProtectedMemoryFeatures protectedFeatures;
protectedFeatures.sType = vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
vk::VkImageUsageFlags usage = 0;
vk::VkImageCreateFlags createFlag = 0;
deUint64 requiredAhbUsage = 0;
+ bool enableMaxLayerTest = true;
for (size_t usageNdx = 0; usageNdx < numOfUsageFlags; usageNdx++)
{
if ((combo & (1u << usageNdx)) == 0)
continue;
// Only test a combination if AHardwareBuffer can be successfully allocated for it.
- if (!ValidateAHardwareBuffer(format, requiredAhbUsage, vkd, *device, createFlag))
+ if (!ValidateAHardwareBuffer(format, requiredAhbUsage, vkd, *device, createFlag, limits.maxImageArrayLayers, enableMaxLayerTest))
continue;
bool foundAnyUsableTiling = false;
TCU_CHECK((anhUsage & requiredAhbUsage) == requiredAhbUsage);
}
- if (properties.imageFormatProperties.maxArrayLayers > 1u)
+ if ((properties.imageFormatProperties.maxArrayLayers > 1u) && enableMaxLayerTest)
{
deUint32 exportedMemoryTypeIndex = ~0U;
const vk::Unique<vk::VkImage> image (createExternalImage(vkd, *device, queueFamilyIndex, externalMemoryType, format, 64u, 64u, tiling, createFlag, usage, 1u, properties.imageFormatProperties.maxArrayLayers));