Module: Mesa Branch: main Commit: 10f8240caf20382826015d99f368e073093880d7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=10f8240caf20382826015d99f368e073093880d7
Author: Gert Wollny <[email protected]> Date: Fri Feb 3 13:31:49 2023 +0100 zink/kopper: Add extra swapchain images for Venus Together with the previous patch that corrects the number of swapchain images on Xwayland this gives Zink/Venus a spead boost in a number of work loads and close the gap or even surpass VirGL when the benchmark is not GPU bound. Some numbers: zink (Virtio-GPU Venus (Host: RADV RENOIR)) / VirGL Benchmark VirGL baseline Zink/Venus +1 and Xwayland +1 ================================================================== OpenArena (FPS) 63.8 60.1 148.5 Unigine Sancuary (FPS) 129.1 121.4 164.7 Unigine Tropics (FPS) 107.2 85.7 114.3 Unigine Heaven (FPS) 48.5 48.0 51.5 Unigine Valley (FPS) 48.0 45.6 47.4 Xonotic (FPS) 90.5 59.4 89.2 GpuTest/Volcano (Points) 2960 2966 3013 zink (Virtio-GPU Venus (Host: Intel Xe TGL GT2)) / VirGL Benchmark VirGL baseline Zink/Venus +1 and Xwayland +1 =========================================================== OpenArena (FPS) 95.1 59.8 78.9 Unigine Sancuary (FPS) 85.5 76.6 81.8 Unigine Tropics (FPS) 66.0 59.8 62.7 Unigine Heaven (FPS) 28.8 28.7 28.0 Unigine Valley (FPS) 29.0 28.0 27.0 Xonotic (FPS) 64.2 49.4 51.1 GpuTest/Volcano (Points) 2855 2718 2747 v2: Fix limiting minImageCount (Mike) Signed-off-by: Gert Wollny <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21136> --- src/gallium/drivers/zink/zink_kopper.c | 4 +++- src/gallium/drivers/zink/zink_screen.c | 5 +++++ src/gallium/drivers/zink/zink_types.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c index 400e790d971..d597e2ecc29 100644 --- a/src/gallium/drivers/zink/zink_kopper.c +++ b/src/gallium/drivers/zink/zink_kopper.c @@ -261,7 +261,9 @@ kopper_CreateSwapchain(struct zink_screen *screen, struct kopper_displaytarget * cswap->scci.clipped = VK_TRUE; } cswap->scci.presentMode = cdt->present_mode; - cswap->scci.minImageCount = cdt->caps.minImageCount; + cswap->scci.minImageCount = cdt->caps.minImageCount + screen->driver_workarounds.extra_swapchain_images; + if (cdt->caps.maxImageCount != 0) + cswap->scci.minImageCount = MIN2(cswap->scci.minImageCount, cdt->caps.maxImageCount); cswap->scci.preTransform = cdt->caps.currentTransform; if (cdt->formats[1]) cswap->scci.pNext = &cdt->format_list; diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index ca6a33b0b7f..9e68faf8baf 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -2444,6 +2444,11 @@ init_driver_workarounds(struct zink_screen *screen) screen->driver_workarounds.no_linesmooth = true; } + screen->driver_workarounds.extra_swapchain_images = 0; + if (screen->info.driver_props.driverID == VK_DRIVER_ID_MESA_VENUS) { + screen->driver_workarounds.extra_swapchain_images = 1; + } + /* This is a workarround for the lack of * gl_PointSize + glPolygonMode(..., GL_LINE), in the imagination * proprietary driver. diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 4623b5df816..2aa87c95d6e 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -1396,6 +1396,7 @@ struct zink_screen { bool lower_robustImageAccess2; unsigned z16_unscaled_bias; unsigned z24_unscaled_bias; + unsigned extra_swapchain_images; } driver_workarounds; };
