mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 07:50:11 +01:00
vulkan/wsi: Provide the implicitly synchronized BO to vkQueueSubmit
This lets us treat the implicit synchronization that we need for X11 and Wayland like a semaphore. Instead of trusting the driver to somehow figure out when that memory object needs to be signaled, we provide an explicit point where the driver can set EXEC_OBJECT_WRITE and signal the dma_fence on the BO. Without this, we have to somehow track inside the driver when WSI buffers are actually used to avoid extra synchronization dependencies. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
d07ed0c9c9
commit
48e23a6406
2 changed files with 19 additions and 3 deletions
|
|
@ -1042,9 +1042,18 @@ wsi_common_queue_present(const struct wsi_device *wsi,
|
|||
wsi->ResetFences(device, 1, &swapchain->fences[image_index]);
|
||||
}
|
||||
|
||||
struct wsi_image *image =
|
||||
swapchain->get_wsi_image(swapchain, image_index);
|
||||
|
||||
struct wsi_memory_signal_submit_info mem_signal = {
|
||||
.sType = VK_STRUCTURE_TYPE_WSI_MEMORY_SIGNAL_SUBMIT_INFO_MESA,
|
||||
.pNext = NULL,
|
||||
.memory = image->memory,
|
||||
};
|
||||
|
||||
VkSubmitInfo submit_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
|
||||
.pNext = NULL,
|
||||
.pNext = &mem_signal,
|
||||
};
|
||||
|
||||
VkPipelineStageFlags *stage_flags = NULL;
|
||||
|
|
@ -1075,11 +1084,10 @@ wsi_common_queue_present(const struct wsi_device *wsi,
|
|||
/* If we are using prime blits, we need to perform the blit now. The
|
||||
* command buffer is attached to the image.
|
||||
*/
|
||||
struct wsi_image *image =
|
||||
swapchain->get_wsi_image(swapchain, image_index);
|
||||
submit_info.commandBufferCount = 1;
|
||||
submit_info.pCommandBuffers =
|
||||
&image->prime.blit_cmd_buffers[queue_family_index];
|
||||
mem_signal.memory = image->prime.memory;
|
||||
}
|
||||
|
||||
result = wsi->QueueSubmit(queue, 1, &submit_info, swapchain->fences[image_index]);
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#define VK_STRUCTURE_TYPE_WSI_MEMORY_ALLOCATE_INFO_MESA (VkStructureType)1000001003
|
||||
#define VK_STRUCTURE_TYPE_WSI_FORMAT_MODIFIER_PROPERTIES_LIST_MESA (VkStructureType)1000001004
|
||||
#define VK_STRUCTURE_TYPE_WSI_SURFACE_SUPPORTED_COUNTERS_MESA (VkStructureType)1000001005
|
||||
#define VK_STRUCTURE_TYPE_WSI_MEMORY_SIGNAL_SUBMIT_INFO_MESA (VkStructureType)1000001006
|
||||
|
||||
struct wsi_image_create_info {
|
||||
VkStructureType sType;
|
||||
|
|
@ -76,6 +77,13 @@ struct wsi_surface_supported_counters {
|
|||
|
||||
};
|
||||
|
||||
/* To be chained into VkSubmitInfo */
|
||||
struct wsi_memory_signal_submit_info {
|
||||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
VkDeviceMemory memory;
|
||||
};
|
||||
|
||||
struct wsi_fence {
|
||||
VkDevice device;
|
||||
const struct wsi_device *wsi_device;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue