aboutsummaryrefslogtreecommitdiffstats
path: root/src/vulkan
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2019-09-05 23:54:53 +0300
committerLionel Landwerlin <[email protected]>2019-09-15 15:37:02 +0300
commit0616b7ac90cf4f86bb409d34101e3a3cceac8cbe (patch)
treee610123761218611b1fe3f0d284c149c83607094 /src/vulkan
parent04dc6074cf7f651b720868e0ba24362b585d1b31 (diff)
vulkan: add vk_x11_strict_image_count option
This option strictly allocate the minImageCount given by the application at swapchain creation. This works around application that do not deal with the fact that the implementation allocates more images than the minimum specified. v2: Add values in default drirc (Bas) v3: specify engine name/version (Lionel) Signed-off-by: Lionel Landwerlin <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111522 Reviewed-by: Bas Nieuwenhuizen <[email protected]> Reviewed-by: Eric Engestrom <[email protected]> Cc: 19.2 <[email protected]>
Diffstat (limited to 'src/vulkan')
-rw-r--r--src/vulkan/wsi/wsi_common.h5
-rw-r--r--src/vulkan/wsi/wsi_common_x11.c8
2 files changed, 12 insertions, 1 deletions
diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h
index b00fc3c1857..064b16a5e7a 100644
--- a/src/vulkan/wsi/wsi_common.h
+++ b/src/vulkan/wsi/wsi_common.h
@@ -113,6 +113,11 @@ struct wsi_device {
/* Override the minimum number of images on the swapchain.
* 0 = no override */
uint32_t override_minImageCount;
+
+ /* Forces strict number of image on the swapchain using application
+ * provided VkSwapchainCreateInfoKH::RminImageCount.
+ */
+ bool strict_imageCount;
} x11;
uint64_t (*image_get_modifier)(VkImage image);
diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
index af61bb91dca..491bd8a3702 100644
--- a/src/vulkan/wsi/wsi_common_x11.c
+++ b/src/vulkan/wsi/wsi_common_x11.c
@@ -1413,7 +1413,9 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR);
unsigned num_images = pCreateInfo->minImageCount;
- if (present_mode == VK_PRESENT_MODE_MAILBOX_KHR)
+ if (wsi_device->x11.strict_imageCount)
+ num_images = pCreateInfo->minImageCount;
+ else if (present_mode == VK_PRESENT_MODE_MAILBOX_KHR)
num_images = MAX2(num_images, 5);
xcb_connection_t *conn = x11_surface_get_connection(icd_surface);
@@ -1630,6 +1632,10 @@ wsi_x11_init_wsi(struct wsi_device *wsi_device,
wsi_device->x11.override_minImageCount =
driQueryOptioni(dri_options, "vk_x11_override_min_image_count");
}
+ if (driCheckOption(dri_options, "vk_x11_strict_image_count", DRI_BOOL)) {
+ wsi_device->x11.strict_imageCount =
+ driQueryOptionb(dri_options, "vk_x11_strict_image_count");
+ }
}
wsi->base.get_support = x11_surface_get_support;