diff options
author | Erik Faye-Lund <erik.faye-lund@collabora.com> | 2023-04-04 20:38:57 +0200 |
---|---|---|
committer | Erik Faye-Lund <erik.faye-lund@collabora.com> | 2023-04-17 08:53:18 +0200 |
commit | 0cc3100fe300d7050d8b2abef125a14682d4f4d2 (patch) | |
tree | a967afc4551ad8c2f37554686472570d5737daa3 /src/vulkan/vkgears.c | |
parent | cc6ec4130e6c69e0b9a2da5e5ebf64efac945f02 (diff) | |
download | mesa-demos-0cc3100fe300d7050d8b2abef125a14682d4f4d2.tar.gz |
vkgears: put barriers around vkCmdUpdateBuffer
Without this, we end up with sync-hazards, it seems.
Acked-by: Hoe Hao Cheng <haochengho12907@gmail.com>
Diffstat (limited to 'src/vulkan/vkgears.c')
-rw-r--r-- | src/vulkan/vkgears.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/vulkan/vkgears.c b/src/vulkan/vkgears.c index ad51151f..b6b560a6 100644 --- a/src/vulkan/vkgears.c +++ b/src/vulkan/vkgears.c @@ -1361,6 +1361,33 @@ static struct wsi_callbacks wsi_callbacks = { .exit = wsi_exit, }; +static void +buffer_barrier(VkCommandBuffer cmd_buffer, + VkPipelineStageFlags src_flags, + VkPipelineStageFlags dst_flags, + VkAccessFlags src_access, + VkAccessFlags dst_access, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size) +{ + vkCmdPipelineBarrier(cmd_buffer, + src_flags, dst_flags, + 0, 0, NULL, + 1, &(VkBufferMemoryBarrier) { + .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, + .pNext = NULL, + .srcAccessMask = src_access, + .dstAccessMask = dst_access, + .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .buffer = buffer, + .offset = offset, + .size = size, + }, + 0, NULL); +} + int main(int argc, char *argv[]) { @@ -1481,8 +1508,22 @@ main(int argc, char *argv[]) struct ubo ubo; mat4_identity(ubo.projection); mat4_frustum_vk(ubo.projection, -1.0, 1.0, -h, +h, 5.0f, 60.0f); + + buffer_barrier(swap_chain_data[index].cmd_buffer, + VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, + VK_PIPELINE_STAGE_TRANSFER_BIT, + 0, 0, + ubo_buffer, 0, sizeof(ubo)); + vkCmdUpdateBuffer(swap_chain_data[index].cmd_buffer, ubo_buffer, 0, sizeof(ubo), &ubo); + buffer_barrier(swap_chain_data[index].cmd_buffer, + VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, + VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_UNIFORM_READ_BIT, + ubo_buffer, 0, sizeof(ubo)); + /* Translate and rotate the view */ float view[16]; mat4_identity(view); |