From: Slawomir Cygan Date: Mon, 22 Jun 2020 15:48:13 +0000 (+0200) Subject: Add missing barriers from device to host read access X-Git-Tag: upstream/1.3.5~1253^2^2~4^2^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bb58de7157c0a2d0cd0101d69aae315b8741872b;p=platform%2Fupstream%2FVK-GL-CTS.git Add missing barriers from device to host read access Add barriers from various device write accesses to host read access just before validating device written-data on host. Additionally correct one host memory op before validating data: invalidate should be used instead of flush. Components: Vulkan VK-GL-CTS Issue: 2429 Change-Id: I09c845e7f306eadb012bf33cf49e1a9cfa8e2e0c Affects: dEQP-VK.conditional_rendering.* --- diff --git a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp index bacc1e2..0a594af 100644 --- a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp +++ b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDispatchTests.cpp @@ -311,6 +311,21 @@ tcu::TestStatus ConditionalDispatchTestInstance::iterate (void) vk.cmdExecuteCommands(*cmdBuffer, 1, &secondaryCmdBuffer.get()); } + const vk::VkBufferMemoryBarrier outputBufferMemoryBarrier = + { + vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + DE_NULL, + vk::VK_ACCESS_SHADER_WRITE_BIT, + vk::VK_ACCESS_HOST_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + outputBuffer.get(), + 0u, + VK_WHOLE_SIZE + }; + + vk.cmdPipelineBarrier(*cmdBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, DE_NULL, 1u, &outputBufferMemoryBarrier, 0u, DE_NULL); + endCommandBuffer(vk, *cmdBuffer); submitCommandsAndWait(vk, device, queue, *cmdBuffer); diff --git a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp index 0ce3e11..40124dd 100644 --- a/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp +++ b/external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp @@ -773,6 +773,21 @@ tcu::TestStatus ConditionalRenderingClearAttachmentsTestInstance::iterate (void) copyResultImageToBuffer(m_testParams.m_testDepth ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT, m_testParams.m_testDepth ? m_depthTargetImage->object() : m_colorTargetImage->object()); + const vk::VkBufferMemoryBarrier bufferMemoryBarrier = + { + vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + DE_NULL, + vk::VK_ACCESS_TRANSFER_WRITE_BIT, + vk::VK_ACCESS_HOST_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + m_resultBuffer->object(), + 0u, + VK_WHOLE_SIZE + }; + + m_vkd.cmdPipelineBarrier(*m_cmdBufferPrimary, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, DE_NULL, 1u, &bufferMemoryBarrier, 0u, DE_NULL); + endCommandBuffer(m_vkd, *m_cmdBufferPrimary); submitCommandsAndWait(m_vkd, m_device, m_queue, *m_cmdBufferPrimary); @@ -942,6 +957,21 @@ tcu::TestStatus ConditionalRenderingDrawTestInstance::iterate (void) copyResultImageToBuffer(VK_IMAGE_ASPECT_COLOR_BIT, m_colorTargetImage->object()); + const vk::VkBufferMemoryBarrier bufferMemoryBarrier = + { + vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + DE_NULL, + vk::VK_ACCESS_TRANSFER_WRITE_BIT, + vk::VK_ACCESS_HOST_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + m_resultBuffer->object(), + 0u, + VK_WHOLE_SIZE + }; + + m_vkd.cmdPipelineBarrier(*m_cmdBufferPrimary, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, DE_NULL, 1u, &bufferMemoryBarrier, 0u, DE_NULL); + endCommandBuffer(m_vkd, *m_cmdBufferPrimary); submitCommandsAndWait(m_vkd, m_device, m_queue, *m_cmdBufferPrimary); @@ -1221,6 +1251,21 @@ tcu::TestStatus ConditionalRenderingUpdateBufferWithDrawTestInstance::iterate (v copyResultImageToBuffer(VK_IMAGE_ASPECT_COLOR_BIT, m_colorTargetImage->object()); + const vk::VkBufferMemoryBarrier bufferMemoryBarrier = + { + vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + DE_NULL, + vk::VK_ACCESS_TRANSFER_WRITE_BIT, + vk::VK_ACCESS_HOST_READ_BIT, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + m_conditionalRenderingBuffer->object(), + 0u, + VK_WHOLE_SIZE + }; + + m_vkd.cmdPipelineBarrier(*m_cmdBufferPrimary, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, DE_NULL, 1u, &bufferMemoryBarrier, 0u, DE_NULL); + endCommandBuffer(m_vkd, *m_cmdBufferPrimary); submitCommandsAndWait(m_vkd, m_device, m_queue, *m_cmdBufferPrimary); @@ -1232,7 +1277,7 @@ tcu::TestStatus ConditionalRenderingUpdateBufferWithDrawTestInstance::iterate (v m_testParams ? prepareReferenceImageOneColor(reference, tcu::Vec4(0,1,0,1)) : prepareReferenceImageOneColor(reference, clearColorInitial); - flushMappedMemoryRange(m_vkd, m_device, m_conditionalRenderingBuffer->getBoundMemory().getMemory(), m_conditionalRenderingBuffer->getBoundMemory().getOffset(), VK_WHOLE_SIZE); + invalidateMappedMemoryRange(m_vkd, m_device, m_conditionalRenderingBuffer->getBoundMemory().getMemory(), m_conditionalRenderingBuffer->getBoundMemory().getOffset(), VK_WHOLE_SIZE); if (!tcu::floatThresholdCompare(m_context.getTestContext().getLog(), "Comparison", "Comparison", reference, result, tcu::Vec4(0.01f), tcu::COMPARE_LOG_ON_ERROR)) return tcu::TestStatus::fail("Fail");