Sparse buffer test: allocate memory in one big chunk
authorMaciej Jesionowski <maciej.jesionowski@amd.com>
Wed, 26 Jul 2017 13:33:59 +0000 (15:33 +0200)
committerMaciej Jesionowski <maciej.jesionowski@amd.com>
Wed, 26 Jul 2017 13:41:48 +0000 (15:41 +0200)
The test made excessive small memory allocations breaking the
maxMemoryAllocationCount limit.

Affects:

dEQP-VK.sparse_resources.buffer.transfer.sparse_binding.buffer_size_2_24

Components: Vulkan
VK-GL-CTS issue: 592

Change-Id: Ic7c1c07db2b805806e2c940d3fd4d96e12043aaf

external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBufferSparseBinding.cpp

index 9f33b9f..96f4327 100644 (file)
@@ -152,21 +152,38 @@ tcu::TestStatus BufferSparseBindingInstance::iterate (void)
 
        DE_ASSERT((bufferMemRequirement.size % bufferMemRequirement.alignment) == 0);
 
-       std::vector<DeviceMemoryUniquePtr>      deviceMemUniquePtrVec;
+       Move<VkDeviceMemory> sparseMemoryAllocation;
 
        {
                std::vector<VkSparseMemoryBind> sparseMemoryBinds;
                const deUint32                                  numSparseBinds = static_cast<deUint32>(bufferMemRequirement.size / bufferMemRequirement.alignment);
-               const deUint32                                  memoryType = findMatchingMemoryType(instance, physicalDevice, bufferMemRequirement, MemoryRequirement::Any);
+               const deUint32                                  memoryType         = findMatchingMemoryType(instance, physicalDevice, bufferMemRequirement, MemoryRequirement::Any);
 
                if (memoryType == NO_MATCH_FOUND)
                        return tcu::TestStatus::fail("No matching memory type found");
 
-               for (deUint32 sparseBindNdx = 0; sparseBindNdx < numSparseBinds; ++sparseBindNdx)
                {
-                       const VkSparseMemoryBind sparseMemoryBind = makeSparseMemoryBind(deviceInterface, *m_logicalDevice, bufferMemRequirement.alignment, memoryType, bufferMemRequirement.alignment * sparseBindNdx);
+                       const VkMemoryAllocateInfo allocateInfo =
+                       {
+                               VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                 // VkStructureType    sType;
+                               DE_NULL,                                                                                // const void*        pNext;
+                               bufferMemRequirement.size,                                              // VkDeviceSize       allocationSize;
+                               memoryType,                                                                             // uint32_t           memoryTypeIndex;
+                       };
+
+                       sparseMemoryAllocation = allocateMemory(deviceInterface, *m_logicalDevice, &allocateInfo);
+               }
 
-                       deviceMemUniquePtrVec.push_back(makeVkSharedPtr(Move<VkDeviceMemory>(check<VkDeviceMemory>(sparseMemoryBind.memory), Deleter<VkDeviceMemory>(deviceInterface, *m_logicalDevice, DE_NULL))));
+               for (deUint32 sparseBindNdx = 0; sparseBindNdx < numSparseBinds; ++sparseBindNdx)
+               {
+                       const VkSparseMemoryBind sparseMemoryBind =
+                       {
+                               bufferMemRequirement.alignment * sparseBindNdx,                 // VkDeviceSize               resourceOffset;
+                               bufferMemRequirement.alignment,                                                 // VkDeviceSize               size;
+                               *sparseMemoryAllocation,                                                                // VkDeviceMemory             memory;
+                               bufferMemRequirement.alignment * sparseBindNdx,                 // VkDeviceSize               memoryOffset;
+                               (VkSparseMemoryBindFlags)0,                                                             // VkSparseMemoryBindFlags    flags;
+                       };
 
                        sparseMemoryBinds.push_back(sparseMemoryBind);
                }