aux/vk: Add helper for adding image memory barriers

This commit is contained in:
Moses Turner 2022-02-18 19:59:14 -06:00
parent 5a2088ee3e
commit 727c087366
2 changed files with 57 additions and 1 deletions
src/xrt/auxiliary/vk

View file

@ -2054,3 +2054,41 @@ vk_locked_submit(struct vk_bundle *vk, VkQueue queue, uint32_t count, const VkSu
os_mutex_unlock(&vk->queue_mutex);
return ret;
}
void
vk_insert_image_memory_barrier(struct vk_bundle *vk,
VkCommandBuffer cmdbuffer,
VkImage image,
VkAccessFlags srcAccessMask,
VkAccessFlags dstAccessMask,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
VkImageSubresourceRange subresourceRange)
{
VkImageMemoryBarrier image_memory_barrier = {
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.srcAccessMask = srcAccessMask,
.dstAccessMask = dstAccessMask,
.oldLayout = oldImageLayout,
.newLayout = newImageLayout,
.image = image,
.subresourceRange = subresourceRange,
};
vk->vkCmdPipelineBarrier( //
cmdbuffer, // commandBuffer
srcStageMask, // srcStageMask
dstStageMask, // dstStageMask
0, // dependencyFlags
0, // memoryBarrierCount
NULL, // pMemoryBarriers
0, // bufferMemoryBarrierCount
NULL, // pBufferMemoryBarriers
1, // imageMemoryBarrierCount
&image_memory_barrier); // pImageMemoryBarriers
}

View file

@ -834,7 +834,6 @@ vk_begin_command_buffer(struct vk_bundle *vk, VkCommandBuffer command_buffer);
VkResult
vk_end_command_buffer(struct vk_bundle *vk, VkCommandBuffer command_buffer);
/*
*
* Compositor swapchain image flags helpers, in the vk_compositor_flags.c file.
@ -900,6 +899,25 @@ VkImageAspectFlags
vk_csci_get_image_view_aspect(VkFormat format, enum xrt_swapchain_usage_bits bits);
/*!
*
* Adds barrier to image
*
*/
void
vk_insert_image_memory_barrier(struct vk_bundle *vk,
VkCommandBuffer cmdbuffer,
VkImage image,
VkAccessFlags srcAccessMask,
VkAccessFlags dstAccessMask,
VkImageLayout oldImageLayout,
VkImageLayout newImageLayout,
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
VkImageSubresourceRange subresourceRange);
#ifdef __cplusplus
}
#endif