Hi Lionel, On 12 May 2017 at 10:52, Lionel Landwerlin <[email protected]> wrote: > On 05/05/17 17:47, Daniel Stone wrote: >> @@ -535,7 +555,7 @@ wsi_wl_swapchain_acquire_next_image(struct >> wsi_swapchain *wsi_chain, >> { >> struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain >> *)wsi_chain; >> - int ret = wl_display_dispatch_queue_pending(chain->display->display, >> + int ret = >> wl_display_dispatch_queue_pending(chain->display->wl_display, >> chain->queue); > > I'm not a wayland expert, so this might be a dumb question. > Why do you keep using chain->queue instead of chain->display->queue in a few > places?
Thanks for looking at this! display->queue is only for use during display initialisation; as we only have one path to create the wsi_wl_display (and know objects will not send events outside of that path), putting an object on display->queue guarantees that it will fire in the thread actually performing display initialisation. OTOH, for each swapchain, we have no guarantee that two threads don't try to enter vkAcquireNextImageKHR / vkQueuePresentKHR simultaneously, on different swapchains. This is entirely legal, but if they share a single display queue, there is a risk that each thread will starve the other of events. Hence, each swapchain gains its own queue (swapchain usage is required to be externally synchronised, so per-swapchain guarantees we have no cross-thread issues), along with the per-display queues. Cheers, Daniel _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
