From 03795b89d419fc7501fec7eff25981d4dc960316 Mon Sep 17 00:00:00 2001 From: "deasung.kim" Date: Wed, 19 Oct 2016 18:10:24 +0900 Subject: [PATCH] display: fill some TODO in add_tdm_output physical size and some error check some tdm_output has no mode call physical_display_init on constructure Change-Id: I203dc383659e67292e614ffd64e8ef12c7be5d01 --- src/wsi/display.c | 39 ++++++++++++++++++++++++--------------- src/wsi/icd.c | 3 +++ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/wsi/display.c b/src/wsi/display.c index bcc44d0..0a9b41d 100644 --- a/src/wsi/display.c +++ b/src/wsi/display.c @@ -63,6 +63,7 @@ add_tdm_output(vk_physical_device_t *pdev, tdm_output *output) vk_display_t *display = &pdev->displays[pdev->display_count]; const char *str; unsigned int w, h; + int r_w, r_h; int count, i; const tdm_output_mode *modes; tdm_error error; @@ -70,20 +71,23 @@ add_tdm_output(vk_physical_device_t *pdev, tdm_output *output) display->pdev = pdev; display->tdm_output = output; + display->built_in_modes = NULL; + display->built_in_mode_count = 0; /* Initialize modes. */ tdm_output_get_available_modes(output, &modes, &count); - VK_ASSERT(count > 0); - - display->built_in_modes = calloc(count, sizeof(vk_display_mode_t)); - VK_CHECK(display->built_in_modes, return, "calloc() failed.\n"); - - for (i = 0; i < count; i++) { - display->built_in_modes[i].display = display; - display->built_in_modes[i].prop.displayMode = - VK_TO_HANDLE(VkDisplayModeKHR, &display->built_in_modes[i]); - display->built_in_modes[i].prop.parameters.visibleRegion.width = modes[i].hdisplay; - display->built_in_modes[i].prop.parameters.visibleRegion.height = modes[i].vdisplay; - display->built_in_modes[i].prop.parameters.refreshRate = modes[i].vrefresh; + if (count > 0) { + display->built_in_modes = calloc(count, sizeof(vk_display_mode_t)); + VK_CHECK(display->built_in_modes, return, "calloc() failed.\n"); + + for (i = 0; i < count; i++) { + display->built_in_modes[i].display = display; + display->built_in_modes[i].prop.displayMode = + VK_TO_HANDLE(VkDisplayModeKHR, &display->built_in_modes[i]); + display->built_in_modes[i].prop.parameters.visibleRegion.width = modes[i].hdisplay; + display->built_in_modes[i].prop.parameters.visibleRegion.height = modes[i].vdisplay; + display->built_in_modes[i].prop.parameters.refreshRate = modes[i].vrefresh; + } + display->built_in_mode_count = count; } display->custom_mode_count = 0; @@ -92,14 +96,19 @@ add_tdm_output(vk_physical_device_t *pdev, tdm_output *output) /* Initialize prop. */ display->prop.display = VK_TO_HANDLE(VkDisplayKHR, display); - tdm_output_get_model_info(output, NULL, NULL, &str); + error = tdm_output_get_model_info(output, NULL, NULL, &str); + VK_CHECK(error == TDM_ERROR_NONE, return, "tdm_output_get_model_info failed.\n"); display->prop.displayName = strdup(str); - tdm_output_get_physical_size(output, &w, &h); + error = tdm_output_get_physical_size(output, &w, &h); + VK_CHECK(error == TDM_ERROR_NONE, return, "tdm_output_get_tdm_output_get_physical_size failed.\n"); display->prop.physicalDimensions.width = w; display->prop.physicalDimensions.height = h; - /* TODO: Physical Resolution */ + error = tdm_output_get_available_size(output, NULL, NULL, &r_w, &r_h, NULL); + VK_CHECK(error == TDM_ERROR_NONE, return, "tdm_output_get_available_size failed.\n"); + display->prop.physicalResolution.width = r_w; + display->prop.physicalResolution.height = r_h; /* TODO: Transform */ display->prop.supportedTransforms = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; diff --git a/src/wsi/icd.c b/src/wsi/icd.c index 6fcc199..6c52139 100644 --- a/src/wsi/icd.c +++ b/src/wsi/icd.c @@ -111,11 +111,14 @@ module_init(void) icd.instance_extension_count = count + ARRAY_LENGTH(wsi_instance_extensions); dev.pdev = VK_NULL_HANDLE; + vk_physical_device_init_display(&dev); } static void __attribute__((destructor)) module_fini(void) { + vk_physical_device_fini_display(&dev); + if (icd.lib) dlclose(icd.lib); } -- 2.7.4