diff --git a/docs/features.txt b/docs/features.txt index d086ccfd5b6..45cb5535a21 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -592,6 +592,8 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_win32_surface DONE (dzn, lvp) VK_KHR_xcb_surface DONE (anv, dzn, hasvk, hk, lvp, nvk, panvk, radv, tu, v3dv, vn) VK_KHR_xlib_surface DONE (anv, dzn, hasvk, hk, lvp, nvk, panvk, radv, tu, v3dv, vn) + VK_KHR_surface_maintenance1 DONE (anv, hk, lvp, nvk, radv, tu, v3dv, vn) + VK_KHR_swapchain_maintenance1 DONE (anv, hk, lvp, nvk, radv, tu, v3dv, vn) VK_EXT_acquire_xlib_display DONE (anv, hk, lvp, nvk, panvk, radv, tu, v3dv, vn) VK_EXT_attachment_feedback_loop_dynamic_state DONE (anv, lvp, radv, tu, vn) VK_EXT_attachment_feedback_loop_layout DONE (anv, hk, lvp, nvk, radv, tu, v3dv, vn) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index 75ac1aa24d4..7e1ce311e7c 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -14,3 +14,5 @@ VK_EXT_custom_resolve on RADV GL_EXT_shader_pixel_local_storage on Panfrost v6+ sparseResidencyImage2D on panvk v10+ sparseResidencyStandard2DBlockShape on panvk v10+ +VK_KHR_surface_maintenance1 promotion everywhere EXT is exposed +VK_KHR_swapchain_maintenance1 promotion everywhere EXT is exposed diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index 55bc7cc3276..bc335d3717b 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -1137,8 +1137,8 @@ wsi_DestroySwapchainKHR(VkDevice _device, } VKAPI_ATTR VkResult VKAPI_CALL -wsi_ReleaseSwapchainImagesEXT(VkDevice _device, - const VkReleaseSwapchainImagesInfoEXT *pReleaseInfo) +wsi_ReleaseSwapchainImagesKHR(VkDevice _device, + const VkReleaseSwapchainImagesInfoKHR *pReleaseInfo) { VK_FROM_HANDLE(wsi_swapchain, swapchain, pReleaseInfo->swapchain); @@ -1519,8 +1519,8 @@ wsi_common_queue_present(const struct wsi_device *wsi, vk_find_struct_const(pPresentInfo->pNext, PRESENT_ID_KHR); const VkPresentId2KHR *present_ids2 = vk_find_struct_const(pPresentInfo->pNext, PRESENT_ID_2_KHR); - const VkSwapchainPresentFenceInfoEXT *present_fence_info = - vk_find_struct_const(pPresentInfo->pNext, SWAPCHAIN_PRESENT_FENCE_INFO_EXT); + const VkSwapchainPresentFenceInfoKHR *present_fence_info = + vk_find_struct_const(pPresentInfo->pNext, SWAPCHAIN_PRESENT_FENCE_INFO_KHR); /* Gather up all the semaphores and fences we need to signal per-image */ STACK_ARRAY(struct wsi_image_signal_info, image_signal_infos, @@ -1726,8 +1726,8 @@ wsi_common_queue_present(const struct wsi_device *wsi, /* Finally, we can present */ const VkPresentRegionsKHR *regions = vk_find_struct_const(pPresentInfo->pNext, PRESENT_REGIONS_KHR); - const VkSwapchainPresentModeInfoEXT *present_mode_info = - vk_find_struct_const(pPresentInfo->pNext, SWAPCHAIN_PRESENT_MODE_INFO_EXT); + const VkSwapchainPresentModeInfoKHR *present_mode_info = + vk_find_struct_const(pPresentInfo->pNext, SWAPCHAIN_PRESENT_MODE_INFO_KHR); for (uint32_t i = 0; i < pPresentInfo->swapchainCount; i++) { VK_FROM_HANDLE(wsi_swapchain, swapchain, pPresentInfo->pSwapchains[i]); diff --git a/src/vulkan/wsi/wsi_common_display.c b/src/vulkan/wsi/wsi_common_display.c index 12d357a9c04..4c9451a6d00 100644 --- a/src/vulkan/wsi/wsi_common_display.c +++ b/src/vulkan/wsi/wsi_common_display.c @@ -1264,8 +1264,8 @@ wsi_display_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface, struct wsi_surface_supported_counters *counters = vk_find_struct( caps->pNext, WSI_SURFACE_SUPPORTED_COUNTERS_MESA); - const VkSurfacePresentModeEXT *present_mode = - vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_EXT); + const VkSurfacePresentModeKHR *present_mode = + vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_KHR); if (counters) { result = wsi_display_surface_get_surface_counters(&counters->supported_surface_counters); @@ -1279,9 +1279,9 @@ wsi_display_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR: { /* Unsupported. */ - VkSurfacePresentScalingCapabilitiesEXT *scaling = (void *)ext; + VkSurfacePresentScalingCapabilitiesKHR *scaling = (void *)ext; scaling->supportedPresentScaling = 0; scaling->supportedPresentGravityX = 0; scaling->supportedPresentGravityY = 0; @@ -1290,9 +1290,9 @@ wsi_display_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR: { /* We only support FIFO. */ - VkSurfacePresentModeCompatibilityEXT *compat = (void *)ext; + VkSurfacePresentModeCompatibilityKHR *compat = (void *)ext; if (compat->pPresentModes) { if (compat->presentModeCount) { assert(present_mode); diff --git a/src/vulkan/wsi/wsi_common_metal.c b/src/vulkan/wsi/wsi_common_metal.c index dc8df24a247..a2ef8a8cfc8 100644 --- a/src/vulkan/wsi/wsi_common_metal.c +++ b/src/vulkan/wsi/wsi_common_metal.c @@ -92,8 +92,8 @@ wsi_metal_surface_get_capabilities2(VkIcdSurfaceBase *surface, { assert(caps->sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR); - const VkSurfacePresentModeEXT *present_mode = - (const VkSurfacePresentModeEXT *)vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_EXT); + const VkSurfacePresentModeKHR *present_mode = + (const VkSurfacePresentModeKHR *)vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_KHR); VkResult result = wsi_metal_surface_get_capabilities(surface, wsi_device, @@ -107,10 +107,10 @@ wsi_metal_surface_get_capabilities2(VkIcdSurfaceBase *surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR: { /* TODO: support scaling */ - VkSurfacePresentScalingCapabilitiesEXT *scaling = - (VkSurfacePresentScalingCapabilitiesEXT *)ext; + VkSurfacePresentScalingCapabilitiesKHR *scaling = + (VkSurfacePresentScalingCapabilitiesKHR *)ext; scaling->supportedPresentScaling = 0; scaling->supportedPresentGravityX = 0; scaling->supportedPresentGravityY = 0; @@ -119,10 +119,10 @@ wsi_metal_surface_get_capabilities2(VkIcdSurfaceBase *surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR: { /* Unsupported, just report the input present mode. */ - VkSurfacePresentModeCompatibilityEXT *compat = - (VkSurfacePresentModeCompatibilityEXT *)ext; + VkSurfacePresentModeCompatibilityKHR *compat = + (VkSurfacePresentModeCompatibilityKHR *)ext; if (compat->pPresentModes) { if (compat->presentModeCount) { assert(present_mode); @@ -131,8 +131,8 @@ wsi_metal_surface_get_capabilities2(VkIcdSurfaceBase *surface, } } else { if (!present_mode) - wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityEXT " - "without a VkSurfacePresentModeEXT set. This is an " + wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityKHR " + "without a VkSurfacePresentModeKHR set. This is an " "application bug.\n"); compat->presentModeCount = 1; } diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c index 365d1bdad7e..083777f42ac 100644 --- a/src/vulkan/wsi/wsi_common_wayland.c +++ b/src/vulkan/wsi/wsi_common_wayland.c @@ -1704,7 +1704,7 @@ wsi_wl_surface_get_support(VkIcdSurfaceBase *surface, static uint32_t wsi_wl_surface_get_min_image_count(struct wsi_wl_display *display, - const VkSurfacePresentModeEXT *present_mode) + const VkSurfacePresentModeKHR *present_mode) { if (present_mode) { return present_mode->presentMode == VK_PRESENT_MODE_MAILBOX_KHR ? @@ -1737,7 +1737,7 @@ wsi_wl_surface_get_min_image_count(struct wsi_wl_display *display, static VkResult wsi_wl_surface_get_capabilities(VkIcdSurfaceBase *icd_surface, struct wsi_device *wsi_device, - const VkSurfacePresentModeEXT *present_mode, + const VkSurfacePresentModeKHR *present_mode, VkSurfaceCapabilitiesKHR* caps) { VkIcdSurfaceWayland *surface = (VkIcdSurfaceWayland *)icd_surface; @@ -1817,7 +1817,7 @@ wsi_wl_surface_get_capabilities2(VkIcdSurfaceBase *surface, struct wsi_wl_surface *wsi_wl_surface = wl_container_of((VkIcdSurfaceWayland *)surface, wsi_wl_surface, base); - const VkSurfacePresentModeEXT *present_mode = vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_EXT); + const VkSurfacePresentModeKHR *present_mode = vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_KHR); VkResult result = wsi_wl_surface_get_capabilities(surface, wsi_device, present_mode, @@ -1832,9 +1832,9 @@ wsi_wl_surface_get_capabilities2(VkIcdSurfaceBase *surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR: { /* Unsupported. */ - VkSurfacePresentScalingCapabilitiesEXT *scaling = (void *)ext; + VkSurfacePresentScalingCapabilitiesKHR *scaling = (void *)ext; scaling->supportedPresentScaling = 0; scaling->supportedPresentGravityX = 0; scaling->supportedPresentGravityY = 0; @@ -1843,9 +1843,9 @@ wsi_wl_surface_get_capabilities2(VkIcdSurfaceBase *surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR: { /* Can easily toggle between FIFO and MAILBOX on Wayland. */ - VkSurfacePresentModeCompatibilityEXT *compat = (void *)ext; + VkSurfacePresentModeCompatibilityKHR *compat = (void *)ext; if (compat->pPresentModes) { assert(present_mode); VK_OUTARRAY_MAKE_TYPED(VkPresentModeKHR, modes, compat->pPresentModes, &compat->presentModeCount); @@ -1869,8 +1869,8 @@ wsi_wl_surface_get_capabilities2(VkIcdSurfaceBase *surface, } } else { if (!present_mode) { - wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityEXT " - "without a VkSurfacePresentModeEXT set. This is an " + wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityKHR " + "without a VkSurfacePresentModeKHR set. This is an " "application bug.\n"); compat->presentModeCount = 1; } else { @@ -3006,7 +3006,7 @@ wsi_wl_swapchain_queue_present(struct wsi_swapchain *wsi_chain, if (ret != VK_SUCCESS) return ret; - /* For EXT_swapchain_maintenance1. We might have transitioned from FIFO to MAILBOX. + /* For KHR_swapchain_maintenance1. We might have transitioned from FIFO to MAILBOX. * In this case we need to let the FIFO request complete, before presenting MAILBOX. */ while (!chain->legacy_fifo_ready) { int ret = wl_display_dispatch_queue(wsi_wl_surface->display->wl_display, @@ -3172,7 +3172,7 @@ wsi_wl_swapchain_queue_present(struct wsi_swapchain *wsi_chain, * When using timestamps, we already emit a dummy commit with the wait barrier anyway. */ chain->next_present_force_wait_barrier = !timestamped; } else if (chain->fifo && chain->next_present_force_wait_barrier) { - /* If we're using EXT_swapchain_maintenance1 to transition from FIFO to something non-FIFO + /* If we're using KHR_swapchain_maintenance1 to transition from FIFO to something non-FIFO * the previous frame's FIFO must persist for a refresh cycle, i.e. it cannot be replaced by a MAILBOX presentation. * From 1.4.303 spec: * "Transition from VK_PRESENT_MODE_FIFO_KHR or VK_PRESENT_MODE_FIFO_RELAXED_KHR or VK_PRESENT_MODE_FIFO_LATEST_READY_EXT to @@ -3382,7 +3382,7 @@ wsi_wl_swapchain_chain_free(struct wsi_wl_swapchain *chain, assert(!chain->present_ids.dispatch_in_progress); - /* In VK_EXT_swapchain_maintenance1 there is no requirement to wait for all present IDs to be complete. + /* In VK_KHR_swapchain_maintenance1 there is no requirement to wait for all present IDs to be complete. * Waiting for the swapchain fence is enough. * Just clean up anything user did not wait for. */ struct wsi_wl_present_id *id, *tmp; @@ -3498,13 +3498,13 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface, uint32_t num_images = pCreateInfo->minImageCount; - /* If app provides a present mode list from EXT_swapchain_maintenance1, + /* If app provides a present mode list from KHR_swapchain_maintenance1, * we don't know which present mode will be used. * Application is assumed to be well-behaved and be spec-compliant. * It needs to query all per-present mode minImageCounts individually and use the max() of those modes, * so there should never be any need to bump image counts. */ bool uses_present_mode_group = vk_find_struct_const( - pCreateInfo->pNext, SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT) != NULL; + pCreateInfo->pNext, SWAPCHAIN_PRESENT_MODES_CREATE_INFO_KHR) != NULL; /* If FIFO manager is not used, minImageCount is already the bumped value for reasons outlined in * wsi_wl_surface_get_min_image_count(), so skip any attempt to bump the counts. */ @@ -3512,8 +3512,8 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface, /* With proper FIFO, we return a lower minImageCount to make FIFO viable without requiring the use of KHR_present_wait. * The image count for MAILBOX should be bumped for performance reasons in this case. * This matches strategy for X11. */ - const VkSurfacePresentModeEXT mode = - { VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT, NULL, pCreateInfo->presentMode }; + const VkSurfacePresentModeKHR mode = + { VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_KHR, NULL, pCreateInfo->presentMode }; uint32_t min_images = wsi_wl_surface_get_min_image_count(wsi_wl_surface->display, &mode); bool requires_image_count_bump = min_images == WSI_WL_BUMPED_NUM_IMAGES; diff --git a/src/vulkan/wsi/wsi_common_win32.cpp b/src/vulkan/wsi/wsi_common_win32.cpp index d8033ef1533..03b84771b36 100644 --- a/src/vulkan/wsi/wsi_common_win32.cpp +++ b/src/vulkan/wsi/wsi_common_win32.cpp @@ -229,8 +229,8 @@ wsi_win32_surface_get_capabilities2(VkIcdSurfaceBase *surface, { assert(caps->sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR); - const VkSurfacePresentModeEXT *present_mode = - (const VkSurfacePresentModeEXT *)vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_EXT); + const VkSurfacePresentModeKHR *present_mode = + (const VkSurfacePresentModeKHR *)vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_KHR); VkResult result = wsi_win32_surface_get_capabilities(surface, wsi_device, @@ -244,7 +244,7 @@ wsi_win32_surface_get_capabilities2(VkIcdSurfaceBase *surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR: { /* Unsupported. */ VkSurfacePresentScalingCapabilitiesEXT *scaling = (VkSurfacePresentScalingCapabilitiesEXT *)ext; @@ -256,10 +256,10 @@ wsi_win32_surface_get_capabilities2(VkIcdSurfaceBase *surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR: { /* Unsupported, just report the input present mode. */ - VkSurfacePresentModeCompatibilityEXT *compat = - (VkSurfacePresentModeCompatibilityEXT *)ext; + VkSurfacePresentModeCompatibilityKHR *compat = + (VkSurfacePresentModeCompatibilityKHR *)ext; if (compat->pPresentModes) { if (compat->presentModeCount) { assert(present_mode); @@ -268,8 +268,8 @@ wsi_win32_surface_get_capabilities2(VkIcdSurfaceBase *surface, } } else { if (!present_mode) - wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityEXT " - "without a VkSurfacePresentModeEXT set. This is an " + wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityKHR " + "without a VkSurfacePresentModeKHR set. This is an " "application bug.\n"); compat->presentModeCount = 1; } diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 2cd023dadcf..544ddceca1d 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -728,7 +728,7 @@ x11_get_min_image_count_for_present_mode(struct wsi_device *wsi_device, static VkResult x11_surface_get_capabilities(VkIcdSurfaceBase *icd_surface, struct wsi_device *wsi_device, - const VkSurfacePresentModeEXT *present_mode, + const VkSurfacePresentModeKHR *present_mode, VkSurfaceCapabilitiesKHR *caps) { xcb_connection_t *conn = x11_surface_get_connection(icd_surface); @@ -791,7 +791,7 @@ x11_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface, { assert(caps->sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR); - const VkSurfacePresentModeEXT *present_mode = vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_EXT); + const VkSurfacePresentModeKHR *present_mode = vk_find_struct_const(info_next, SURFACE_PRESENT_MODE_KHR); VkResult result = x11_surface_get_capabilities(icd_surface, wsi_device, present_mode, @@ -809,9 +809,9 @@ x11_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_SCALING_CAPABILITIES_KHR: { /* Unsupported. */ - VkSurfacePresentScalingCapabilitiesEXT *scaling = (void *)ext; + VkSurfacePresentScalingCapabilitiesKHR *scaling = (void *)ext; scaling->supportedPresentScaling = 0; scaling->supportedPresentGravityX = 0; scaling->supportedPresentGravityY = 0; @@ -820,9 +820,9 @@ x11_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface, break; } - case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_EXT: { + case VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR: { /* All present modes are compatible with each other. */ - VkSurfacePresentModeCompatibilityEXT *compat = (void *)ext; + VkSurfacePresentModeCompatibilityKHR *compat = (void *)ext; if (compat->pPresentModes) { assert(present_mode); VK_OUTARRAY_MAKE_TYPED(VkPresentModeKHR, modes, compat->pPresentModes, &compat->presentModeCount); @@ -840,8 +840,8 @@ x11_surface_get_capabilities2(VkIcdSurfaceBase *icd_surface, } } else { if (!present_mode) - wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityEXT " - "without a VkSurfacePresentModeEXT set. This is an " + wsi_common_vk_warn_once("Use of VkSurfacePresentModeCompatibilityKHR " + "without a VkSurfacePresentModeKHR set. This is an " "application bug.\n"); compat->presentModeCount = ARRAY_SIZE(present_modes); @@ -1710,7 +1710,7 @@ x11_requires_mailbox_image_count(const struct wsi_device *device, * * - IMMEDIATE expects tearing, and when tearing, 3 images are more than enough. * - * - With EXT_swapchain_maintenance1, toggling between FIFO / IMMEDIATE (used extensively by D3D layering) + * - With KHR_swapchain_maintenance1, toggling between FIFO / IMMEDIATE (used extensively by D3D layering) * would require application to allocate >3 images which is unfortunate for memory usage, * and potentially disastrous for latency unless KHR_present_wait is used. */ @@ -1872,7 +1872,7 @@ x11_queue_present(struct wsi_swapchain *wsi_chain, } chain->images[image_index].update_area = update_area; chain->images[image_index].present_id = present_id; - /* With EXT_swapchain_maintenance1, the present mode can change per present. */ + /* With KHR_swapchain_maintenance1, the present mode can change per present. */ chain->images[image_index].present_mode = chain->base.present_mode; wsi_queue_push(&chain->present_queue, image_index);