Update support checks for descriptorIndexing/drawIndirectCount
authorAlexander Galazin <alexander.galazin@arm.com>
Wed, 4 Sep 2019 07:46:37 +0000 (09:46 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 5 Sep 2019 15:29:03 +0000 (11:29 -0400)
Use core feature struct for checks in Vulkan 1.2 context and
extension feature struct for previous API versions.

Affects:
dEQP-VK.descriptor_indexing.*
dEQP-VK.binding_model.descriptorset_random*
dEQP-VK.draw.indirect_draw.*

Components: Vulkan

Change-Id: I07ca69a5d0e7c38523c2f06e8769fa38228e0b38

external/vulkancts/framework/vulkan/vkSupportedExtensions.inl
external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorSetRandomTests.cpp
external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
external/vulkancts/modules/vulkan/draw/vktDrawIndirectTest.cpp
external/vulkancts/modules/vulkan/vktTestCase.cpp
external/vulkancts/modules/vulkan/vktTestCase.hpp
external/vulkancts/scripts/src/extensions_data.txt

index e775152..0b50966 100644 (file)
@@ -25,6 +25,7 @@ void getCoreDeviceExtensionsImpl (deUint32 coreVersion, ::std::vector<const char
                dst.push_back("VK_KHR_uniform_buffer_standard_layout");
                dst.push_back("VK_KHR_buffer_device_address");
                dst.push_back("VK_EXT_sampler_filter_minmax");
+               dst.push_back("VK_EXT_descriptor_indexing");
                dst.push_back("VK_EXT_shader_viewport_index_layer");
                dst.push_back("VK_EXT_scalar_block_layout");
                dst.push_back("VK_EXT_separate_stencil_usage");
index 2c0cab9..c5f0080 100644 (file)
@@ -208,11 +208,7 @@ void DescriptorSetRandomTestCase::checkSupport(Context& context) const
        deMemset(&features, 0, sizeof(features));
        features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
 
-       bool vulkan12DescriptorIndexing = false;
-       if (context.contextSupports(vk::ApiVersion(1 ,2, 0)))
-               vulkan12DescriptorIndexing = context.getVulkan12Features().descriptorIndexing;
-
-       bool descriptorIndexing  = isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_EXT_descriptor_indexing") || vulkan12DescriptorIndexing;
+       const bool descriptorIndexing = context.isDescriptorIndexingSupported();
 
        if (descriptorIndexing &&
                isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_EXT_inline_uniform_block"))
@@ -838,11 +834,7 @@ tcu::TestStatus DescriptorSetRandomTestInstance::iterate (void)
        deMemset(&features, 0, sizeof(features));
        features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
 
-       bool vulkan12DescriptorIndexing = false;
-       if (m_context.contextSupports(vk::ApiVersion(1 ,2, 0)))
-               vulkan12DescriptorIndexing = m_context.getVulkan12Features().descriptorIndexing;
-
-       bool descriptorIndexing  = isDeviceExtensionSupported(m_context.getUsedApiVersion(), m_context.getDeviceExtensions(), "VK_EXT_descriptor_indexing") || vulkan12DescriptorIndexing;
+       const bool descriptorIndexing = m_context.isDescriptorIndexingSupported();
 
        if (descriptorIndexing &&
                isDeviceExtensionSupported(m_context.getUsedApiVersion(), m_context.getDeviceExtensions(), "VK_EXT_inline_uniform_block"))
index b6bf720..cc6706f 100644 (file)
@@ -2914,13 +2914,7 @@ public:
 
        virtual void checkSupport (vkt::Context& context) const
        {
-               bool vulkan12DescriptorIndexing = false;
-               if (context.contextSupports(vk::ApiVersion(1 ,2, 0)))
-                       vulkan12DescriptorIndexing = context.getVulkan12Features().descriptorIndexing;
-
-               bool descriptorIndexing  = isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_EXT_descriptor_indexing") || vulkan12DescriptorIndexing;
-
-               if (!descriptorIndexing)
+               if (!context.isDescriptorIndexingSupported())
                        TCU_THROW(NotSupportedError, "Descriptor indexing is not supported");
 
                const vk::VkPhysicalDeviceDescriptorIndexingFeaturesEXT& feats = context.getDescriptorIndexingFeatures();
index 7ad997b..ae8b3fa 100644 (file)
@@ -919,7 +919,10 @@ tcu::TestStatus IndirectDrawInstanced<FirstInstanceSupport>::iterate (void)
 
 void checkIndirectCountExt (Context& context)
 {
-       context.requireDeviceExtension("VK_KHR_draw_indirect_count");
+       if (context.contextSupports(vk::ApiVersion(1, 2, 0)) && !context.getVulkan12Features().drawIndirectCount)
+               TCU_THROW(NotSupportedError, "drawIndirectCount is not supported");
+       else
+               context.requireDeviceExtension("VK_KHR_draw_indirect_count");
 }
 
 }      // anonymous
index 3a5a2b7..eef165f 100644 (file)
@@ -594,6 +594,13 @@ bool Context::isBufferDeviceAddressWithCaptureReplaySupported(void) const
        return (isBufferDeviceAddressKHRSupported() && getBufferDeviceAddressFeatures().bufferDeviceAddressCaptureReplay) || (isBufferDeviceAddressEXTSupported() && getBufferDeviceAddressFeaturesEXT().bufferDeviceAddressCaptureReplay);
 }
 
+bool Context::isDescriptorIndexingSupported(void) const
+{
+       if (contextSupports(vk::ApiVersion(1, 2, 0)))
+               return getVulkan12Features().descriptorIndexing;
+       else
+               return isDeviceExtensionSupported(getUsedApiVersion(), getDeviceExtensions(), "VK_EXT_descriptor_indexing");
+}
 // TestCase
 
 void TestCase::initPrograms (SourceCollections&) const
index e3a51d9..37e532d 100644 (file)
@@ -101,6 +101,7 @@ public:
        bool                                                                            isBufferDeviceAddressKHRSupported                                       (void) const;
        bool                                                                            isBufferDeviceAddressEXTSupported                                       (void) const;
        bool                                                                            isBufferDeviceAddressWithCaptureReplaySupported         (void) const;
+       bool                                                                            isDescriptorIndexingSupported                                           (void) const;
 
 protected:
        tcu::TestContext&                                                       m_testCtx;
index 2b9933b..85f30e9 100644 (file)
@@ -69,8 +69,7 @@ VK_KHR_imageless_framebuffer                          DEVICE 1_2_0
 VK_KHR_shader_subgroup_extended_types          DEVICE 1_2_0
 VK_EXT_sampler_filter_minmax                           DEVICE 1_2_0
 VK_EXT_shader_viewport_index_layer                     DEVICE 1_2_0
-// VK_EXT_descriptor_indexing is an exception to promoted extension since its functionality is guarded by an addional option in Vulkan 1.2
-VK_EXT_descriptor_indexing                                     DEVICE
+VK_EXT_descriptor_indexing                                     DEVICE 1_2_0
 VK_EXT_scalar_block_layout                                     DEVICE 1_2_0
 VK_KHR_buffer_device_address                           DEVICE 1_2_0
 VK_EXT_host_query_reset                                                DEVICE 1_2_0