diff options
author | Dave Airlie <[email protected]> | 2017-02-19 15:27:47 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2017-02-20 12:53:52 +1000 |
commit | 0a44a680ff702bb4488c345db84a35c190be345e (patch) | |
tree | 96ea720f00a248c704829f38d289d27b4a685915 /src/intel/vulkan | |
parent | 1f6376935bf91aa2e086a66dfe9737d7f4066bee (diff) |
vulkan/wsi/x11: add support to detect if we can support rendering (v3)
This adds support to radv_GetPhysicalDeviceXlibPresentationSupportKHR
and radv_GetPhysicalDeviceXcbPresentationSupportKHR to check if the
local device file descriptor is compatible with the descriptor
retrieved from the X server via DRI3.
This will stop radv binding to an X server until we have prime
support in place. Hopefully apps use this API before trying
to render things.
v2: drop unneeded function, don't leak memory. (jekstrand)
v3: also check in surface_get_support callback.
Reviewed-by: Jason Ekstrand <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/intel/vulkan')
-rw-r--r-- | src/intel/vulkan/Makefile.am | 3 | ||||
-rw-r--r-- | src/intel/vulkan/anv_device.c | 3 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 1 | ||||
-rw-r--r-- | src/intel/vulkan/anv_wsi.c | 2 | ||||
-rw-r--r-- | src/intel/vulkan/anv_wsi_x11.c | 8 |
5 files changed, 12 insertions, 5 deletions
diff --git a/src/intel/vulkan/Makefile.am b/src/intel/vulkan/Makefile.am index 4197b0e77c7..93f2ceb00f1 100644 --- a/src/intel/vulkan/Makefile.am +++ b/src/intel/vulkan/Makefile.am @@ -68,6 +68,7 @@ AM_CPPFLAGS += \ endif AM_CPPFLAGS += \ + $(LIBDRM_CFLAGS) \ $(INTEL_CFLAGS) \ $(VALGRIND_CFLAGS) \ $(DEFINES) @@ -93,7 +94,7 @@ VULKAN_SOURCES = \ $(VULKAN_GENERATED_FILES) \ $(VULKAN_FILES) -VULKAN_LIB_DEPS = +VULKAN_LIB_DEPS = $(LIBDRM_LIBS) if HAVE_PLATFORM_X11 AM_CPPFLAGS += \ diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index cae5feff948..dd2a1ea34ad 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -202,7 +202,7 @@ anv_physical_device_init(struct anv_physical_device *device, isl_device_init(&device->isl_dev, &device->info, swizzled); - close(fd); + device->local_fd = fd; return VK_SUCCESS; fail: @@ -215,6 +215,7 @@ anv_physical_device_finish(struct anv_physical_device *device) { anv_finish_wsi(device); ralloc_free(device->compiler); + close(device->local_fd); } static const VkExtensionProperties global_extensions[] = { diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index da1ca29f64c..82e283171ef 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -532,6 +532,7 @@ struct anv_physical_device { uint8_t uuid[VK_UUID_SIZE]; struct wsi_device wsi_device; + int local_fd; }; struct anv_instance { diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c index 3a366988de8..a69a741723b 100644 --- a/src/intel/vulkan/anv_wsi.c +++ b/src/intel/vulkan/anv_wsi.c @@ -94,7 +94,7 @@ VkResult anv_GetPhysicalDeviceSurfaceSupportKHR( return iface->get_support(surface, &device->wsi_device, &device->instance->alloc, - queueFamilyIndex, pSupported); + queueFamilyIndex, device->local_fd, pSupported); } VkResult anv_GetPhysicalDeviceSurfaceCapabilitiesKHR( diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_x11.c index 60bc568ab0c..30425096a99 100644 --- a/src/intel/vulkan/anv_wsi_x11.c +++ b/src/intel/vulkan/anv_wsi_x11.c @@ -41,7 +41,9 @@ VkBool32 anv_GetPhysicalDeviceXcbPresentationSupportKHR( return wsi_get_physical_device_xcb_presentation_support( &device->wsi_device, &device->instance->alloc, - queueFamilyIndex, connection, visual_id); + queueFamilyIndex, + device->local_fd, + connection, visual_id); } VkBool32 anv_GetPhysicalDeviceXlibPresentationSupportKHR( @@ -55,7 +57,9 @@ VkBool32 anv_GetPhysicalDeviceXlibPresentationSupportKHR( return wsi_get_physical_device_xcb_presentation_support( &device->wsi_device, &device->instance->alloc, - queueFamilyIndex, XGetXCBConnection(dpy), visualID); + queueFamilyIndex, + device->local_fd, + XGetXCBConnection(dpy), visualID); } VkResult anv_CreateXcbSurfaceKHR( |