X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fintel%2Fvulkan%2Fanv_wsi.c;h=20094f93e1f066866f5470e2056bc57713002969;hb=68df93ecbcee6215ac49e0c6f62ae818d2bc9962;hp=6f5aaf6b7044f7ec4701fbe469ff71852fc48a97;hpb=516dfb34e10ae178b9754ce7fe22b7e88193440f;p=mesa.git diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c index 6f5aaf6b704..20094f93e1f 100644 --- a/src/intel/vulkan/anv_wsi.c +++ b/src/intel/vulkan/anv_wsi.c @@ -26,13 +26,6 @@ #include "vk_format_info.h" #include "vk_util.h" -#ifdef VK_USE_PLATFORM_WAYLAND_KHR -#define WSI_CB(x) .x = anv_##x -static const struct wsi_callbacks wsi_cbs = { - WSI_CB(GetPhysicalDeviceFormatProperties), -}; -#endif - static PFN_vkVoidFunction anv_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName) { @@ -40,10 +33,11 @@ anv_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName) return anv_lookup_entrypoint(&physical_device->info, pName); } -static uint32_t -anv_wsi_queue_get_family_index(VkQueue queue) +static uint64_t +anv_wsi_image_get_modifier(VkImage _image) { - return 0; + ANV_FROM_HANDLE(anv_image, image, _image); + return image->drm_format_mod; } VkResult @@ -51,30 +45,15 @@ anv_init_wsi(struct anv_physical_device *physical_device) { VkResult result; - wsi_device_init(&physical_device->wsi_device, - anv_physical_device_to_handle(physical_device), - anv_wsi_proc_addr); - - physical_device->wsi_device.queue_get_family_index = - anv_wsi_queue_get_family_index; - -#ifdef VK_USE_PLATFORM_XCB_KHR - result = wsi_x11_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); + result = wsi_device_init(&physical_device->wsi_device, + anv_physical_device_to_handle(physical_device), + anv_wsi_proc_addr, + &physical_device->instance->alloc); if (result != VK_SUCCESS) return result; -#endif -#ifdef VK_USE_PLATFORM_WAYLAND_KHR - result = wsi_wl_init_wsi(&physical_device->wsi_device, &physical_device->instance->alloc, - anv_physical_device_to_handle(physical_device), - &wsi_cbs); - if (result != VK_SUCCESS) { -#ifdef VK_USE_PLATFORM_XCB_KHR - wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); -#endif - return result; - } -#endif + physical_device->wsi_device.supports_modifiers = true; + physical_device->wsi_device.image_get_modifier = anv_wsi_image_get_modifier; return VK_SUCCESS; } @@ -82,12 +61,8 @@ anv_init_wsi(struct anv_physical_device *physical_device) void anv_finish_wsi(struct anv_physical_device *physical_device) { -#ifdef VK_USE_PLATFORM_WAYLAND_KHR - wsi_wl_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); -#endif -#ifdef VK_USE_PLATFORM_XCB_KHR - wsi_x11_finish_wsi(&physical_device->wsi_device, &physical_device->instance->alloc); -#endif + wsi_device_finish(&physical_device->wsi_device, + &physical_device->instance->alloc); } void anv_DestroySurfaceKHR( @@ -107,28 +82,29 @@ void anv_DestroySurfaceKHR( VkResult anv_GetPhysicalDeviceSurfaceSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, VkBool32* pSupported) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_support(surface, &device->wsi_device, - &device->instance->alloc, - queueFamilyIndex, device->local_fd, true, pSupported); + return wsi_common_get_surface_support(&device->wsi_device, + device->local_fd, + queueFamilyIndex, + surface, + &device->instance->alloc, + pSupported); } VkResult anv_GetPhysicalDeviceSurfaceCapabilitiesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_capabilities(surface, pSurfaceCapabilities); + return wsi_common_get_surface_capabilities(&device->wsi_device, + surface, + pSurfaceCapabilities); } VkResult anv_GetPhysicalDeviceSurfaceCapabilities2KHR( @@ -137,25 +113,22 @@ VkResult anv_GetPhysicalDeviceSurfaceCapabilities2KHR( VkSurfaceCapabilities2KHR* pSurfaceCapabilities) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, pSurfaceInfo->surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_capabilities2(surface, pSurfaceInfo->pNext, - pSurfaceCapabilities); + return wsi_common_get_surface_capabilities2(&device->wsi_device, + pSurfaceInfo, + pSurfaceCapabilities); } VkResult anv_GetPhysicalDeviceSurfaceFormatsKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_formats(surface, &device->wsi_device, pSurfaceFormatCount, - pSurfaceFormats); + return wsi_common_get_surface_formats(&device->wsi_device, surface, + pSurfaceFormatCount, pSurfaceFormats); } VkResult anv_GetPhysicalDeviceSurfaceFormats2KHR( @@ -165,25 +138,22 @@ VkResult anv_GetPhysicalDeviceSurfaceFormats2KHR( VkSurfaceFormat2KHR* pSurfaceFormats) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, pSurfaceInfo->surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_formats2(surface, &device->wsi_device, pSurfaceInfo->pNext, - pSurfaceFormatCount, pSurfaceFormats); + return wsi_common_get_surface_formats2(&device->wsi_device, pSurfaceInfo, + pSurfaceFormatCount, pSurfaceFormats); } VkResult anv_GetPhysicalDeviceSurfacePresentModesKHR( VkPhysicalDevice physicalDevice, - VkSurfaceKHR _surface, + VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) { ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice); - ICD_FROM_HANDLE(VkIcdSurfaceBase, surface, _surface); - struct wsi_interface *iface = device->wsi_device.wsi[surface->platform]; - return iface->get_present_modes(surface, pPresentModeCount, - pPresentModes); + return wsi_common_get_surface_present_modes(&device->wsi_device, surface, + pPresentModeCount, + pPresentModes); } VkResult anv_CreateSwapchainKHR( @@ -272,3 +242,25 @@ VkResult anv_QueuePresentKHR( _queue, 0, pPresentInfo); } + +VkResult anv_GetDeviceGroupPresentCapabilitiesKHR( + VkDevice device, + VkDeviceGroupPresentCapabilitiesKHR* pCapabilities) +{ + memset(pCapabilities->presentMask, 0, + sizeof(pCapabilities->presentMask)); + pCapabilities->presentMask[0] = 0x1; + pCapabilities->modes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR; + + return VK_SUCCESS; +} + +VkResult anv_GetDeviceGroupSurfacePresentModesKHR( + VkDevice device, + VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR* pModes) +{ + *pModes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR; + + return VK_SUCCESS; +}