Browse Source

vulkan: when vsync is off prefer immediate instead of mailbox mode, for now.

Fixes #1852. This might be reevaluated in the future.
Sasha Szpakowski 2 years ago
parent
commit
d70514b2d1
2 changed files with 12 additions and 7 deletions
  1. 11 7
      src/modules/graphics/vulkan/Graphics.cpp
  2. 1 0
      src/modules/window/sdl/Window.cpp

+ 11 - 7
src/modules/graphics/vulkan/Graphics.cpp

@@ -1816,16 +1816,20 @@ VkPresentModeKHR Graphics::chooseSwapPresentMode(const std::vector<VkPresentMode
 		else
 			return VK_PRESENT_MODE_FIFO_KHR;
 	case 0:
-		if (std::find(begin, end, VK_PRESENT_MODE_MAILBOX_KHR) != end)
+		// Mailbox mode might be better than immediate mode for a lot of people.
+		// But on at least some systems it acts as if vsync is enabled
+		// https://github.com/love2d/love/issues/1852
+		// TODO: is that a bug in love's code or the graphics driver / compositor?
+		// Should love expose mailbox mode in an API to users in some manner,
+		// instead of trying to guess what to do?
+		if (std::find(begin, end, VK_PRESENT_MODE_IMMEDIATE_KHR) != end)
+			return VK_PRESENT_MODE_IMMEDIATE_KHR;
+		else if (std::find(begin, end, VK_PRESENT_MODE_MAILBOX_KHR) != end)
 			return VK_PRESENT_MODE_MAILBOX_KHR;
 		else
-		{
-			if (std::find(begin, end, VK_PRESENT_MODE_IMMEDIATE_KHR) != end)
-				return VK_PRESENT_MODE_IMMEDIATE_KHR;
-			else
-				return VK_PRESENT_MODE_FIFO_KHR;
-		}
+			return VK_PRESENT_MODE_FIFO_KHR;
 	default:
+		// TODO: support for swap interval = 2, etc?
 		return VK_PRESENT_MODE_FIFO_KHR;
 	}
 }

+ 1 - 0
src/modules/window/sdl/Window.cpp

@@ -1119,6 +1119,7 @@ void Window::setVSync(int vsync)
 	}
 
 #ifdef LOVE_GRAPHICS_VULKAN
+	// TODO: this doesn't update the swap-chain, but it should.
 	love::graphics::vulkan::Vulkan::setVsync(vsync);
 #endif