VK_KHR_maintenance1: Support vkCmdFillBuffer on transfer queue
authorArkadiusz Sarwa <arkadiusz.sarwa@mobica.com>
Mon, 28 Nov 2016 14:34:36 +0000 (15:34 +0100)
committerPyry Haulos <phaulos@google.com>
Thu, 15 Dec 2016 14:37:00 +0000 (10:37 -0400)
Modified tests:
- dEQP-VK.synchronization.op.multi_queue.*.write_fill_buffer*

Khronos issue: #532

Change-Id: I3900b11986e29d90eaa60296255b03601d41abe3

external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp

index 9b86dfb..49c72b0 100644 (file)
@@ -540,9 +540,10 @@ public:
 
        VkQueueFlags getQueueFlags (const OperationContext& context) const
        {
-               DE_UNREF(context);
-               if (BUFFER_OP_FILL == m_bufferOp)
+               if (std::find(context.getDeviceExtensions().begin(), context.getDeviceExtensions().end(), "VK_KHR_maintenance1") == context.getDeviceExtensions().end() ||
+                       BUFFER_OP_UPDATE != m_bufferOp)
                        return VK_QUEUE_COMPUTE_BIT | VK_QUEUE_GRAPHICS_BIT;
+
                return VK_QUEUE_TRANSFER_BIT;
        }
 
index 263dc72..0f14ef9 100644 (file)
@@ -120,21 +120,21 @@ public:
                        const std::vector<std::string>& deviceExtensions        = context.getDeviceExtensions();
                        std::vector<const char*>                charDevExtensions;
 
-                       for (std::size_t ndx = 0; ndx < deviceExtensions.size(); ++ndx)
+                       for (size_t ndx = 0; ndx < deviceExtensions.size(); ++ndx)
                                charDevExtensions.push_back(deviceExtensions[ndx].c_str());
 
                        const VkDeviceCreateInfo                deviceInfo              =
                        {
-                               VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,                                                   //VkStructureType                                       sType;
-                               DE_NULL,                                                                                                                //const void*                                           pNext;
-                               0u,                                                                                                                             //VkDeviceCreateFlags                           flags;
-                               static_cast<deUint32>(queueInfos.size()),                                               //deUint32                                                      queueCreateInfoCount;
-                               &queueInfos[0],                                                                                                 //const VkDeviceQueueCreateInfo*        pQueueCreateInfos;
-                               0u,                                                                                                                             //deUint32                                                      enabledLayerCount;
-                               DE_NULL,                                                                                                                //const char* const*                            ppEnabledLayerNames;
-                               static_cast<deUint32>(deviceExtensions.size()),                                 //deUint32                                                      enabledExtensionCount;
-                               charDevExtensions.empty() ? DE_NULL : &charDevExtensions[0],    //const char* const*                            ppEnabledExtensionNames;
-                               &context.getDeviceFeatures()                                                                    //const VkPhysicalDeviceFeatures*       pEnabledFeatures;
+                               VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,                   //VkStructureType                                       sType;
+                               DE_NULL,                                                                                //const void*                                           pNext;
+                               0u,                                                                                             //VkDeviceCreateFlags                           flags;
+                               static_cast<deUint32>(queueInfos.size()),               //deUint32                                                      queueCreateInfoCount;
+                               &queueInfos[0],                                                                 //const VkDeviceQueueCreateInfo*        pQueueCreateInfos;
+                               0u,                                                                                             //deUint32                                                      enabledLayerCount;
+                               DE_NULL,                                                                                //const char* const*                            ppEnabledLayerNames;
+                               static_cast<deUint32>(deviceExtensions.size()), //deUint32                                                      enabledExtensionCount;
+                               &charDevExtensions[0],                                                  //const char* const*                            ppEnabledExtensionNames;
+                               &context.getDeviceFeatures()                                    //const VkPhysicalDeviceFeatures*       pEnabledFeatures;
                        };
 
                        m_logicalDevice = createDevice(instance, physicalDevice, &deviceInfo);