diff --git a/.pick_status.json b/.pick_status.json index ccd88fbf765..f0285b8ffe7 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -6134,7 +6134,7 @@ "description": "zink: add TRANSFER_WRITE -> HOST_READ sync to end of batch", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 2d682e0c57a..e76470df6b1 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -701,6 +701,23 @@ submit_queue(void *data, void *gdata, int thread_index) }; if (si[ZINK_SUBMIT_CMDBUF].waitSemaphoreCount) si[ZINK_SUBMIT_CMDBUF].pNext = &sem_submit; + { + VkCommandBuffer sync_cmdbuf = bs->has_work ? bs->cmdbuf : + bs->has_reordered_work ? bs->reordered_cmdbuf : + bs->has_unsync ? bs->unsynchronized_cmdbuf : + VK_NULL_HANDLE; + if (sync_cmdbuf) { + VkMemoryBarrier mb; + mb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER; + mb.pNext = NULL; + mb.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + mb.dstAccessMask = VK_ACCESS_HOST_READ_BIT; + VKSCR(CmdPipelineBarrier)(sync_cmdbuf, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_HOST_BIT, + 0, 1, &mb, 0, NULL, 0, NULL); + } + } VkCommandBuffer cmdbufs[3]; unsigned c = 0; if (bs->has_unsync)