From bc15c6b84f7ff0941066aaf8d241b43ecaced51b Mon Sep 17 00:00:00 2001 From: Gary Sweet Date: Mon, 4 Sep 2017 10:39:36 +0100 Subject: [PATCH] Fixup some missing/incorrect flushes and invalidates Some of the flushes were too small, and there were a few missing invalidates. Affects: dEQP-VK.ssbo.layout.* dEQP-VK.pipeline.push_constant.compute_pipeline.simple_test Components: Vulkan VK-GL-CTS issue: 660 Change-Id: Id29b59d127e004a028c04a1075db563d697140a1 --- .../pipeline/vktPipelinePushConstantTests.cpp | 2 ++ .../modules/vulkan/ssbo/vktSSBOLayoutCase.cpp | 33 ++++++++-------------- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp index aeef07f..5c7314d 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp @@ -1445,6 +1445,8 @@ tcu::TestStatus PushConstantComputeTestInstance::iterate (void) VK_CHECK(vk.queueSubmit(queue, 1, &submitInfo, *m_fence)); VK_CHECK(vk.waitForFences(vkDevice, 1, &m_fence.get(), true, ~(0ull) /* infinity*/)); + invalidateMappedMemoryRange(vk, vkDevice, m_outBufferAlloc->getMemory(), m_outBufferAlloc->getOffset(), (size_t)(sizeof(tcu::Vec4) * 8)); + // verify result std::vector expectValue(8, tcu::Vec4(1.0f, 0.0f, 0.0f, 1.0f)); if (deMemCmp((void*)(&expectValue[0]), m_outBufferAlloc->getHostPtr(), (size_t)(sizeof(tcu::Vec4) * 8))) diff --git a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp index 7ac5fe3..fd5309e 100644 --- a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp +++ b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutCase.cpp @@ -2039,29 +2039,10 @@ tcu::TestStatus SSBOLayoutCaseInstance::iterate (void) mappedBlockPtrs = blockLocationsToPtrs(m_refLayout, blockLocations, mapPtrs); copyData(m_refLayout, mappedBlockPtrs, m_refLayout, m_initialData.pointers); - if (m_bufferMode == SSBOLayoutCase::BUFFERMODE_PER_BLOCK) + for (size_t allocNdx = 0; allocNdx < m_uniformAllocs.size(); allocNdx++) { - DE_ASSERT(m_uniformAllocs.size() == bufferSizes.size()); - for (size_t allocNdx = 0; allocNdx < m_uniformAllocs.size(); allocNdx++) - { - const int size = bufferSizes[allocNdx]; - vk::Allocation* alloc = m_uniformAllocs[allocNdx].get(); - flushMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), size); - } - } - else - { - DE_ASSERT(m_bufferMode == SSBOLayoutCase::BUFFERMODE_SINGLE); - DE_ASSERT(m_uniformAllocs.size() == 1); - int totalSize = 0; - for (size_t bufferNdx = 0; bufferNdx < bufferSizes.size(); bufferNdx++) - { - totalSize += bufferSizes[bufferNdx]; - } - - DE_ASSERT(totalSize > 0); - vk::Allocation* alloc = m_uniformAllocs[0].get(); - flushMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), totalSize); + vk::Allocation* alloc = m_uniformAllocs[allocNdx].get(); + flushMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), VK_WHOLE_SIZE); } } } @@ -2216,6 +2197,8 @@ tcu::TestStatus SSBOLayoutCaseInstance::iterate (void) const int refCount = 1; int resCount = 0; + invalidateMappedMemoryRange(vk, device, acBufferAlloc->getMemory(), acBufferAlloc->getOffset(), acBufferSize); + resCount = *(const int*)((const deUint8*)acBufferAlloc->getHostPtr()); counterOk = (refCount == resCount); @@ -2225,6 +2208,12 @@ tcu::TestStatus SSBOLayoutCaseInstance::iterate (void) } } + for (size_t allocNdx = 0; allocNdx < m_uniformAllocs.size(); allocNdx++) + { + vk::Allocation *alloc = m_uniformAllocs[allocNdx].get(); + invalidateMappedMemoryRange(vk, device, alloc->getMemory(), alloc->getOffset(), VK_WHOLE_SIZE); + } + // Validate result const bool compareOk = compareData(m_context.getTestContext().getLog(), m_refLayout, m_writeData.pointers, m_refLayout, mappedBlockPtrs); -- 2.7.4