[Mesa-dev] [PATCH 00/28] vulkan/wsi: Rework WSI to look a lot more like a layer

Jason Ekstrand jason at jlekstrand.net
Fri Nov 17 02:44:02 UTC 2017


I just force-pushed my branch with some changes as per Dave to more
explicitly enable implicit sync when allocating memory objects.

On Thu, Nov 16, 2017 at 1:28 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:

> This patch series is the combined brain-child of Dave and myself.  The
> objective is to rewrite Vulkan WSI to look as much like a layer as possible
> and to reduce the driver <-> WSI interface.  We try very hard to have as
> many of the WSI details as possible in common code and to use standard
> Vulkan interfaces for everything.  Among other things, this means that
> prime support is now implemented in an entirely driver-agnostic way and the
> driver doesn't even know it's happening.  As a side-effect anv now has
> prime support.
>
> Eventually, someone could pull what's left out into a proper layer and we
> could drop WSI support from our drivers entirely.  There are a fiew pieces
> of work that would be required to do this:
>
>  1) Write all of the annoying layer bits.  There are some short-cuts that
>     we can take because we're not in a layer and those will have to go.
>
>  2) Define a VK_MESA_legacy_swapchain_image extension to replace the hack
>     introduced in patch 8.
>
>  3) It looks like modifiers support will land before the official Vulkan
>     extensions get finished.  It will have to be ported to the official
>     extensions.
>
>  4) Figure out what to do about the fence in AcquireNextImage. In a future
>     world of explicit synchronization, we can just import the sync_file
>     from X or the Wayland compositor, but with implicit sync like we have
>     today, it's a bit harder.  Right now, the helper in wsi_common does
>     nothing with it and trusts the caller to handle it.
>
>     The two drivers handle this differently today.  In anv, we do a dummy
>     QueueSubmit to trigger the fence while radv triggers it a bit more
>     manually.  In both cases, we trigger the fence immediately and trust in
>     the GEM's implicit synchronization to sort things out for us.  We can't
>     use the anv method as directly with radv because no queue is passed in
>     so we don't know what queue to use in the dummy QueueSubmit.  (In ANV,
>     we only have the one queue so that isn't a problem.)
>
>
> Dave, I tried to pull patches from your series where practical but, because
> we did things in a different order, it frequently wasn't.  If you want to
> claim credit for any of these patches, just say so and I'll --reset-author
> on them.
>
> The series can be found on freedesktop.org here:
>
> https://cgit.freedesktop.org/~jekstrand/mesa/log/?h=wip/vulkan-wsi-prime
>
>
> Cc: Dave Airlie <airlied at redhat.com>
> Cc: Daniel Stone <daniels at collabora.com>
> Cc: Chad Versace <chadversary at chromium.org>
> Cc: James Jones <jajones at nvidia.com>
>
> Daniel Stone (1):
>   vulkan/wsi: Add a wsi_image structure
>
> Dave Airlie (4):
>   vulkan/wsi: use function ptr definitions from the spec.
>   radv/wsi: drop allocate memory special case
>   radv/wsi: Move the guts of QueuePresent to wsi common
>   vulkan/wsi: move swapchain create/destroy to common code
>
> Jason Ekstrand (23):
>   vulkan/wsi/x11: Handle the geometry check earlier in create_swapchain
>   vulkan/wsi: Add a wsi_device_init function
>   vulkan/wsi: Add wsi_swapchain_init/finish functions
>   vulkan/wsi: Implement prime in a completely generic way
>   anv/image: Add a return value to bind_memory_plane
>   vulkan/wsi: Add a mock image creation extension
>   anv/image: Implement the wsi "extension"
>   radv/image: Implement the wsi "extension"
>   vulkan/wsi: Do image creation in common code
>   vulkan/wsi: Add a WSI_FROM_HANDLE macro
>   vulkan/wsi: Refactor result handling in queue_present
>   vulkan/wsi: Only wait on semaphores on the first swapchain
>   vulkan/wsi: Set a proper pWaitDstStageMask on the dummy submit
>   anv/wsi: Use the common QueuePresent code
>   anv/wsi: Enable prime support
>   vulkan/wsi: Move get_images into common code
>   vulkan/wsi: Move prime blitting into queue_present
>   vulkan/wsi: Add a helper for AcquireNextImage
>   vulkan/wsi: Move wsi_swapchain to wsi_common_private.h
>   vulkan/wsi: Drop the can_handle_different_gpu parameter from
>     get_support
>   vulkan/wsi: Add wrappers for all of the surface queries
>   vulkan/wsi: Drop some unneeded cruft from the API
>   vulkan/wsi: Initialize individual WSI interfaces in wsi_device_init
>
>  src/amd/vulkan/radv_device.c        |  18 +-
>  src/amd/vulkan/radv_image.c         |  15 +-
>  src/amd/vulkan/radv_private.h       |  10 -
>  src/amd/vulkan/radv_wsi.c           | 472 +++-------------------
>  src/intel/vulkan/anv_image.c        |  71 +++-
>  src/intel/vulkan/anv_private.h      |   2 +
>  src/intel/vulkan/anv_wsi.c          | 347 +++-------------
>  src/vulkan/Makefile.sources         |   2 +
>  src/vulkan/wsi/meson.build          |   2 +
>  src/vulkan/wsi/wsi_common.c         | 763 ++++++++++++++++++++++++++++++
> ++++++
>  src/vulkan/wsi/wsi_common.h         | 223 ++++++-----
>  src/vulkan/wsi/wsi_common_private.h | 157 ++++++++
>  src/vulkan/wsi/wsi_common_wayland.c |  90 ++---
>  src/vulkan/wsi/wsi_common_x11.c     | 150 ++-----
>  14 files changed, 1310 insertions(+), 1012 deletions(-)
>  create mode 100644 src/vulkan/wsi/wsi_common.c
>  create mode 100644 src/vulkan/wsi/wsi_common_private.h
>
> --
> 2.5.0.400.gff86faf
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171116/9b86cd71/attachment-0001.html>


More information about the mesa-dev mailing list