[Mesa-dev] [PATCH mesa 1/9] vulkan: Add KHR_display extension using DRM [v8]

Jason Ekstrand jason at jlekstrand.net
Wed Jun 13 21:37:12 UTC 2018


I'm trusting that not much changed other than what was explicitly called
out.  I didn't want to re-read in *that* much detail again. :-)

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>



On Mon, Jun 11, 2018 at 10:39 PM, Keith Packard <keithp at keithp.com> wrote:

> This adds support for the KHR_display extension support to the vulkan
> WSI layer. Driver support will be added separately.
>
> v2:
>         * fix double ;; in wsi_common_display.c
>
>         * Move mode list from wsi_display to wsi_display_connector
>
>         * Fix scope for wsi_display_mode andwsi_display_connector
>           allocs
>
>         * Switch all allocations to vk_zalloc instead of vk_alloc.
>
>         * Fix DRM failure in
>           wsi_display_get_physical_device_display_properties
>
>           When DRM fails, or when we don't have a master fd
>           (presumably due to application errors), just return 0
>           properties from this function, which is at least a valid
>           response.
>
>         * Use vk_outarray for all property queries
>
>           This is a bit less error-prone than open-coding the same
>           stuff.
>
>         * Remove VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR from surface caps
>
>           Until we have multi-plane support, we shouldn't pretend to
>           have any multi-plane semantics, even if undefined.
>
>         Suggested-by: Jason Ekstrand <jason at jlekstrand.net>
>
>         * Simplify addition of VK_USE_PLATFORM_DISPLAY_KHR to
>           vulkan_wsi_args
>
>         Suggested-by: Eric Engestrom <eric.engestrom at imgtec.com>
>
> v3:
>         Add separate 'display_fd' and 'render_fd' arguments to
>         wsi_device_init API. This allows drivers to use different FDs
>         for the different aspects of the device.
>
>         Use largest mode as display size when no preferred mode.
>
>         If the display doesn't provide a preferred mode, we'll assume
>         that the largest supported mode is the "physical size" of the
>         device and report that.
>
> v4:
>         Make wsi_image_state enumeration values uppercase.
>         Follow more common mesa conventions.
>
>         Remove 'render_fd' from wsi_device_init API.  The
>         wsi_common_display code doesn't use this fd at all, so stop
>         passing it in. This avoids any potential confusion over which
>         fd to use when creating display-relative object handles.
>
>         Remove call to wsi_create_prime_image which would never have
>         been reached as the necessary condition (use_prime_blit) is
>         never set.
>
>         whitespace cleanups in wsi_common_display.c
>
>         Suggested-by: Jason Ekstrand <jason at jlekstrand.net>
>
>         Add depth/bpp info to available surface formats.  Instead of
>         hard-coding depth 24 bpp 32 in the drmModeAddFB call, use the
>         requested format to find suitable values.
>
>         Destroy kernel buffers and FBs when swapchain is destroyed. We
>         were leaking both of these kernel objects across swapchain
>         destruction.
>
>         Note that wsi_display_wait_for_event waits for anything to
>         happen.  wsi_display_wait_for_event is simply a yield so that
>         the caller can then check to see if the desired state change
>         has occurred.
>
>         Record swapchain failures in chain for later return. If some
>         asynchronous swapchain activity fails, we need to tell the
>         application eventually. Record the failure in the swapchain
>         and report it at the next acquire_next_image or queue_present
>         call.
>
>         Fix error returns from wsi_display_setup_connector.  If a
>         malloc failed, then the result should be
>         VK_ERROR_OUT_OF_HOST_MEMORY. Otherwise, the associated ioctl
>         failed and we're either VT switched away, or our lease has
>         been revoked, in which case we should return
>         VK_ERROR_OUT_OF_DATE_KHR.
>
>         Make sure both sides of if/else brace use matches
>
>         Note that we assume drmModeSetCrtc is synchronous. Add a
>         comment explaining why we can idle any previous displayed
>         image as soon as the mode set returns.
>
>         Note that EACCES from drmModePageFlip means VT inactive.  When
>         vt switched away drmModePageFlip returns EACCES. Poll once a
>         second waiting until we get some other return value back.
>
>         Clean up after alloc failure in
>         wsi_display_surface_create_swapchain. Destroy any created
>         images, free the swapchain.
>
>         Remove physical_device from wsi_display_init_wsi. We never
>         need this value, so remove it from the API and from the
>         internal wsi_display structure.
>
>         Use drmModeAddFB2 in wsi_display_image_init.  This takes a drm
>         format instead of depth/bpp, which provides more control over
>         the format of the data.
>
> v5:
>         Set the 'currentStackIndex' member of the
>         VkDisplayPlanePropertiesKHR record to zero, instead of
>         indexing across all displays. This value is the stack depth of
>         the plane within an individual display, and as the current
>         code supports only a single plane per display, should be set
>         to zero for all elements
>
>         Discovered-by: David Mao <David.Mao at amd.com>
>
> v6:
>         Remove 'platform_display' bits from the build and use the
>         existing 'platform_drm' instead.
>
> v7:
>         Ensure VK_ICD_WSI_PLATFORM_MAX is large enough by
>         setting to VK_ICD_WSI_PLATFORM_DISPLAY + 1
>
> v8:
>         Simplify wsi_device_init failure from wsi_display_init_wsi
>         by using the same pattern as the other wsi layers.
>
>     Adopt Jason Ekstrand's white space and variable declaration
>         suggestions. Declare variables at first use, eliminate extra
>         whitespace between types and names, add list iterator helpers,
>         switch to lower-case list_ macros.
>
>     Respond to Jason's April 8 review:
>
>         * Create a function to convert relative to absolute timeouts
>           to catch overflow issues in one place
>
>         * use VK_NULL_HANDLE to clear prop->currentDisplay
>
>         * Get rid of available_present_modes array.
>
>         * return OUT_OF_DATE_KHR when display_queue_next called after
>           display has been released.
>
>         * Make errors from mode setting fatal in display_queue_next
>
>         * Remove duplicate pthread_mutex_init call
>
>         * Add wsi_init_pthread_cond_monotonic helper function to
>           isolate pthread error handling from wsi_display_init_wsi
>
>         Suggested-by: Jason Ekstrand <jason.ekstrand at intel.com>
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
> ---
>  src/amd/vulkan/radv_device.c        |    8 +
>  src/amd/vulkan/radv_private.h       |    1 +
>  src/amd/vulkan/radv_wsi.c           |    3 +-
>  src/intel/vulkan/anv_device.c       |    4 +
>  src/intel/vulkan/anv_private.h      |    1 +
>  src/intel/vulkan/anv_wsi.c          |    3 +-
>  src/vulkan/Makefile.am              |    7 +
>  src/vulkan/Makefile.sources         |    4 +
>  src/vulkan/wsi/meson.build          |    8 +
>  src/vulkan/wsi/wsi_common.c         |   12 +-
>  src/vulkan/wsi/wsi_common.h         |    5 +-
>  src/vulkan/wsi/wsi_common_display.c | 1432 +++++++++++++++++++++++++++
>  src/vulkan/wsi/wsi_common_display.h |   77 ++
>  src/vulkan/wsi/wsi_common_private.h |    9 +
>  14 files changed, 1569 insertions(+), 5 deletions(-)
>  create mode 100644 src/vulkan/wsi/wsi_common_display.c
>  create mode 100644 src/vulkan/wsi/wsi_common_display.h
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180613/9bdf99b6/attachment-0001.html>


More information about the mesa-dev mailing list