mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 16:00:08 +01:00
radv: add vk_wsi_disable_unordered_submits and enable for GTK
GTK is missing a semaphore between QueueSubmit() and QueuePresent() causing the WSI submit to be "unordered" and to immediately signal the semaphores (because it's missing a wait semaphore in QueuePresent()). The workaround is to disable unordered WSI submits until GTK fixes it properly. Cc: "25.3" Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/14087 Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38351>
This commit is contained in:
parent
668259ef0b
commit
0d9d45db4e
5 changed files with 19 additions and 1 deletions
|
|
@ -169,6 +169,7 @@ static const driOptionDescription radv_dri_options[] = {
|
|||
DRI_CONF_VK_LOWER_TERMINATE_TO_DISCARD(false)
|
||||
DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false)
|
||||
DRI_CONF_VK_WSI_FORCE_SWAPCHAIN_TO_CURRENT_EXTENT(false)
|
||||
DRI_CONF_VK_WSI_DISABLE_UNORDERED_SUBMITS(false)
|
||||
DRI_CONF_VK_X11_IGNORE_SUBOPTIMAL(false)
|
||||
DRI_CONF_VK_REQUIRE_ETC2(false)
|
||||
DRI_CONF_VK_REQUIRE_ASTC(false)
|
||||
|
|
|
|||
|
|
@ -70,6 +70,10 @@ Application bugs worked around in this file:
|
|||
<option name="radv_tex_non_uniform" value="true" />
|
||||
</engine>
|
||||
|
||||
<engine engine_name_match="GTK">
|
||||
<option name="vk_wsi_disable_unordered_submits" value="true" />
|
||||
</engine>
|
||||
|
||||
<!-- Game workarounds -->
|
||||
<application name="Shadow Of The Tomb Raider (Native)" application_name_match="ShadowOfTheTomb">
|
||||
<option name="radv_report_llvm9_version_string" value="true" />
|
||||
|
|
|
|||
|
|
@ -449,6 +449,10 @@
|
|||
DRI_CONF_OPT_B(vk_wsi_force_swapchain_to_current_extent, def, \
|
||||
"Force VkSwapchainCreateInfoKHR::imageExtent to be VkSurfaceCapabilities2KHR::currentExtent")
|
||||
|
||||
#define DRI_CONF_VK_WSI_DISABLE_UNORDERED_SUBMITS(def) \
|
||||
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, \
|
||||
"Override the VkSurfaceCapabilitiesKHR::minImageCount (0 = no override)")
|
||||
|
|
|
|||
|
|
@ -281,6 +281,12 @@ wsi_device_init(struct wsi_device *wsi,
|
|||
wsi->force_swapchain_to_currentExtent =
|
||||
driQueryOptionb(dri_options, "vk_wsi_force_swapchain_to_current_extent");
|
||||
}
|
||||
|
||||
if (driCheckOption(dri_options, "vk_wsi_disable_unordered_submits", DRI_BOOL)) {
|
||||
wsi->disable_unordered_submits =
|
||||
driQueryOptionb(dri_options, "vk_wsi_disable_unordered_submits");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* can_present_on_device is a function pointer used to determine if images
|
||||
|
|
@ -1366,7 +1372,8 @@ wsi_queue_submit2_unordered(const struct wsi_device *wsi,
|
|||
uint32_t fence_count,
|
||||
const VkFence *fences)
|
||||
{
|
||||
if (info->commandBufferInfoCount == 0 &&
|
||||
if (!wsi->disable_unordered_submits &&
|
||||
info->commandBufferInfoCount == 0 &&
|
||||
queue->base.device->copy_sync_payloads != NULL) {
|
||||
/* This helper is unordered so if there are no command buffers, we can
|
||||
* just signal the signal semaphores and fences with the wait semaphores
|
||||
|
|
|
|||
|
|
@ -100,6 +100,8 @@ struct wsi_device {
|
|||
|
||||
bool force_swapchain_to_currentExtent;
|
||||
|
||||
bool disable_unordered_submits;
|
||||
|
||||
struct {
|
||||
/* Override the minimum number of images on the swapchain.
|
||||
* 0 = no override */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue