From 0cbf6f6601e5c0bbd849cf6cdde4ab6ae4b030ff Mon Sep 17 00:00:00 2001 From: vkedwardli Date: Fri, 28 Oct 2022 04:00:22 +0800 Subject: [PATCH] Fixing Steam Deck's wrong dpi caused by incorrect 60mm * 60mm EDID (#796) --- core/rend/vulkan/vulkan_context.cpp | 12 ++++++++++++ core/wsi/sdl.cpp | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/core/rend/vulkan/vulkan_context.cpp b/core/rend/vulkan/vulkan_context.cpp index 2f7a4a98f..15e07587e 100644 --- a/core/rend/vulkan/vulkan_context.cpp +++ b/core/rend/vulkan/vulkan_context.cpp @@ -728,6 +728,18 @@ bool VulkanContext::init() float hdpi, vdpi; if (!SDL_GetDisplayDPI(SDL_GetWindowDisplayIndex(sdlWin), nullptr, &hdpi, &vdpi)) settings.display.dpi = roundf(std::max(hdpi, vdpi)); + +#ifdef __linux__ + // Fixing Steam Deck's incorrect 60mm * 60mm EDID + if (settings.display.dpi > 500) + { + int displayIndex = SDL_GetWindowDisplayIndex(sdlWin); + SDL_DisplayMode mode; + SDL_GetDisplayMode(displayIndex, 0, &mode); + if ( displayIndex == 0 && strcmp(SDL_GetDisplayName(displayIndex), "ANX7530 U 3\"") == 0 && mode.w == 1280 && mode.h == 800 ) + settings.display.dpi = 206; + } +#endif #elif defined(_WIN32) vk::Win32SurfaceCreateInfoKHR createInfo(vk::Win32SurfaceCreateFlagsKHR(), GetModuleHandle(NULL), (HWND)window); surface = instance->createWin32SurfaceKHRUnique(createInfo); diff --git a/core/wsi/sdl.cpp b/core/wsi/sdl.cpp index 316292dbf..4fd1384f0 100644 --- a/core/wsi/sdl.cpp +++ b/core/wsi/sdl.cpp @@ -84,6 +84,18 @@ bool SDLGLGraphicsContext::init() float hdpi, vdpi; if (!SDL_GetDisplayDPI(SDL_GetWindowDisplayIndex(sdlWindow), nullptr, &hdpi, &vdpi)) settings.display.dpi = roundf(std::max(hdpi, vdpi)); + +#ifdef __linux__ + // Fixing Steam Deck's incorrect 60mm * 60mm EDID + if (settings.display.dpi > 500) + { + int displayIndex = SDL_GetWindowDisplayIndex(sdlWindow); + SDL_DisplayMode mode; + SDL_GetDisplayMode(displayIndex, 0, &mode); + if ( displayIndex == 0 && strcmp(SDL_GetDisplayName(displayIndex), "ANX7530 U 3\"") == 0 && mode.w == 1280 && mode.h == 800 ) + settings.display.dpi = 206; + } +#endif INFO_LOG(RENDERER, "Created SDL Window and GL Context successfully");