Add shader image atomic int64 extension if used when creating device
authorziga-lunarg <ziga@lunarg.com>
Sat, 15 Oct 2022 22:05:50 +0000 (00:05 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Thu, 10 Nov 2022 18:11:35 +0000 (18:11 +0000)
Add VK_EXT_shader_image_atomic_int64 extension and enabled the features
when creating the device in sparse resources tests if the extension
is used

Components: Vulkan

VK-GL-CTS issue: 4050

Affected tests:
dEQP-VK.sparse_resources.*

Change-Id: If3de1d1e30a57db076802e2933392081c7c3069c

external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.cpp
external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.hpp
external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesImageSparseResidency.cpp

index 9676539..f704e55 100644 (file)
@@ -61,7 +61,7 @@ deUint32 findMatchingQueueFamilyIndex (const std::vector<VkQueueFamilyProperties
 
 } // anonymous
 
-void SparseResourcesBaseInstance::createDeviceSupportingQueues(const QueueRequirementsVec& queueRequirements)
+void SparseResourcesBaseInstance::createDeviceSupportingQueues(const QueueRequirementsVec& queueRequirements, bool requireShaderImageAtomicInt64Features)
 {
        typedef std::map<VkQueueFlags, std::vector<Queue> >     QueuesMap;
        typedef std::map<deUint32, QueueFamilyQueuesCount>      SelectedQueuesMap;
@@ -174,19 +174,33 @@ void SparseResourcesBaseInstance::createDeviceSupportingQueues(const QueueRequir
                queueInfos.push_back(queueInfo);
        }
 
+       vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT shaderImageAtomicInt64Features = m_context.getShaderImageAtomicInt64FeaturesEXT();
+
        const VkPhysicalDeviceFeatures  deviceFeatures  = getPhysicalDeviceFeatures(instanceDriver, physicalDevice);
+       vk::VkPhysicalDeviceFeatures2   deviceFeatures2 = getPhysicalDeviceFeatures2(instanceDriver, physicalDevice);
+       deviceFeatures2.pNext                                                   = &shaderImageAtomicInt64Features;
+       void* pNext = DE_NULL;
+       if (requireShaderImageAtomicInt64Features) {
+               pNext = &deviceFeatures2;
+               if (m_useDeviceGroups) {
+                       shaderImageAtomicInt64Features.pNext = &deviceGroupInfo;
+               }
+               deviceExtensions.push_back("VK_EXT_shader_image_atomic_int64");
+       } else if (m_useDeviceGroups) {
+               pNext = &deviceGroupInfo;
+       }
        const VkDeviceCreateInfo                deviceInfo              =
        {
-               VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,                                           // VkStructureType                                      sType;
-               m_useDeviceGroups ? &deviceGroupInfo : DE_NULL,                         // const void*                                          pNext;
-               (VkDeviceCreateFlags)0,                                                                         // VkDeviceCreateFlags                          flags;
-               static_cast<deUint32>(queueInfos.size())        ,                               // uint32_t                                                     queueCreateInfoCount;
-               &queueInfos[0],                                                                                         // const VkDeviceQueueCreateInfo*       pQueueCreateInfos;
-               0u,                                                                                                                     // uint32_t                                                     enabledLayerCount;
-               DE_NULL,                                                                                                        // const char* const*                           ppEnabledLayerNames;
-               deUint32(deviceExtensions.size()),                                                      // uint32_t                                                     enabledExtensionCount;
-               deviceExtensions.size() ? &deviceExtensions[0] : DE_NULL,       // const char* const*                           ppEnabledExtensionNames;
-               &deviceFeatures,                                                                                        // const VkPhysicalDeviceFeatures*      pEnabledFeatures;
+               VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,                                                           // VkStructureType                                      sType;
+               pNext,                                                                                                                          // const void*                                          pNext;
+               (VkDeviceCreateFlags)0,                                                                                         // VkDeviceCreateFlags                          flags;
+               static_cast<deUint32>(queueInfos.size())        ,                                               // uint32_t                                                     queueCreateInfoCount;
+               &queueInfos[0],                                                                                                         // const VkDeviceQueueCreateInfo*       pQueueCreateInfos;
+               0u,                                                                                                                                     // uint32_t                                                     enabledLayerCount;
+               DE_NULL,                                                                                                                        // const char* const*                           ppEnabledLayerNames;
+               deUint32(deviceExtensions.size()),                                                                      // uint32_t                                                     enabledExtensionCount;
+               deviceExtensions.size() ? &deviceExtensions[0] : DE_NULL,                       // const char* const*                           ppEnabledExtensionNames;
+               requireShaderImageAtomicInt64Features ? DE_NULL : &deviceFeatures,      // const VkPhysicalDeviceFeatures*      pEnabledFeatures;
        };
 
        m_logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), instance, instanceDriver, physicalDevice, &deviceInfo);
index f14a37f..7b6db87 100644 (file)
@@ -75,7 +75,7 @@ protected:
 
        deUint32                                                                                        m_numPhysicalDevices;
 
-       void                                                                                            createDeviceSupportingQueues    (const QueueRequirementsVec& queueRequirements);
+       void                                                                                            createDeviceSupportingQueues    (const QueueRequirementsVec& queueRequirements, bool requireShaderImageAtomicInt64Features = false);
        const Queue&                                                                            getQueue                                                (const vk::VkQueueFlags queueFlags, const deUint32 queueIndex) const;
        const vk::DeviceInterface&                                                      getDeviceInterface                              (void) const            { return *m_deviceDriver; }
        vk::VkDevice                                                                            getDevice                                               (void) const            { return *m_logicalDevice; }
index b28891f..68e3fc7 100755 (executable)
@@ -322,7 +322,7 @@ tcu::TestStatus ImageSparseResidencyInstance::iterate (void)
                queueRequirements.push_back(QueueRequirements(VK_QUEUE_SPARSE_BINDING_BIT, 1u));
                queueRequirements.push_back(QueueRequirements(VK_QUEUE_COMPUTE_BIT, 1u));
 
-               createDeviceSupportingQueues(queueRequirements);
+               createDeviceSupportingQueues(queueRequirements, formatIsR64(m_format));
        }
 
        VkImageCreateInfo                       imageCreateInfo;