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

Grazvydas Ignotas notasas at gmail.com
Sat Nov 18 17:02:34 UTC 2017


On Sat, Nov 18, 2017 at 3:06 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> On Fri, Nov 17, 2017 at 2:18 PM, Grazvydas Ignotas <notasas at gmail.com>
> wrote:
>>
>> I've tested this branch (rx470 + hd530) and it's only partially working:
>> - display on amd, radv: always fails with "offscreen:
>> wsi/wsi_common.c:172: select_memory_type: Assertion `!"No memory type
>> found"' failed."
>> - display on amd, anv: misrenders. For SaschaWillems, only
>> multisampling, subpasses and triangle renders, other demos show black
>> window with only text (fps counter and help) visible
>> - display on intel, radv: same "No memory type found"'
>> - display on intel, anv: seems to be ok
>
>
> Thanks for testing!  I've got a HSW+radeon box at home.  I'll see if I can
> get it fixed early next week.  I did find a couple bugs by inspection when I
> was working on getting modifiers working today.  I've re-pushed if you feel
> like trying again.  Otherwise, I'll see if I can repro on my box.

Seems to be the same as before. Assertion `!"No memory type found"'
starts hitting at "vulkan/wsi: Do image creation in common code".

Gražvydas

>
> --Jason
>
>>
>> Gražvydas
>>
>> On Fri, Nov 17, 2017 at 4:44 AM, Jason Ekstrand <jason at jlekstrand.net>
>> wrote:
>> > 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
>> >>
>> >
>> >
>> > _______________________________________________
>> > mesa-dev mailing list
>> > mesa-dev at lists.freedesktop.org
>> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>> >
>
>


More information about the mesa-dev mailing list