From: Jason Ekstrand Date: Thu, 16 Nov 2017 02:50:44 +0000 (-0800) Subject: vulkan/wsi: Add a wsi_device_init function X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=commitdiff_plain;h=764fc1643c10ca1f336a99ddbe727313c995b6bb vulkan/wsi: Add a wsi_device_init function This gives the opportunity to collect some function pointers if we'd like which will be very useful in future. Reviewed-by: Dave Airlie Reviewed-by: Chad Versace --- diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index f5f9a3fbeba..247f7cce773 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -34,12 +34,20 @@ MAYBE_UNUSED static const struct wsi_callbacks wsi_cbs = { WSI_CB(GetPhysicalDeviceFormatProperties), }; +static PFN_vkVoidFunction +radv_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName) +{ + return radv_lookup_entrypoint(pName); +} + VkResult radv_init_wsi(struct radv_physical_device *physical_device) { VkResult result; - memset(physical_device->wsi_device.wsi, 0, sizeof(physical_device->wsi_device.wsi)); + wsi_device_init(&physical_device->wsi_device, + radv_physical_device_to_handle(physical_device), + radv_wsi_proc_addr); #ifdef VK_USE_PLATFORM_XCB_KHR result = wsi_x11_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c index d8c4885b5b8..f898a0759d0 100644 --- a/src/intel/vulkan/anv_wsi.c +++ b/src/intel/vulkan/anv_wsi.c @@ -33,12 +33,21 @@ static const struct wsi_callbacks wsi_cbs = { }; #endif +static PFN_vkVoidFunction +anv_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName) +{ + ANV_FROM_HANDLE(anv_physical_device, physical_device, physicalDevice); + return anv_lookup_entrypoint(&physical_device->info, pName); +} + VkResult anv_init_wsi(struct anv_physical_device *physical_device) { VkResult result; - memset(physical_device->wsi_device.wsi, 0, sizeof(physical_device->wsi_device.wsi)); + wsi_device_init(&physical_device->wsi_device, + anv_physical_device_to_handle(physical_device), + anv_wsi_proc_addr); #ifdef VK_USE_PLATFORM_XCB_KHR result = wsi_x11_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); diff --git a/src/vulkan/Makefile.sources b/src/vulkan/Makefile.sources index 2cf7218e926..44cba8bde3c 100644 --- a/src/vulkan/Makefile.sources +++ b/src/vulkan/Makefile.sources @@ -1,5 +1,6 @@ VULKAN_WSI_FILES := \ + wsi/wsi_common.c \ wsi/wsi_common.h \ wsi/wsi_common_queue.h diff --git a/src/vulkan/wsi/meson.build b/src/vulkan/wsi/meson.build index 3aa02d5e63f..bfec376e9a7 100644 --- a/src/vulkan/wsi/meson.build +++ b/src/vulkan/wsi/meson.build @@ -22,6 +22,7 @@ vulkan_wsi_args = [] vulkan_wsi_deps = [] files_vulkan_wsi = files( + 'wsi_common.c', 'wsi_common.h', 'wsi_common_queue.h', ) diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c new file mode 100644 index 00000000000..8c883b4daf0 --- /dev/null +++ b/src/vulkan/wsi/wsi_common.c @@ -0,0 +1,32 @@ +/* + * Copyright © 2017 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "wsi_common.h" + +void +wsi_device_init(struct wsi_device *wsi, + VkPhysicalDevice pdevice, + WSI_FN_GetPhysicalDeviceProcAddr proc_addr) +{ + memset(wsi, 0, sizeof(*wsi)); +} diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h index 565219d4e26..41d2c6d1128 100644 --- a/src/vulkan/wsi/wsi_common.h +++ b/src/vulkan/wsi/wsi_common.h @@ -121,6 +121,13 @@ struct wsi_device { struct wsi_interface * wsi[VK_ICD_WSI_PLATFORM_MAX]; }; +typedef PFN_vkVoidFunction (VKAPI_PTR *WSI_FN_GetPhysicalDeviceProcAddr)(VkPhysicalDevice physicalDevice, const char* pName); + +void +wsi_device_init(struct wsi_device *wsi, + VkPhysicalDevice pdevice, + WSI_FN_GetPhysicalDeviceProcAddr proc_addr); + #define WSI_CB(cb) PFN_vk##cb cb struct wsi_callbacks { WSI_CB(GetPhysicalDeviceFormatProperties);