Merge vk-gl-cts/vulkan-cts-1.0.2 into vk-gl-cts/master
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / modules / vulkan / api / vktApiBufferViewCreateTests.cpp
index e7e01b1..f4aa048 100644 (file)
@@ -1,4 +1,4 @@
-/*------------------------------------------------------------------------
+/*-------------------------------------------------------------------------
  *  Vulkan Conformance Tests
  * ------------------------
  *
@@ -23,7 +23,6 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vktApiBufferViewCreateTests.hpp"
-
 #include "deStringUtil.hpp"
 #include "deSharedPtr.hpp"
 #include "gluVarType.hpp"
@@ -45,9 +44,10 @@ namespace
 
 enum AllocationKind
 {
-       ALLOCATION_KIND_SUBALLOCATION                                                                           = 0,
-       ALLOCATION_KIND_DEDICATED                                                                                       = 1,
-       ALLOCATION_KIND_LAST
+       ALLOCATION_KIND_SUBALLOCATED = 0,
+       ALLOCATION_KIND_DEDICATED,
+
+       ALLOCATION_KIND_LAST,
 };
 
 class IBufferAllocator;
@@ -82,7 +82,8 @@ public:
        virtual tcu::TestStatus                         createTestBuffer                                (VkDeviceSize                           size,
                                                                                                                                                 VkBufferUsageFlags                     usage,
                                                                                                                                                 Context&                                       context,
-                                                                                                                                                Move<VkBuffer>&                        testBuffer) const = 0;
+                                                                                                                                                Move<VkBuffer>&                        testBuffer,
+                                                                                                                                                Move<VkDeviceMemory>&          memory) const = 0;
 };
 
 class BufferSuballocation : public IBufferAllocator
@@ -91,7 +92,8 @@ public:
        virtual tcu::TestStatus                         createTestBuffer                                (VkDeviceSize                           size,
                                                                                                                                                 VkBufferUsageFlags                     usage,
                                                                                                                                                 Context&                                       context,
-                                                                                                                                                Move<VkBuffer>&                        testBuffer) const;
+                                                                                                                                                Move<VkBuffer>&                        testBuffer,
+                                                                                                                                                Move<VkDeviceMemory>&          memory) const;
 };
 
 class BufferDedicatedAllocation        : public IBufferAllocator
@@ -100,7 +102,8 @@ public:
        virtual tcu::TestStatus                         createTestBuffer                                (VkDeviceSize                           size,
                                                                                                                                                 VkBufferUsageFlags                     usage,
                                                                                                                                                 Context&                                       context,
-                                                                                                                                                Move<VkBuffer>&                        testBuffer) const;
+                                                                                                                                                Move<VkBuffer>&                        testBuffer,
+                                                                                                                                                Move<VkDeviceMemory>&          memory) const;
 };
 
 class BufferViewTestCase : public TestCase
@@ -126,7 +129,8 @@ private:
 tcu::TestStatus BufferSuballocation::createTestBuffer                                  (VkDeviceSize                           size,
                                                                                                                                                 VkBufferUsageFlags                     usage,
                                                                                                                                                 Context&                                       context,
-                                                                                                                                                Move<VkBuffer>&                        testBuffer) const
+                                                                                                                                                Move<VkBuffer>&                        testBuffer,
+                                                                                                                                                Move<VkDeviceMemory>&          memory) const
 {
        const VkDevice                                          vkDevice                                                = context.getDevice();
        const DeviceInterface&                          vk                                                              = context.getDeviceInterface();
@@ -162,7 +166,6 @@ tcu::TestStatus BufferSuballocation::createTestBuffer                                       (VkDeviceSize                           size,
                return tcu::TestStatus::fail(errorMsg.str());
        }
 
-       Move<VkDeviceMemory>                            memory;
        const VkMemoryAllocateInfo                      memAlloc                                                =
        {
                VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                                                 //      VkStructureType                 sType
@@ -189,7 +192,8 @@ tcu::TestStatus BufferSuballocation::createTestBuffer                                       (VkDeviceSize                           size,
 tcu::TestStatus BufferDedicatedAllocation::createTestBuffer                            (VkDeviceSize                           size,
                                                                                                                                                 VkBufferUsageFlags                     usage,
                                                                                                                                                 Context&                                       context,
-                                                                                                                                                Move<VkBuffer>&                        testBuffer) const
+                                                                                                                                                Move<VkBuffer>&                        testBuffer,
+                                                                                                                                                Move<VkDeviceMemory>&          memory) const
 {
        const std::vector<std::string>&         extensions                                              = context.getDeviceExtensions();
        const deBool                                            isSupported                                             = std::find(extensions.begin(), extensions.end(), "VK_KHR_dedicated_allocation") != extensions.end();
@@ -267,7 +271,6 @@ tcu::TestStatus BufferDedicatedAllocation::createTestBuffer                         (VkDeviceSize
        //const VkMemoryType                                    memoryType                                              = memoryProperties.memoryTypes[heapTypeIndex];
        //const VkMemoryHeap                                    memoryHeap                                              = memoryProperties.memoryHeaps[memoryType.heapIndex];
 
-       Move<VkDeviceMemory>                            memory;
        vk.getBufferMemoryRequirements2KHR(vkDevice, &info, &memReqs); // get the proper size requirement
 
        if (size > memReqs.memoryRequirements.size)
@@ -319,6 +322,7 @@ tcu::TestStatus BufferViewTestInstance::iterate                                                     (void)
        const DeviceInterface&                          vk                                                              = m_context.getDeviceInterface();
        const VkDeviceSize                                      size                                                    = 3 * 5 * 7 * 64;
        Move<VkBuffer>                                          testBuffer;
+       Move<VkDeviceMemory>                            testBufferMemory;
        VkFormatProperties                                      properties;
 
        m_context.getInstanceInterface().getPhysicalDeviceFormatProperties(m_context.getPhysicalDevice(), m_testCase.format, &properties);
@@ -328,11 +332,11 @@ tcu::TestStatus BufferViewTestInstance::iterate                                                   (void)
        // Create buffer
        if (m_testCase.bufferAllocationKind == ALLOCATION_KIND_DEDICATED)
        {
-               BufferDedicatedAllocation().createTestBuffer(size, m_testCase.usage, m_context, testBuffer);
+               BufferDedicatedAllocation().createTestBuffer(size, m_testCase.usage, m_context, testBuffer, testBufferMemory);
        }
        else
        {
-               BufferSuballocation().createTestBuffer(size, m_testCase.usage, m_context, testBuffer);
+               BufferSuballocation().createTestBuffer(size, m_testCase.usage, m_context, testBuffer, testBufferMemory);
        }
 
        {
@@ -391,9 +395,9 @@ tcu::TestStatus BufferViewTestInstance::iterate                                                     (void)
  tcu::TestCaseGroup* createBufferViewCreateTests                                               (tcu::TestContext& testCtx)
 {
        const VkDeviceSize                                      range                                                   = VK_WHOLE_SIZE;
-       const vk::VkBufferUsageFlagBits         usage[]                                                 = { vk::VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, vk::VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT };
-       const vk::VkFormatFeatureFlagBits       feature[]                                               = { vk::VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT, vk::VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT };
-       const char* const                                       usageName[]                                             = { "_uniform", "_storage"};
+       const vk::VkBufferUsageFlags            usage[]                                                 = { vk::VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, vk::VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT };
+       const vk::VkFormatFeatureFlags          feature[]                                               = { vk::VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT, vk::VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT };
+       const char* const                                       usageName[]                                             = { "uniform", "storage"};
 
        de::MovePtr<tcu::TestCaseGroup>         bufferViewTests                                 (new tcu::TestCaseGroup(testCtx, "create", "BufferView Construction Tests"));
 
@@ -408,25 +412,33 @@ tcu::TestStatus BufferViewTestInstance::iterate                                                   (void)
        };
 
        for (deUint32 allocationKind = 0; allocationKind < ALLOCATION_KIND_LAST; ++allocationKind)
-       for (deUint32 format = vk::VK_FORMAT_UNDEFINED + 1; format < VK_CORE_FORMAT_LAST; format++)
        for (deUint32 usageNdx = 0; usageNdx < DE_LENGTH_OF_ARRAY(usage); ++usageNdx)
        {
-               std::ostringstream                              testName;
-               std::ostringstream                              testDescription;
-               testName << "create_buffer_view_" << format << usageName[usageNdx];
-               testDescription << "vkBufferView test " << testName.str();
+               de::MovePtr<tcu::TestCaseGroup> usageGroup              (new tcu::TestCaseGroup(testCtx, usageName[usageNdx], ""));
+
+               for (deUint32 format = vk::VK_FORMAT_UNDEFINED + 1; format < VK_CORE_FORMAT_LAST; format++)
                {
-                       BufferViewCaseParameters        testParams                                              =
+                       const std::string                               formatName              = de::toLower(getFormatName((VkFormat)format)).substr(10);
+                       de::MovePtr<tcu::TestCaseGroup> formatGroup             (new tcu::TestCaseGroup(testCtx, "suballocation", "BufferView Construction Tests for Suballocated Buffer"));
+
+                       const std::string                               testName                = de::toLower(getFormatName((VkFormat)format)).substr(10);
+                       const std::string                               testDescription = "vkBufferView test " + testName;
+
                        {
-                               static_cast<vk::VkFormat>(format),                                              // VkFormat                                     format;
-                               0,                                                                                                              // VkDeviceSize                         offset;
-                               range,                                                                                                  // VkDeviceSize                         range;
-                               usage[usageNdx],                                                                                // VkBufferUsageFlags           usage;
-                               feature[usageNdx],                                                                              // VkFormatFeatureFlags         flags;
-                               static_cast<AllocationKind>(allocationKind)                             // AllocationKind                       bufferAllocationKind;
-                       };
-                       bufferViewAllocationGroupTests[allocationKind]->addChild(new BufferViewTestCase(testCtx, testName.str(), testDescription.str(), testParams));
+                               const BufferViewCaseParameters  testParams                                      =
+                               {
+                                       static_cast<vk::VkFormat>(format),                                              // VkFormat                                     format;
+                                       0,                                                                                                              // VkDeviceSize                         offset;
+                                       range,                                                                                                  // VkDeviceSize                         range;
+                                       usage[usageNdx],                                                                                // VkBufferUsageFlags           usage;
+                                       feature[usageNdx],                                                                              // VkFormatFeatureFlags         flags;
+                                       static_cast<AllocationKind>(allocationKind)                             // AllocationKind                       bufferAllocationKind;
+                               };
+
+                               usageGroup->addChild(new BufferViewTestCase(testCtx, testName.c_str(), testDescription.c_str(), testParams));
+                       }
                }
+               bufferViewAllocationGroupTests[allocationKind]->addChild(usageGroup.release());
        }
 
        for (deUint32 subgroupNdx = 0u; subgroupNdx < DE_LENGTH_OF_ARRAY(bufferViewAllocationGroupTests); ++subgroupNdx)