Test creating empty descriptor set layouts
authorPaavo Pessi <paavo.pessi@siru.fi>
Fri, 16 Feb 2018 14:30:07 +0000 (16:30 +0200)
committerPaavo Pessi <paavo.pessi@siru.fi>
Mon, 5 Mar 2018 09:19:20 +0000 (11:19 +0200)
Two new test cases were added. The first case creates a descriptor set
layout with zero bindings and without optional flags. The second case
creates a descriptor set layout with zero bindings and uses the
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR flag.

The test passes as long as the descriptor set layout is created
successfully.

New tests:

dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.normal
dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.push_descriptor

Components: Vulkan, Framework

VK-GL-CTS issue: 1013
VK-GL-CTS public issue: 80

Change-Id: I75abe4e3f0f14902a4d7178e7e763ccdec90dc8c

android/cts/master/vk-master.txt
external/vulkancts/framework/vulkan/vkQueryUtil.cpp
external/vulkancts/framework/vulkan/vkQueryUtil.hpp
external/vulkancts/modules/vulkan/api/vktApiDescriptorSetTests.cpp
external/vulkancts/mustpass/1.0.3/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.0.3/vk-default.txt

index c87a549..3aee502 100644 (file)
@@ -71715,6 +71715,8 @@ dEQP-VK.api.external.fence.opaque_win32_kmt.export_signal_import_wait_permanent
 dEQP-VK.api.external.fence.opaque_win32_kmt.export_import_signal_wait_permanent
 dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.graphics
 dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.compute
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.normal
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.push_descriptor
 dEQP-VK.api.pipeline.renderpass.destroy_pipeline_renderpass
 dEQP-VK.api.pipeline.renderpass.framebuffer_compatible_renderpass
 dEQP-VK.memory.allocation.basic.size_64.forward.count_1
index 15e838d..d09d703 100644 (file)
@@ -23,6 +23,9 @@
 
 #include "vkQueryUtil.hpp"
 #include "deMemory.h"
+#include "deSTLUtil.hpp"
+
+#include <string>
 
 namespace vk
 {
@@ -313,6 +316,11 @@ bool isExtensionSupported (const std::vector<VkExtensionProperties>& extensions,
        return isExtensionSupported(extensions.begin(), extensions.end(), required);
 }
 
+bool isExtensionSupported (const vector<std::string>& extensionStrings, const std::string& extensionName)
+{
+       return de::contains(extensionStrings.begin(), extensionStrings.end(), extensionName);
+}
+
 bool isLayerSupported (const std::vector<VkLayerProperties>& layers, const RequiredLayer& required)
 {
        return isLayerSupported(layers.begin(), layers.end(), required);
index b10bf91..8aeaaed 100644 (file)
@@ -28,6 +28,7 @@
 #include "deMemory.h"
 
 #include <vector>
+#include <string>
 
 namespace vk
 {
@@ -101,6 +102,7 @@ bool                                                                                isCompatible                                                    (const VkLayerProperties& layerProperties, cons
 template<typename ExtensionIterator>
 bool                                                                           isExtensionSupported                                    (ExtensionIterator begin, ExtensionIterator end, const RequiredExtension& required);
 bool                                                                           isExtensionSupported                                    (const std::vector<VkExtensionProperties>& extensions, const RequiredExtension& required);
+bool                                                                           isExtensionSupported                                    (const std::vector<std::string>& extensionStrings, const std::string& extensionName);
 
 template<typename LayerIterator>
 bool                                                                           isLayerSupported                                                (LayerIterator begin, LayerIterator end, const RequiredLayer& required);
index 6080564..7fc54a4 100644 (file)
@@ -24,6 +24,7 @@
 #include "vktApiDescriptorSetTests.hpp"
 #include "vktTestCaseUtil.hpp"
 
+#include "vkQueryUtil.hpp"
 #include "vkRefUtil.hpp"
 #include "vkPrograms.hpp"
 
@@ -218,6 +219,30 @@ tcu::TestStatus descriptorSetLayoutLifetimeComputeTest (Context& context)
        return tcu::TestStatus::pass("Pass");
 }
 
+tcu::TestStatus emptyDescriptorSetLayoutTest (Context& context, VkDescriptorSetLayoutCreateFlags descriptorSetLayoutCreateFlags)
+{
+       const DeviceInterface&                                  vk                                                              = context.getDeviceInterface();
+       const VkDevice                                                  device                                                  = context.getDevice();
+
+       if (descriptorSetLayoutCreateFlags == VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR)
+               if (!isExtensionSupported(context.getDeviceExtensions(), "VK_KHR_push_descriptor"))
+                       TCU_THROW(NotSupportedError, "VK_KHR_push_descriptor extension not supported");
+
+       const VkDescriptorSetLayoutCreateInfo   descriptorSetLayoutCreateInfo   =
+       {
+               VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,    // VkStructureType                        sType;
+               DE_NULL,                                                                                                // const void*                            pNext;
+               descriptorSetLayoutCreateFlags,                                                 // VkDescriptorSetLayoutCreateFlags       flags;
+               0u,                                                                                                             // deUint32                               bindingCount;
+               DE_NULL                                                                                                 // const VkDescriptorSetLayoutBinding*    pBindings;
+       };
+
+       Unique<VkDescriptorSetLayout>                   descriptorSetLayout                             (createDescriptorSetLayout(vk, device, &descriptorSetLayoutCreateInfo));
+
+       // Test should always pass
+       return tcu::TestStatus::pass("Pass");
+}
+
 } // anonymous
 
 void createDescriptorSetLayoutLifetimeGraphicsSource (SourceCollections& dst)
@@ -250,11 +275,31 @@ tcu::TestCaseGroup* createDescriptorSetLayoutLifetimeTests (tcu::TestContext& te
        return descriptorSetLayoutLifetimeTests.release();
 }
 
+tcu::TestCaseGroup* createEmptyDescriptorSetLayoutTests (tcu::TestContext& testCtx)
+{
+       de::MovePtr<tcu::TestCaseGroup> emptyDescriptorSetLayoutTests(new tcu::TestCaseGroup(testCtx, "empty_set", "Create empty descriptor set layout tests"));
+
+       addFunctionCase(emptyDescriptorSetLayoutTests.get(), "normal", "Create empty desciptor set layout", emptyDescriptorSetLayoutTest, (VkDescriptorSetLayoutCreateFlags)0u);
+       addFunctionCase(emptyDescriptorSetLayoutTests.get(), "push_descriptor", "Create empty push descriptor set layout", emptyDescriptorSetLayoutTest, (VkDescriptorSetLayoutCreateFlags)VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR);
+
+       return emptyDescriptorSetLayoutTests.release();
+}
+
+tcu::TestCaseGroup* createDescriptorSetLayoutTests (tcu::TestContext& testCtx)
+{
+       de::MovePtr<tcu::TestCaseGroup> descriptorSetLayoutTests(new tcu::TestCaseGroup(testCtx, "descriptor_set_layout", "Descriptor set layout tests"));
+
+       descriptorSetLayoutTests->addChild(createEmptyDescriptorSetLayoutTests(testCtx));
+
+       return descriptorSetLayoutTests.release();
+}
+
 tcu::TestCaseGroup* createDescriptorSetTests (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> descriptorSetTests(new tcu::TestCaseGroup(testCtx, "descriptor_set", "Descriptor set tests"));
 
        descriptorSetTests->addChild(createDescriptorSetLayoutLifetimeTests(testCtx));
+       descriptorSetTests->addChild(createDescriptorSetLayoutTests(testCtx));
 
        return descriptorSetTests.release();
 }
index a31b674..4c2aef8 100644 (file)
@@ -71712,6 +71712,8 @@ dEQP-VK.api.external.fence.opaque_win32_kmt.export_signal_import_wait_permanent
 dEQP-VK.api.external.fence.opaque_win32_kmt.export_import_signal_wait_permanent
 dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.graphics
 dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.compute
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.normal
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.push_descriptor
 dEQP-VK.api.pipeline.renderpass.destroy_pipeline_renderpass
 dEQP-VK.api.pipeline.renderpass.framebuffer_compatible_renderpass
 dEQP-VK.memory.allocation.basic.size_64.forward.count_1
index ebfc87c..8d34d95 100644 (file)
@@ -71712,6 +71712,8 @@ dEQP-VK.api.external.fence.opaque_win32_kmt.export_signal_import_wait_permanent
 dEQP-VK.api.external.fence.opaque_win32_kmt.export_import_signal_wait_permanent
 dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.graphics
 dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.compute
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.normal
+dEQP-VK.api.descriptor_set.descriptor_set_layout.empty_set.push_descriptor
 dEQP-VK.api.pipeline.renderpass.destroy_pipeline_renderpass
 dEQP-VK.api.pipeline.renderpass.framebuffer_compatible_renderpass
 dEQP-VK.memory.allocation.basic.size_64.forward.count_1