X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Famd%2Fvulkan%2Fradv_wsi.c;h=fadb68a9504e02ca5b1e6c0adca92131c9e5947d;hb=6970a9a6ca9ea26a9e6cf968d3fec3565bef2e9b;hp=aa06944e95eccb9180e75e7ca10f13dede801055;hpb=2e3e55110b0b528f23339453e9acf73513dfd6bb;p=mesa.git diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index aa06944e95e..fadb68a9504 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -32,47 +32,25 @@ static PFN_vkVoidFunction radv_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName) { - return radv_lookup_entrypoint(pName); + return radv_lookup_entrypoint_unchecked(pName); } VkResult radv_init_wsi(struct radv_physical_device *physical_device) { - VkResult result; - - 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); - 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, - radv_physical_device_to_handle(physical_device)); - 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 - - return VK_SUCCESS; + return wsi_device_init(&physical_device->wsi_device, + radv_physical_device_to_handle(physical_device), + radv_wsi_proc_addr, + &physical_device->instance->alloc, + physical_device->master_fd, + &physical_device->instance->dri_options); } void radv_finish_wsi(struct radv_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 radv_DestroySurfaceKHR( @@ -95,10 +73,8 @@ VkResult radv_GetPhysicalDeviceSurfaceSupportKHR( RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); return wsi_common_get_surface_support(&device->wsi_device, - device->local_fd, queueFamilyIndex, surface, - &device->instance->alloc, pSupported); } @@ -114,6 +90,30 @@ VkResult radv_GetPhysicalDeviceSurfaceCapabilitiesKHR( pSurfaceCapabilities); } +VkResult radv_GetPhysicalDeviceSurfaceCapabilities2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + VkSurfaceCapabilities2KHR* pSurfaceCapabilities) +{ + RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); + + return wsi_common_get_surface_capabilities2(&device->wsi_device, + pSurfaceInfo, + pSurfaceCapabilities); +} + +VkResult radv_GetPhysicalDeviceSurfaceCapabilities2EXT( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + VkSurfaceCapabilities2EXT* pSurfaceCapabilities) +{ + RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); + + return wsi_common_get_surface_capabilities2ext(&device->wsi_device, + surface, + pSurfaceCapabilities); +} + VkResult radv_GetPhysicalDeviceSurfaceFormatsKHR( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, @@ -128,6 +128,20 @@ VkResult radv_GetPhysicalDeviceSurfaceFormatsKHR( pSurfaceFormats); } +VkResult radv_GetPhysicalDeviceSurfaceFormats2KHR( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, + uint32_t* pSurfaceFormatCount, + VkSurfaceFormat2KHR* pSurfaceFormats) +{ + RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); + + return wsi_common_get_surface_formats2(&device->wsi_device, + pSurfaceInfo, + pSurfaceFormatCount, + pSurfaceFormats); +} + VkResult radv_GetPhysicalDeviceSurfacePresentModesKHR( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, @@ -157,7 +171,6 @@ VkResult radv_CreateSwapchainKHR( return wsi_common_create_swapchain(&device->physical_device->wsi_device, radv_device_to_handle(device), - device->physical_device->local_fd, pCreateInfo, alloc, pSwapchain); @@ -191,27 +204,47 @@ VkResult radv_GetSwapchainImagesKHR( } VkResult radv_AcquireNextImageKHR( - VkDevice _device, + VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, - VkFence _fence, + VkFence fence, + uint32_t* pImageIndex) +{ + VkAcquireNextImageInfoKHR acquire_info = { + .sType = VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR, + .swapchain = swapchain, + .timeout = timeout, + .semaphore = semaphore, + .fence = fence, + .deviceMask = 0, + }; + + return radv_AcquireNextImage2KHR(device, &acquire_info, pImageIndex); +} + +VkResult radv_AcquireNextImage2KHR( + VkDevice _device, + const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex) { RADV_FROM_HANDLE(radv_device, device, _device); struct radv_physical_device *pdevice = device->physical_device; - RADV_FROM_HANDLE(radv_fence, fence, _fence); + RADV_FROM_HANDLE(radv_fence, fence, pAcquireInfo->fence); - VkResult result = wsi_common_acquire_next_image(&pdevice->wsi_device, - _device, - swapchain, - timeout, - semaphore, - pImageIndex); + VkResult result = wsi_common_acquire_next_image2(&pdevice->wsi_device, + _device, + pAcquireInfo, + pImageIndex); if (fence && (result == VK_SUCCESS || result == VK_SUBOPTIMAL_KHR)) { - fence->submitted = true; - fence->signalled = true; + if (fence->fence) + device->ws->signal_fence(fence->fence); + if (fence->temp_syncobj) { + device->ws->signal_syncobj(device->ws, fence->temp_syncobj); + } else if (fence->syncobj) { + device->ws->signal_syncobj(device->ws, fence->syncobj); + } } return result; } @@ -227,3 +260,39 @@ VkResult radv_QueuePresentKHR( queue->queue_family_index, pPresentInfo); } + + +VkResult radv_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 radv_GetDeviceGroupSurfacePresentModesKHR( + VkDevice device, + VkSurfaceKHR surface, + VkDeviceGroupPresentModeFlagsKHR* pModes) +{ + *pModes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR; + + return VK_SUCCESS; +} + +VkResult radv_GetPhysicalDevicePresentRectanglesKHR( + VkPhysicalDevice physicalDevice, + VkSurfaceKHR surface, + uint32_t* pRectCount, + VkRect2D* pRects) +{ + RADV_FROM_HANDLE(radv_physical_device, device, physicalDevice); + + return wsi_common_get_present_rectangles(&device->wsi_device, + surface, + pRectCount, pRects); +}