Require protectedMemory feature for non-zero queue create flags
authorSlawomir Cygan <slawomir.cygan@intel.com>
Fri, 9 Mar 2018 17:53:43 +0000 (18:53 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Wed, 11 Apr 2018 15:42:45 +0000 (11:42 -0400)
Protected memory feature is required for using
VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT.

Components: Vulkan

VK-GL-CTS Issue: 1068

Affects:
dEQP-VK.api.device_init.create_device_queue2_unmatched_flags

Change-Id: I0a83fd3aaf2ab20836ab706adc9a62534ac56864

external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp

index 64ccbe9..8294b70 100644 (file)
@@ -946,11 +946,29 @@ tcu::TestStatus createDeviceQueue2UnmatchedFlagsTest (Context& context)
        const VkInstance                                instance                                = context.getInstance();
        const InstanceDriver                    instanceDriver                  (platformInterface, instance);
        const VkPhysicalDevice                  physicalDevice                  = context.getPhysicalDevice();
-       const deUint32                                  queueFamilyIndex                = context.getUniversalQueueFamilyIndex();
-       const deUint32                                  queueCount                              = 1;
-       const deUint32                                  queueIndex                              = 0;
-       const float                                             queuePriority                   = 1.0f;
-       const VkDeviceQueueCreateInfo   deviceQueueCreateInfo   =
+
+       // Check if VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT flag can be used.
+       {
+               VkPhysicalDeviceProtectedMemoryFeatures         protectedFeatures;
+               protectedFeatures.sType         = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
+               protectedFeatures.pNext         = DE_NULL;
+
+               VkPhysicalDeviceFeatures2                                       deviceFeatures;
+               deviceFeatures.sType            = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+               deviceFeatures.pNext            = &protectedFeatures;
+
+               instanceDriver.getPhysicalDeviceFeatures2(physicalDevice, &deviceFeatures);
+               if (!protectedFeatures.protectedMemory)
+               {
+                       TCU_THROW(NotSupportedError, "protectedMemory feature is not supported, no queue creation flags available");
+               }
+       }
+
+       const deUint32                                                  queueFamilyIndex                = context.getUniversalQueueFamilyIndex();
+       const deUint32                                                  queueCount                              = 1;
+       const deUint32                                                  queueIndex                              = 0;
+       const float                                                             queuePriority                   = 1.0f;
+       const VkDeviceQueueCreateInfo                   deviceQueueCreateInfo   =
        {
                VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,     // VkStructureType                                      sType;
                DE_NULL,                                                                        // const void*                                          pNext;
@@ -959,10 +977,27 @@ tcu::TestStatus createDeviceQueue2UnmatchedFlagsTest (Context& context)
                queueCount,                                                                     // deUint32                                                     queueCount;
                &queuePriority,                                                         // const float*                                         pQueuePriorities;
        };
-       const VkDeviceCreateInfo                deviceCreateInfo                =
+       VkPhysicalDeviceProtectedMemoryFeatures protectedFeatures               =
+       {
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,    // VkStructureType                              sType;
+               DE_NULL,                                                                                                                // void*                                                pNext;
+               VK_TRUE                                                                                                                 // VkBool32                                             protectedMemory;
+       };
+
+       VkPhysicalDeviceFeatures                                emptyDeviceFeatures;
+       deMemset(&emptyDeviceFeatures, 0, sizeof(emptyDeviceFeatures));
+
+       const VkPhysicalDeviceFeatures2                 deviceFeatures                  =
+       {
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,                                   // VkStructureType                              sType;
+               &protectedFeatures,                                                                                             // void*                                                pNext;
+               emptyDeviceFeatures                                                                                             // VkPhysicalDeviceFeatures             features;
+       };
+
+       const VkDeviceCreateInfo                                deviceCreateInfo                =
        {
                VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,           // VkStructureType                                      sType;
-               DE_NULL,                                                                        // const void*                                          pNext;
+               &deviceFeatures,                                                        // const void*                                          pNext;
                (VkDeviceCreateFlags)0u,                                        // VkDeviceCreateFlags                          flags;
                1,                                                                                      // deUint32                                                     queueCreateInfoCount;
                &deviceQueueCreateInfo,                                         // const VkDeviceQueueCreateInfo*       pQueueCreateInfos;
@@ -972,7 +1007,7 @@ tcu::TestStatus createDeviceQueue2UnmatchedFlagsTest (Context& context)
                DE_NULL,                                                                        // const char* const*                           ppEnabledExtensionNames;
                DE_NULL,                                                                        // const VkPhysicalDeviceFeatures*      pEnabledFeatures;
        };
-       const VkDeviceQueueInfo2                deviceQueueInfo2                =
+       const VkDeviceQueueInfo2                                deviceQueueInfo2                =
        {
                VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2,          // VkStructureType                                      sType;
                DE_NULL,                                                                        // const void*                                          pNext;