From: Jason Ekstrand Date: Tue, 24 Jan 2017 23:13:31 +0000 (-0800) Subject: anv: Implement VK_KHR_incremental_present X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0817110969e35eb265dc41fc5fd5d2fe2236db17;p=mesa.git anv: Implement VK_KHR_incremental_present Reviewed-by: Lionel Landwerlin Reviewed-by: Daniel Stone --- diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 4e4fa195a7c..37b6f7273b1 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -270,7 +270,11 @@ static const VkExtensionProperties device_extensions[] = { { .extensionName = VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, .specVersion = 1, - } + }, + { + .extensionName = VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME, + .specVersion = 1, + }, }; static void * diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py index 203df4597df..1a7d75309c4 100644 --- a/src/intel/vulkan/anv_entrypoints_gen.py +++ b/src/intel/vulkan/anv_entrypoints_gen.py @@ -35,6 +35,7 @@ MAX_API_VERSION = 1.0 SUPPORTED_EXTENSIONS = [ 'VK_KHR_descriptor_update_template', 'VK_KHR_get_physical_device_properties2', + 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c index 45bf8963427..6a0203ac30e 100644 --- a/src/intel/vulkan/anv_wsi.c +++ b/src/intel/vulkan/anv_wsi.c @@ -24,6 +24,7 @@ #include "anv_private.h" #include "wsi_common.h" #include "vk_format_info.h" +#include "util/vk_util.h" static const struct wsi_callbacks wsi_cbs = { .get_phys_device_format_properties = anv_GetPhysicalDeviceFormatProperties, @@ -355,10 +356,17 @@ VkResult anv_QueuePresentKHR( ANV_FROM_HANDLE(anv_queue, queue, _queue); VkResult result = VK_SUCCESS; + const VkPresentRegionsKHR *regions = + vk_find_struct_const(pPresentInfo->pNext, PRESENT_REGIONS_KHR); + for (uint32_t i = 0; i < pPresentInfo->swapchainCount; i++) { ANV_FROM_HANDLE(wsi_swapchain, swapchain, pPresentInfo->pSwapchains[i]); VkResult item_result; + const VkPresentRegionKHR *region = NULL; + if (regions && regions->pRegions) + region = ®ions->pRegions[i]; + assert(anv_device_from_handle(swapchain->device) == queue->device); if (swapchain->fences[0] == VK_NULL_HANDLE) { @@ -381,7 +389,7 @@ VkResult anv_QueuePresentKHR( item_result = swapchain->queue_present(swapchain, pPresentInfo->pImageIndices[i], - NULL); + region); /* TODO: What if one of them returns OUT_OF_DATE? */ if (pPresentInfo->pResults != NULL) pPresentInfo->pResults[i] = item_result;