From addadd20df448557e6dc7d01adfc05dc94ded0dc Mon Sep 17 00:00:00 2001 From: Erik Kurzinger Date: Wed, 18 Feb 2026 16:02:47 -0500 Subject: [PATCH] wsi/display: retrieve monitor size from EDID When libdisplay-info is available and we are able to retrieve the physical size of a display from its EDID, use that to populate the physicalDimensions field of VkDisplayPropertiesKHR. Signed-off-by: Erik Kurzinger Part-of: --- src/vulkan/wsi/wsi_common_display.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/vulkan/wsi/wsi_common_display.c b/src/vulkan/wsi/wsi_common_display.c index 6e3601baec2..37eb40adb56 100644 --- a/src/vulkan/wsi/wsi_common_display.c +++ b/src/vulkan/wsi/wsi_common_display.c @@ -166,6 +166,8 @@ typedef struct wsi_display_connector_metadata { VkHdrMetadataEXT hdr_metadata; bool supports_st2084; char *display_name; + uint16_t physical_width_cm; + uint16_t physical_height_cm; } wsi_display_connector_metadata; typedef struct wsi_display_connector { @@ -303,6 +305,10 @@ wsi_display_parse_edid(struct wsi_display_connector *connector, drmModePropertyB free(make); free(model); + const struct di_edid_screen_size *screen_size = di_edid_get_screen_size(edid); + metadata->physical_width_cm = screen_size->width_cm; + metadata->physical_height_cm = screen_size->height_cm; + di_info_destroy(info); #endif } @@ -816,10 +822,16 @@ wsi_display_fill_in_display_properties(struct wsi_display_connector *connector, properties->physicalResolution.height = 768; } - /* Make up physical size based on 96dpi */ + /* Use physical size from EDID if available, + * otherwise make up physical size based on 96dpi. + */ properties->physicalDimensions.width = + metadata->physical_width_cm ? + metadata->physical_width_cm * 10 : floor(properties->physicalResolution.width * MM_PER_PIXEL + 0.5); properties->physicalDimensions.height = + metadata->physical_height_cm ? + metadata->physical_height_cm * 10 : floor(properties->physicalResolution.height * MM_PER_PIXEL + 0.5); properties->supportedTransforms = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;