Fix case when unsuported create flag was used for AHB
authorKacper Kleczewski <kacper.kleczewski@mobica.com>
Tue, 23 Oct 2018 12:50:51 +0000 (13:50 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 6 Nov 2018 15:24:49 +0000 (10:24 -0500)
Additional validation step is added to ValidateAHardwareBuffer function
which return false if API level is lower than 28 and
VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT create flag is requested.

Components: Vulkan

Affects: dEQP-VK.api.external.memory.android_hardware_buffer.image_formats

VK-GL-CTS Issue: 1439

Change-Id: Iadaa5c1d584bbf3d3335952c501799aff3c5b2d6

external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
external/vulkancts/modules/vulkan/vktExternalMemoryUtil.cpp
external/vulkancts/modules/vulkan/vktExternalMemoryUtil.hpp

index 26565e8..7e0d8a4 100755 (executable)
@@ -3822,14 +3822,22 @@ de::MovePtr<tcu::TestCaseGroup> createFenceTests (tcu::TestContext& testCtx, vk:
        return fenceGroup;
 }
 
-bool ValidateAHardwareBuffer(vk::VkFormat format, deUint64 requiredAhbUsage, const vk::DeviceDriver& vkd, const vk::VkDevice& device)
+bool ValidateAHardwareBuffer(vk::VkFormat format, deUint64 requiredAhbUsage, const vk::DeviceDriver& vkd, const vk::VkDevice& device, vk::VkImageCreateFlags createFlag)
 {
+       DE_UNREF(createFlag);
+
        AndroidHardwareBufferExternalApi* ahbApi = AndroidHardwareBufferExternalApi::getInstance();
        if (!ahbApi)
        {
                TCU_THROW(NotSupportedError, "Platform doesn't support Android Hardware Buffer handles");
        }
 
+#if (DE_OS == DE_OS_ANDROID)
+       // If CubeMap create flag is used and AHB doesn't support CubeMap return false.
+       if(!AndroidHardwareBufferExternalApi::supportsCubeMap() && (createFlag & vk::VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT))
+               return false;
+#endif
+
        vk::pt::AndroidHardwareBufferPtr ahb = ahbApi->allocate(64u, 64u, 1u, ahbApi->vkFormatToAhbFormat(format), requiredAhbUsage);
        if (ahb.internal == DE_NULL)
                return false;
@@ -3949,7 +3957,7 @@ tcu::TestStatus testAndroidHardwareBufferImageFormat  (Context& context, vk::VkF
                        continue;
 
                // Only test a combination if AHardwareBuffer can be successfully allocated for it.
-               if (!ValidateAHardwareBuffer(format, requiredAhbUsage, vkd, *device))
+               if (!ValidateAHardwareBuffer(format, requiredAhbUsage, vkd, *device, createFlag))
                        continue;
 
                bool foundAnyUsableTiling = false;
index 85f085f..4ced4a1 100644 (file)
@@ -1201,6 +1201,11 @@ bool AndroidHardwareBufferExternalApi::supportsAhb()
        return (checkAnbApiBuild() >= __ANDROID_API_O__);
 }
 
+bool AndroidHardwareBufferExternalApi::supportsCubeMap()
+{
+       return (checkAnbApiBuild() >= 28);
+}
+
 AndroidHardwareBufferExternalApi::AndroidHardwareBufferExternalApi()
 {
        deInt32 sdkVersion = checkAnbApiBuild();
index f448326..6b494b1 100644 (file)
@@ -84,6 +84,9 @@ public:
        /* Is AndroidHardwareBuffer supported? */
        static bool supportsAhb();
 
+       /* Are Cube maps supported on current api level? */
+       static bool supportsCubeMap();
+
        /**
         * Allocates a buffer that backs an AHardwareBuffer using the passed parameter as follows:
         * width;      - width in pixels