diff options
author | Bas Nieuwenhuizen <[email protected]> | 2019-04-17 01:30:49 +0200 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2019-04-23 23:49:39 +0000 |
commit | f2e0f5c3c44967da8a10ac363ab667e07ea03c28 (patch) | |
tree | 7798bceec1b829068e63267d67f423288759f75e /src/vulkan/wsi/wsi_common.c | |
parent | 3c2e8267d0b2300963d9a04aa4c46058ef448e49 (diff) |
vulkan/wsi: Add X11 adaptive sync support based on dri options.
The dri options are optional. When the dri options are not provided
the WSI will not use adaptive sync.
FWIW I think for xf86-video-amdgpu this still requires an X11 config
option, so only people who opt in can get possible regressions from this.
So then the remaining question is: why do this in the WSI?
It has been suggested in another MR that the application sets this.
However, I disagree with that as I don't think we'll ever get a
reasonable set of applications setting it.
The next questions is whether this can be a layer. It definitely
can be as implemented now. However, I think this generally fits
well with the function of the WSI. Furthemore, for e.g. the DISPLAY
WSI this is much harder to do in a layer.
Of course, most of the WSI could almost be a layer, but I think
this still fits best in the WSI.
Acked-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/vulkan/wsi/wsi_common.c')
-rw-r--r-- | src/vulkan/wsi/wsi_common.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index 66cc4500cb9..d44b9fad542 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -24,6 +24,7 @@ #include "wsi_common_private.h" #include "drm-uapi/drm_fourcc.h" #include "util/macros.h" +#include "util/xmlconfig.h" #include "vk_util.h" #include <time.h> @@ -37,7 +38,8 @@ wsi_device_init(struct wsi_device *wsi, VkPhysicalDevice pdevice, WSI_FN_GetPhysicalDeviceProcAddr proc_addr, const VkAllocationCallbacks *alloc, - int display_fd) + int display_fd, + const struct driOptionCache *dri_options) { const char *present_mode; VkResult result; @@ -129,6 +131,12 @@ wsi_device_init(struct wsi_device *wsi, } } + if (dri_options) { + if (driCheckOption(dri_options, "adaptive_sync", DRI_BOOL)) + wsi->enable_adaptive_sync = driQueryOptionb(dri_options, + "adaptive_sync"); + } + return VK_SUCCESS; fail: |