mirror of
https://github.com/terrapkg/packages.git
synced 2026-05-31 09:01:55 +00:00
(cherry picked from commit f565c0aff2)
Co-authored-by: Kyle Gospodnetich <me@kylegospodneti.ch>
This commit is contained in:
@@ -1,88 +0,0 @@
|
||||
diff --git a/src/gallium/frontends/dri/loader_dri3_helper.c b/src/gallium/frontends/dri/loader_dri3_helper.c
|
||||
index 2c8caba08fd..2c9159672dc 100644
|
||||
--- a/src/gallium/frontends/dri/loader_dri3_helper.c
|
||||
+++ b/src/gallium/frontends/dri/loader_dri3_helper.c
|
||||
@@ -297,6 +297,30 @@ dri3_update_max_num_back(struct loader_dri3_drawable *draw)
|
||||
}
|
||||
}
|
||||
|
||||
+static unsigned
|
||||
+gamescope_swapchain_override()
|
||||
+{
|
||||
+ const char *path = getenv("GAMESCOPE_LIMITER_FILE");
|
||||
+ if (!path)
|
||||
+ return 0;
|
||||
+
|
||||
+ static simple_mtx_t mtx = SIMPLE_MTX_INITIALIZER;
|
||||
+ static int fd = -1;
|
||||
+
|
||||
+ simple_mtx_lock(&mtx);
|
||||
+ if (fd < 0) {
|
||||
+ fd = open(path, O_RDONLY);
|
||||
+ }
|
||||
+ simple_mtx_unlock(&mtx);
|
||||
+
|
||||
+ if (fd < 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ uint32_t override_value = 0;
|
||||
+ pread(fd, &override_value, sizeof(override_value), 0);
|
||||
+ return override_value;
|
||||
+}
|
||||
+
|
||||
void
|
||||
loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
|
||||
{
|
||||
@@ -311,10 +335,12 @@ loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
|
||||
* PS. changing from value A to B and A < B won't cause swap out of order but
|
||||
* may still gets wrong target_msc value at the beginning.
|
||||
*/
|
||||
- if (draw->swap_interval != interval)
|
||||
+ if (draw->orig_swap_interval != interval)
|
||||
loader_dri3_swapbuffer_barrier(draw);
|
||||
|
||||
- draw->swap_interval = interval;
|
||||
+ draw->orig_swap_interval = interval;
|
||||
+ if (gamescope_swapchain_override() != 1)
|
||||
+ draw->swap_interval = interval;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -443,6 +469,12 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
|
||||
|
||||
draw->swap_interval = dri_get_initial_swap_interval(draw->dri_screen_render_gpu);
|
||||
|
||||
+ draw->orig_swap_interval = draw->swap_interval;
|
||||
+
|
||||
+ unsigned gamescope_override = gamescope_swapchain_override();
|
||||
+ if (gamescope_override == 1)
|
||||
+ draw->swap_interval = 1;
|
||||
+
|
||||
dri3_update_max_num_back(draw);
|
||||
|
||||
/* Create a new drawable */
|
||||
@@ -1085,6 +1117,12 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw,
|
||||
if (draw->type == LOADER_DRI3_DRAWABLE_WINDOW) {
|
||||
dri3_fence_reset(draw->conn, back);
|
||||
|
||||
+ unsigned gamescope_override = gamescope_swapchain_override();
|
||||
+ if (gamescope_override == 1)
|
||||
+ draw->swap_interval = 1;
|
||||
+ else
|
||||
+ draw->swap_interval = draw->orig_swap_interval;
|
||||
+
|
||||
/* Compute when we want the frame shown by taking the last known
|
||||
* successful MSC and adding in a swap interval for each outstanding swap
|
||||
* request. target_msc=divisor=remainder=0 means "Use glXSwapBuffers()
|
||||
diff --git a/src/gallium/frontends/dri/loader_dri3_helper.h b/src/gallium/frontends/dri/loader_dri3_helper.h
|
||||
index 26f138d1b83..3f0f3f66fac 100644
|
||||
--- a/src/gallium/frontends/dri/loader_dri3_helper.h
|
||||
+++ b/src/gallium/frontends/dri/loader_dri3_helper.h
|
||||
@@ -169,6 +169,7 @@ struct loader_dri3_drawable {
|
||||
bool block_on_depleted_buffers;
|
||||
bool queries_buffer_age;
|
||||
int swap_interval;
|
||||
+ int orig_swap_interval;
|
||||
|
||||
const struct loader_dri3_vtable *vtable;
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
diff --git a/src/util/00-radv-defaults.conf b/src/util/00-radv-defaults.conf
|
||||
index e36357b9e4a..68a1957ee7b 100644
|
||||
--- a/src/util/00-radv-defaults.conf
|
||||
+++ b/src/util/00-radv-defaults.conf
|
||||
@@ -311,5 +311,9 @@ Application bugs worked around in this file:
|
||||
<application name="No Man's Sky" application_name_match="No Man's Sky">
|
||||
<option name="radv_app_layer" value="no_mans_sky" />
|
||||
</application>
|
||||
+
|
||||
+ <application name="Forza Horizon 5" application_name_match="ForzaHorizon5.exe">
|
||||
+ <option name="vk_x11_override_min_image_count" value="4" />
|
||||
+ </application>
|
||||
</device>
|
||||
</driconf>
|
||||
+9
-10
@@ -5,16 +5,18 @@
|
||||
%ifnarch s390x
|
||||
%global with_hardware 1
|
||||
%global with_kmsro 1
|
||||
%global with_nvk 1
|
||||
%global with_radeonsi 1
|
||||
%global with_spirv_tools 1
|
||||
%global with_vmware 1
|
||||
%global with_vulkan_hw 1
|
||||
%global with_va 1
|
||||
%if !0%{?rhel}
|
||||
%global with_r300 1
|
||||
%global with_r600 1
|
||||
%global with_opencl 1
|
||||
%global with_va 1
|
||||
%endif
|
||||
%if !0%{?rhel} || 0%{?rhel} >= 9
|
||||
%global with_nvk %{with_vulkan_hw}
|
||||
%endif
|
||||
%global base_vulkan %{?with_vulkan_hw:,amd}%{!?with_vulkan_hw:%{nil}}
|
||||
%endif
|
||||
@@ -82,10 +84,10 @@
|
||||
|
||||
Name: %{srcname}
|
||||
Summary: Mesa graphics libraries
|
||||
%global ver 25.3.3
|
||||
%global ver 25.3.4
|
||||
Epoch: 1
|
||||
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
|
||||
Release: 2
|
||||
Release: 1
|
||||
Packager: Kyle Gospodnetich <me@kylegospodneti.ch>
|
||||
License: MIT AND BSD-3-Clause AND SGI-B-2.0
|
||||
URL: http://www.mesa3d.org
|
||||
@@ -116,12 +118,9 @@ Source15: https://crates.io/api/v1/crates/rustc-hash/%{rustc_hash_ver}/dow
|
||||
# Teflon: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38532
|
||||
Patch12: mesa-38532.patch
|
||||
|
||||
# Add required patches for Wine Wayland (From Proton-GE Release Notes)
|
||||
Patch21: wine-wayland.patch
|
||||
|
||||
# SteamOS Patches
|
||||
Patch30: gamescope.patch
|
||||
Patch31: horizon5.patch
|
||||
# Open Gaming Collective Patches
|
||||
Patch30: https://raw.githubusercontent.com/OpenGamingCollective/mesa/refs/heads/%{ver}/limiter.patch
|
||||
Patch31: https://raw.githubusercontent.com/OpenGamingCollective/mesa/refs/heads/%{ver}/radv-defaults.patch
|
||||
|
||||
BuildRequires: meson >= 1.3.0
|
||||
BuildRequires: gcc
|
||||
|
||||
@@ -1,293 +0,0 @@
|
||||
diff --git a/src/amd/vulkan/radv_instance.c b/src/amd/vulkan/radv_instance.c
|
||||
index 5cbfc6f344a..622406fee25 100644
|
||||
--- a/src/amd/vulkan/radv_instance.c
|
||||
+++ b/src/amd/vulkan/radv_instance.c
|
||||
@@ -154,7 +154,7 @@ static const struct debug_control trace_options[] = {
|
||||
static const driOptionDescription radv_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_ADAPTIVE_SYNC(true)
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
|
||||
diff --git a/src/asahi/vulkan/hk_instance.c b/src/asahi/vulkan/hk_instance.c
|
||||
index 1fd2c844681..a872018d923 100644
|
||||
--- a/src/asahi/vulkan/hk_instance.c
|
||||
+++ b/src/asahi/vulkan/hk_instance.c
|
||||
@@ -80,7 +80,7 @@ hk_EnumerateInstanceExtensionProperties(const char *pLayerName,
|
||||
static const driOptionDescription hk_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_ADAPTIVE_SYNC(true)
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
|
||||
diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc
|
||||
index 05ffad6424d..e32862161de 100644
|
||||
--- a/src/freedreno/vulkan/tu_device.cc
|
||||
+++ b/src/freedreno/vulkan/tu_device.cc
|
||||
@@ -1748,7 +1748,7 @@ tu_destroy_physical_device(struct vk_physical_device *device)
|
||||
|
||||
static const driOptionDescription tu_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
|
||||
diff --git a/src/intel/vulkan/anv_instance.c b/src/intel/vulkan/anv_instance.c
|
||||
index 7967313f1f5..96cc0b5707e 100644
|
||||
--- a/src/intel/vulkan/anv_instance.c
|
||||
+++ b/src/intel/vulkan/anv_instance.c
|
||||
@@ -10,7 +10,7 @@
|
||||
static const driOptionDescription anv_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_ADAPTIVE_SYNC(true)
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_WSI_DISABLE_UNORDERED_SUBMITS(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
|
||||
diff --git a/src/intel/vulkan_hasvk/anv_device.c b/src/intel/vulkan_hasvk/anv_device.c
|
||||
index d111c96ae7a..42e3f82eff9 100644
|
||||
--- a/src/intel/vulkan_hasvk/anv_device.c
|
||||
+++ b/src/intel/vulkan_hasvk/anv_device.c
|
||||
@@ -66,7 +66,7 @@
|
||||
static const driOptionDescription anv_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_ADAPTIVE_SYNC(true)
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(true)
|
||||
DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(0)
|
||||
diff --git a/src/nouveau/vulkan/nvk_instance.c b/src/nouveau/vulkan/nvk_instance.c
|
||||
index e2413045455..2261dc080a8 100644
|
||||
--- a/src/nouveau/vulkan/nvk_instance.c
|
||||
+++ b/src/nouveau/vulkan/nvk_instance.c
|
||||
@@ -98,7 +98,7 @@ nvk_init_debug_flags(struct nvk_instance *instance)
|
||||
static const driOptionDescription nvk_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_ADAPTIVE_SYNC(true)
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
|
||||
diff --git a/src/panfrost/vulkan/panvk_instance.c b/src/panfrost/vulkan/panvk_instance.c
|
||||
index bb425414bb1..39f137d5ab3 100644
|
||||
--- a/src/panfrost/vulkan/panvk_instance.c
|
||||
+++ b/src/panfrost/vulkan/panvk_instance.c
|
||||
@@ -178,7 +178,7 @@ panvk_kmod_free(const struct pan_kmod_allocator *allocator, void *data)
|
||||
static const driOptionDescription panvk_dri_options[] = {
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
DRI_CONF_ADAPTIVE_SYNC(true)
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(false)
|
||||
diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf
|
||||
index 1dc9d17af82..ce4d7d3399d 100644
|
||||
--- a/src/util/00-mesa-defaults.conf
|
||||
+++ b/src/util/00-mesa-defaults.conf
|
||||
@@ -649,24 +649,24 @@ TODO: document the other workarounds.
|
||||
|
||||
<application name="gfxbench" executable="testfw_app">
|
||||
<option name="mesa_glthread_app_profile" value="0" />
|
||||
- <option name="vk_x11_override_min_image_count" value="2" />
|
||||
+ <option name="vk_override_min_image_count" value="2" />
|
||||
<option name="vk_wsi_force_bgra8_unorm_first" value="true" />
|
||||
</application>
|
||||
|
||||
<application name="Rainbow Six Siege (Vulkan)" executable="RainbowSix_Vulkan.exe">
|
||||
- <option name="vk_x11_override_min_image_count" value="2" />
|
||||
+ <option name="vk_override_min_image_count" value="2" />
|
||||
<option name="vk_x11_strict_image_count" value="true" />
|
||||
</application>
|
||||
|
||||
<application name="Rainbow Six Extraction (Wine)" executable="R6-Extraction.exe">
|
||||
- <option name="vk_x11_override_min_image_count" value="2" />
|
||||
+ <option name="vk_override_min_image_count" value="2" />
|
||||
<option name="vk_x11_strict_image_count" value="true" />
|
||||
</application>
|
||||
|
||||
<!-- Workaround for Hades: Vulkan backend of the game is not starting
|
||||
if the implementation returns more than 3 swapchain images. -->
|
||||
<application name="Hades" executable="Hades.exe">
|
||||
- <option name="vk_x11_override_min_image_count" value="3" />
|
||||
+ <option name="vk_override_min_image_count" value="3" />
|
||||
<option name="vk_x11_strict_image_count" value="true" />
|
||||
</application>
|
||||
|
||||
@@ -727,10 +727,12 @@ TODO: document the other workarounds.
|
||||
|
||||
<application name="Path of Exile" executable="PathOfExile_x64Steam.exe">
|
||||
<option name="vk_zero_vram" value="true" />
|
||||
+ <option name="vk_override_min_image_count" value="3" />
|
||||
</application>
|
||||
|
||||
<application name="Path of Exile" executable="PathOfExileSteam.exe">
|
||||
<option name="vk_zero_vram" value="true" />
|
||||
+ <option name="vk_override_min_image_count" value="3" />
|
||||
</application>
|
||||
|
||||
<application name="X4 Foundations" executable="X4">
|
||||
diff --git a/src/util/driconf.h b/src/util/driconf.h
|
||||
index 8399c21e383..2d8fbcbd81f 100644
|
||||
--- a/src/util/driconf.h
|
||||
+++ b/src/util/driconf.h
|
||||
@@ -456,8 +456,8 @@
|
||||
DRI_CONF_OPT_B(vk_wsi_disable_unordered_submits, def, \
|
||||
"Disable unordered WSI submits to workaround application synchronization bugs")
|
||||
|
||||
-#define DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(def) \
|
||||
- DRI_CONF_OPT_I(vk_x11_override_min_image_count, def, 0, 999, \
|
||||
+#define DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(def) \
|
||||
+ DRI_CONF_OPT_I(vk_override_min_image_count, def, 0, 999, \
|
||||
"Override the VkSurfaceCapabilitiesKHR::minImageCount (0 = no override)")
|
||||
|
||||
#define DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(def) \
|
||||
diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c
|
||||
index 523f0590e9a..b1f642f1c2e 100644
|
||||
--- a/src/virtio/vulkan/vn_instance.c
|
||||
+++ b/src/virtio/vulkan/vn_instance.c
|
||||
@@ -70,8 +70,8 @@ static const struct vk_instance_extension_table
|
||||
static const driOptionDescription vn_dri_options[] = {
|
||||
/* clang-format off */
|
||||
DRI_CONF_SECTION_PERFORMANCE
|
||||
+ DRI_CONF_VK_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_ENSURE_MIN_IMAGE_COUNT(false)
|
||||
- DRI_CONF_VK_X11_OVERRIDE_MIN_IMAGE_COUNT(0)
|
||||
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
|
||||
DRI_CONF_VK_XWAYLAND_WAIT_READY(true)
|
||||
DRI_CONF_VENUS_IMPLICIT_FENCING(false)
|
||||
diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c
|
||||
index 0c4a4ce652e..2a95cfd557b 100644
|
||||
--- a/src/vulkan/wsi/wsi_common.c
|
||||
+++ b/src/vulkan/wsi/wsi_common.c
|
||||
@@ -220,7 +220,7 @@ wsi_device_init(struct wsi_device *wsi,
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
- result = wsi_wl_init_wsi(wsi, alloc, pdevice);
|
||||
+ result = wsi_wl_init_wsi(wsi, alloc, pdevice, dri_options);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail;
|
||||
#endif
|
||||
diff --git a/src/vulkan/wsi/wsi_common.h b/src/vulkan/wsi/wsi_common.h
|
||||
index abe771b5bfc..d67f953c42a 100644
|
||||
--- a/src/vulkan/wsi/wsi_common.h
|
||||
+++ b/src/vulkan/wsi/wsi_common.h
|
||||
@@ -161,6 +161,10 @@ struct wsi_device {
|
||||
struct {
|
||||
/* Don't use the commit-timing protocol for pacing */
|
||||
bool disable_timestamps;
|
||||
+
|
||||
+ /* Override the minimum number of images on the swapchain.
|
||||
+ * 0 = no override */
|
||||
+ double override_minImageCount;
|
||||
} wayland;
|
||||
|
||||
/*
|
||||
diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h
|
||||
index 9fe64cfba95..c20174f6175 100644
|
||||
--- a/src/vulkan/wsi/wsi_common_private.h
|
||||
+++ b/src/vulkan/wsi/wsi_common_private.h
|
||||
@@ -456,7 +456,8 @@ void wsi_x11_finish_wsi(struct wsi_device *wsi_device,
|
||||
const VkAllocationCallbacks *alloc);
|
||||
VkResult wsi_wl_init_wsi(struct wsi_device *wsi_device,
|
||||
const VkAllocationCallbacks *alloc,
|
||||
- VkPhysicalDevice physical_device);
|
||||
+ VkPhysicalDevice physical_device,
|
||||
+ const struct driOptionCache *dri_options);
|
||||
void wsi_wl_finish_wsi(struct wsi_device *wsi_device,
|
||||
const VkAllocationCallbacks *alloc);
|
||||
VkResult wsi_win32_init_wsi(struct wsi_device *wsi_device,
|
||||
diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c
|
||||
index cf3749be6d4..04278d3c8a3 100644
|
||||
--- a/src/vulkan/wsi/wsi_common_wayland.c
|
||||
+++ b/src/vulkan/wsi/wsi_common_wayland.c
|
||||
@@ -58,6 +58,7 @@
|
||||
#include <util/u_dynarray.h>
|
||||
#include <util/anon_file.h>
|
||||
#include <util/os_time.h>
|
||||
+#include <util/xmlconfig.h>
|
||||
|
||||
#include <loader/loader_wayland_helper.h>
|
||||
|
||||
@@ -1703,9 +1704,12 @@ wsi_wl_surface_get_support(VkIcdSurfaceBase *surface,
|
||||
#define WSI_WL_DEFAULT_NUM_IMAGES 3
|
||||
|
||||
static uint32_t
|
||||
-wsi_wl_surface_get_min_image_count(struct wsi_wl_display *display,
|
||||
+wsi_wl_surface_get_min_image_count(struct wsi_device *wsi_device, struct wsi_wl_display *display,
|
||||
const VkSurfacePresentModeEXT *present_mode)
|
||||
{
|
||||
+ if (wsi_device->wayland.override_minImageCount)
|
||||
+ return wsi_device->wayland.override_minImageCount;
|
||||
+
|
||||
if (present_mode) {
|
||||
return present_mode->presentMode == VK_PRESENT_MODE_MAILBOX_KHR ?
|
||||
WSI_WL_BUMPED_NUM_IMAGES : WSI_WL_DEFAULT_NUM_IMAGES;
|
||||
@@ -1754,7 +1758,7 @@ wsi_wl_surface_get_capabilities(VkIcdSurfaceBase *icd_surface,
|
||||
display = &temp_display;
|
||||
}
|
||||
|
||||
- caps->minImageCount = wsi_wl_surface_get_min_image_count(display, present_mode);
|
||||
+ caps->minImageCount = wsi_wl_surface_get_min_image_count(wsi_device, display, present_mode);
|
||||
|
||||
if (!wsi_wl_surface->display)
|
||||
wsi_wl_display_finish(&temp_display);
|
||||
@@ -3516,7 +3520,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
|
||||
const VkSurfacePresentModeEXT mode =
|
||||
{ VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_EXT, NULL, pCreateInfo->presentMode };
|
||||
|
||||
- uint32_t min_images = wsi_wl_surface_get_min_image_count(wsi_wl_surface->display, &mode);
|
||||
+ uint32_t min_images = wsi_wl_surface_get_min_image_count(wsi_device, wsi_wl_surface->display, &mode);
|
||||
bool requires_image_count_bump = min_images == WSI_WL_BUMPED_NUM_IMAGES;
|
||||
if (requires_image_count_bump)
|
||||
num_images = MAX2(min_images, num_images);
|
||||
@@ -3711,7 +3715,8 @@ fail:
|
||||
VkResult
|
||||
wsi_wl_init_wsi(struct wsi_device *wsi_device,
|
||||
const VkAllocationCallbacks *alloc,
|
||||
- VkPhysicalDevice physical_device)
|
||||
+ VkPhysicalDevice physical_device,
|
||||
+ const struct driOptionCache *dri_options)
|
||||
{
|
||||
struct wsi_wayland *wsi;
|
||||
VkResult result;
|
||||
@@ -3737,6 +3742,14 @@ wsi_wl_init_wsi(struct wsi_device *wsi_device,
|
||||
|
||||
wsi_device->wsi[VK_ICD_WSI_PLATFORM_WAYLAND] = &wsi->base;
|
||||
|
||||
+ if (dri_options)
|
||||
+ {
|
||||
+ if (driCheckOption(dri_options, "vk_override_min_image_count", DRI_INT)) {
|
||||
+ wsi_device->wayland.override_minImageCount =
|
||||
+ driQueryOptioni(dri_options, "vk_override_min_image_count");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return VK_SUCCESS;
|
||||
|
||||
fail:
|
||||
diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
|
||||
index 2cd023dadcf..7872a2a899f 100644
|
||||
--- a/src/vulkan/wsi/wsi_common_x11.c
|
||||
+++ b/src/vulkan/wsi/wsi_common_x11.c
|
||||
@@ -2924,9 +2924,9 @@ wsi_x11_init_wsi(struct wsi_device *wsi_device,
|
||||
}
|
||||
|
||||
if (dri_options) {
|
||||
- if (driCheckOption(dri_options, "vk_x11_override_min_image_count", DRI_INT)) {
|
||||
+ if (driCheckOption(dri_options, "vk_override_min_image_count", DRI_INT)) {
|
||||
wsi_device->x11.override_minImageCount =
|
||||
- driQueryOptioni(dri_options, "vk_x11_override_min_image_count");
|
||||
+ driQueryOptioni(dri_options, "vk_override_min_image_count");
|
||||
}
|
||||
if (driCheckOption(dri_options, "vk_x11_strict_image_count", DRI_BOOL)) {
|
||||
wsi_device->x11.strict_imageCount =
|
||||
Reference in New Issue
Block a user