Due to an error in the condition, the transfer-only queue wasn't
selected for the fill buffer write operation.
Also fixed a validation error with barrier used inside a render pass
in read vertex input operation. This should have no effect on behavior.
Affects:
dEQP-VK.synchronization.op.multi_queue.*fill_buffer*
dEQP-VK.synchronization.op.*read_vertex_input*
Components: Vulkan
VK-GL-CTS issue: 481
Change-Id: Ibed24824532c0e35aba61238809f34717f431b6f
VkQueueFlags getQueueFlags (const OperationContext& context) const
{
VkQueueFlags getQueueFlags (const OperationContext& context) const
{
- if (std::find(context.getDeviceExtensions().begin(), context.getDeviceExtensions().end(), "VK_KHR_maintenance1") == context.getDeviceExtensions().end() ||
- BUFFER_OP_UPDATE != m_bufferOp)
+ if (m_bufferOp == BUFFER_OP_FILL &&
+ !de::contains(context.getDeviceExtensions().begin(), context.getDeviceExtensions().end(), "VK_KHR_maintenance1"))
+ {
return VK_QUEUE_COMPUTE_BIT | VK_QUEUE_GRAPHICS_BIT;
return VK_QUEUE_COMPUTE_BIT | VK_QUEUE_GRAPHICS_BIT;
return VK_QUEUE_TRANSFER_BIT;
}
return VK_QUEUE_TRANSFER_BIT;
}
vk.cmdDraw(cmdBuffer, static_cast<deUint32>(dataSizeBytes / sizeof(tcu::UVec4)), 1u, 0u, 0u);
vk.cmdDraw(cmdBuffer, static_cast<deUint32>(dataSizeBytes / sizeof(tcu::UVec4)), 1u, 0u, 0u);
- const VkBufferMemoryBarrier barrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_outputBuffer, 0u, m_resource.getBuffer().size);
- vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
-
endRenderPass(vk, cmdBuffer);
endRenderPass(vk, cmdBuffer);
+
+ // Insert a barrier so data written by the shader is available to the host
+ {
+ const VkBufferMemoryBarrier barrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_outputBuffer, 0u, m_resource.getBuffer().size);
+ vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+ }
}
SyncInfo getSyncInfo (void) const
}
SyncInfo getSyncInfo (void) const