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");