Merge vk-gl-cts/vulkan-cts-1.0.2 into vk-gl-cts/master
authorAlexander Galazin <alexander.galazin@arm.com>
Fri, 11 Aug 2017 17:34:19 +0000 (19:34 +0200)
committerAlexander Galazin <alexander.galazin@arm.com>
Fri, 11 Aug 2017 17:34:19 +0000 (19:34 +0200)
Change-Id: I90a5ab2f101b2dcd7372ac8721b944d7bcbb95d0

external/vulkancts/modules/vulkan/api/vktApiBufferViewCreateTests.cpp
external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
external/vulkancts/modules/vulkan/api/vktApiImageClearingTests.cpp
external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBufferSparseBinding.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp
external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp
external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp

index 2b485a6..f4aa048 100644 (file)
@@ -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);
        }
 
        {
index 881d8c7..6e38fdb 100644 (file)
@@ -389,9 +389,9 @@ void CopiesAndBlittingTestInstance::generateBuffer (tcu::PixelBufferAccess buffe
                        case FILL_MODE_RED:
                                if (tcu::isCombinedDepthStencilType(buffer.getFormat().type))
                                {
-                                       buffer.setPixDepth(redColor[x % 4], x, y, z);
+                                       buffer.setPixDepth(redColor[0], x, y, z);
                                        if (tcu::hasStencilComponent(buffer.getFormat().order))
-                                               buffer.setPixStencil(255 * (int)redColor[y % 4], x, y, z);
+                                               buffer.setPixStencil((int)redColor[3], x, y, z);
                                }
                                else
                                        buffer.setPixel(redColor, x, y, z);
index b167d85..3eeabd2 100644 (file)
@@ -151,7 +151,7 @@ deUint32 greatestCommonDivisor (const deUint32 a, const deUint32 b)
        deUint32 x=a;
        deUint32 y=b;
 
-       while (x%b != 0)
+       while (x%y != 0)
        {
                temp = y;
                y = x%y;
index 1a658ed..2202d9a 100644 (file)
@@ -150,21 +150,38 @@ tcu::TestStatus BufferSparseBindingInstance::iterate (void)
 
        DE_ASSERT((bufferMemRequirement.size % bufferMemRequirement.alignment) == 0);
 
-       std::vector<DeviceMemorySp> 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, getDevice(), 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, getDevice(), &allocateInfo);
+               }
 
-                       deviceMemUniquePtrVec.push_back(makeVkSharedPtr(Move<VkDeviceMemory>(check<VkDeviceMemory>(sparseMemoryBind.memory), Deleter<VkDeviceMemory>(deviceInterface, getDevice(), 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);
                }
index f612887..a4aa1a0 100644 (file)
@@ -417,7 +417,7 @@ tcu::TestCaseGroup* createOpAtomicGroup (tcu::TestContext& testCtx, bool useStor
                                                                                                                                                                useStorageBuffer ? "opatomic_storage_buffer" : "opatomic",
                                                                                                                                                                "Test the OpAtomic* opcodes"));
        de::Random                                              rnd                                     (deStringHash(group->getName()));
-       const int                                               numElements                     = 1000000;
+       const int                                               numElements                     = 65535;
        vector<OpAtomicCase>                    cases;
 
        const StringTemplate                    shaderTemplate  (
index b8cfaf6..b3c8cf9 100644 (file)
@@ -432,6 +432,8 @@ de::MovePtr<vk::Allocation> allocateAndBindMemory (const vk::DeviceInterface&
 
                if (!dedicated && dedicatedRequirements.requiresDedicatedAllocation)
                        TCU_THROW(NotSupportedError, "Memory requires dedicated allocation");
+
+               memoryRequirements = requirements.memoryRequirements;
        }
        else
        {
@@ -855,7 +857,7 @@ SharingTestInstance::SharingTestInstance (Context&          context,
        , m_physicalDeviceA                     (getPhysicalDevice(m_vkiA, *m_instanceA, context.getTestContext().getCommandLine()))
        , m_queueFamiliesA                      (vk::getPhysicalDeviceQueueFamilyProperties(m_vkiA, m_physicalDeviceA))
        , m_queueFamilyIndicesA         (getFamilyIndices(m_queueFamiliesA))
-       , m_getMemReq2Supported         (de::contains(context.getInstanceExtensions().begin(), context.getInstanceExtensions().end(), "VK_KHR_get_memory_requirements2"))
+       , m_getMemReq2Supported         (de::contains(context.getDeviceExtensions().begin(), context.getDeviceExtensions().end(), "VK_KHR_get_memory_requirements2"))
        , m_deviceA                                     (createDevice(m_vkiA, m_physicalDeviceA, m_config.memoryHandleType, m_config.semaphoreHandleType, m_config.dedicated, m_getMemReq2Supported))
        , m_vkdA                                        (m_vkiA, *m_deviceA)
 
@@ -931,6 +933,11 @@ SharingTestInstance::SharingTestInstance (Context&         context,
 
                if ((externalProperties.externalMemoryProperties.externalMemoryFeatures & vk::VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR) == 0)
                        TCU_THROW(NotSupportedError, "Importing image resource not supported");
+
+               if (!m_config.dedicated && (externalProperties.externalMemoryProperties.externalMemoryFeatures & vk::VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR) != 0)
+               {
+                       TCU_THROW(NotSupportedError, "Handle requires dedicated allocation, but test uses suballocated memory");
+               }
        }
        else
        {
@@ -956,6 +963,11 @@ SharingTestInstance::SharingTestInstance (Context&         context,
                if ((properties.externalMemoryProperties.externalMemoryFeatures & vk::VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR) == 0
                                || (properties.externalMemoryProperties.externalMemoryFeatures & vk::VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR) == 0)
                        TCU_THROW(NotSupportedError, "Exporting and importing memory type not supported");
+
+               if (!m_config.dedicated && (properties.externalMemoryProperties.externalMemoryFeatures & vk::VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR) != 0)
+               {
+                       TCU_THROW(NotSupportedError, "Handle requires dedicated allocation, but test uses suballocated memory");
+               }
        }
 
        // Check semaphore support
index 8c2c405..3b2a793 100644 (file)
@@ -486,7 +486,7 @@ vk::Move<vk::VkRenderPass> createRenderPass (const vk::DeviceInterface&     vkd,
                        vk::VK_ATTACHMENT_LOAD_OP_DONT_CARE,
                        vk::VK_ATTACHMENT_STORE_OP_DONT_CARE,
 
-                       vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+                       vk::VK_IMAGE_LAYOUT_UNDEFINED,
                        vk::VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
                }
        };
index 2079577..b72a910 100644 (file)
@@ -363,6 +363,8 @@ vk::Move<vk::VkCommandBuffer> createCommandBuffer (const vk::DeviceInterface&       vk
                                                                                                   vk::VkRenderPass                             renderPass,
                                                                                                   vk::VkFramebuffer                    framebuffer,
                                                                                                   vk::VkPipeline                               pipeline,
+                                                                                                  vk::VkImage                                  image,
+                                                                                                  bool                                                 isFirst,
                                                                                                   size_t                                               imageNextFrame,
                                                                                                   size_t                                               currentFrame,
                                                                                                   deUint32                                             imageWidth,
@@ -389,6 +391,31 @@ vk::Move<vk::VkCommandBuffer> createCommandBuffer (const vk::DeviceInterface&      vk
        VK_CHECK(vkd.beginCommandBuffer(*commandBuffer, &beginInfo));
 
        {
+               const vk::VkImageSubresourceRange subRange =
+               {
+                       vk::VK_IMAGE_ASPECT_COLOR_BIT,
+                       0,
+                       1,
+                       0,
+                       1
+               };
+               const vk::VkImageMemoryBarrier barrier =
+               {
+                       vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+                       DE_NULL,
+                       vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+                       vk::VK_ACCESS_TRANSFER_READ_BIT | vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+                       isFirst ? vk::VK_IMAGE_LAYOUT_UNDEFINED : vk::VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
+                       vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+                       VK_QUEUE_FAMILY_IGNORED,
+                       VK_QUEUE_FAMILY_IGNORED,
+                       image,
+                       subRange
+               };
+               vkd.cmdPipelineBarrier(*commandBuffer, vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, 0, DE_NULL, 0, DE_NULL, 1, &barrier);
+       }
+
+       {
                const vk::VkClearValue                  clearValue                      = vk::makeClearValueColorF32(0.25f, 0.50f, 0.75f, 1.00f);
                const vk::VkRenderPassBeginInfo renderPassBeginInfo     =
                {
@@ -901,6 +928,7 @@ private:
        vk::Move<vk::VkSwapchainKHR>                                    m_swapchain;
        std::vector<vk::VkImage>                                                m_swapchainImages;
        std::vector<size_t>                                                             m_imageNextFrames;
+       std::vector<bool>                                                               m_isFirst;
 
        vk::Move<vk::VkRenderPass>                                              m_renderPass;
        vk::Move<vk::VkPipeline>                                                m_pipeline;
@@ -1079,6 +1107,7 @@ void IncrementalPresentTestInstance::initSwapchainResources (void)
        m_swapchainImages               = vk::wsi::getSwapchainImages(m_vkd, *m_device, *m_swapchain);
 
        m_imageNextFrames.resize(m_swapchainImages.size(), 0);
+       m_isFirst.resize(m_swapchainImages.size(), true);
 
        m_renderPass                    = createRenderPass(m_vkd, *m_device, imageFormat);
        m_pipeline                              = createPipeline(m_vkd, *m_device, *m_renderPass, *m_pipelineLayout, *m_vertexShaderModule, *m_fragmentShaderModule, imageWidth, imageHeight);
@@ -1130,6 +1159,7 @@ void IncrementalPresentTestInstance::deinitSwapchainResources (void)
 
        m_swapchainImages.clear();
        m_imageNextFrames.clear();
+       m_isFirst.clear();
 
        m_swapchain             = vk::Move<vk::VkSwapchainKHR>();
        m_renderPass    = vk::Move<vk::VkRenderPass>();
@@ -1165,8 +1195,9 @@ void IncrementalPresentTestInstance::render (void)
        // Create command buffer
        {
                imageNextFrame = m_imageNextFrames[imageIndex];
-               m_commandBuffers[m_frameNdx % m_commandBuffers.size()] = createCommandBuffer(m_vkd, *m_device, *m_commandPool, *m_pipelineLayout, *m_renderPass, m_framebuffers[imageIndex], *m_pipeline, imageNextFrame, m_frameNdx, width, height).disown();
+               m_commandBuffers[m_frameNdx % m_commandBuffers.size()] = createCommandBuffer(m_vkd, *m_device, *m_commandPool, *m_pipelineLayout, *m_renderPass, m_framebuffers[imageIndex], *m_pipeline, m_swapchainImages[imageIndex], m_isFirst[imageIndex], imageNextFrame, m_frameNdx, width, height).disown();
                m_imageNextFrames[imageIndex] = m_frameNdx + 1;
+               m_isFirst[imageIndex] = false;
        }
 
        // Submit command buffer