display: fill some TODO in add_tdm_output 81/102981/2
authordeasung.kim <deasung.kim@samsung.com>
Wed, 19 Oct 2016 09:10:24 +0000 (18:10 +0900)
committerGwan-gyeong Mun <kk.moon@samsung.com>
Wed, 11 Jan 2017 04:25:01 +0000 (20:25 -0800)
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
src/wsi/icd.c

index bcc44d0..0a9b41d 100644 (file)
@@ -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;
index 6fcc199..6c52139 100644 (file)
@@ -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);
 }