drm: add renderer parameter to pepper_drm_create()
authorJunghoon <jh13.son@samsung.com>
Thu, 25 Jun 2015 05:36:20 +0000 (14:36 +0900)
committerTaekyun Kim <tkq.kim@samsung.com>
Tue, 7 Jul 2015 06:56:51 +0000 (15:56 +0900)
Change-Id: I91d307a8648a93cebf378d76dc0f6fc44fd6f73a

drm/src/drm-common.c
drm/src/drm-internal.h
drm/src/drm-output.c
drm/src/pepper-drm.h
samples/src/drm-backend.c

index eba7bef..8568771 100644 (file)
@@ -6,7 +6,7 @@
 #include "drm-internal.h"
 
 PEPPER_API pepper_drm_t *
-pepper_drm_create(pepper_object_t *compositor, const char *device)
+pepper_drm_create(pepper_object_t *compositor, const char *device, const char *renderer)
 {
     pepper_drm_t    *drm;
 
@@ -35,7 +35,7 @@ pepper_drm_create(pepper_object_t *compositor, const char *device)
 
     wl_list_init(&drm->output_list);
 
-    if (!pepper_drm_output_create(drm))
+    if (!pepper_drm_output_create(drm, renderer))
     {
         PEPPER_ERROR("Failed to connect drm output in %s\n", __FUNCTION__);
         goto error;
@@ -55,6 +55,12 @@ pepper_drm_destroy(pepper_drm_t *drm)
 {
     drm_output_t *output, *next;
 
+    if (!drm)
+        return;
+
+    if (drm->renderer)
+        free(drm->renderer);
+
     if (drm->udev_monitor_source)
         wl_event_source_remove(drm->udev_monitor_source);
 
index 93d4ad1..44a7dd7 100644 (file)
@@ -41,6 +41,7 @@ struct pepper_drm
 
     struct gbm_device          *gbm_device;
 
+    char                       *renderer;
     pepper_renderer_t          *pixman_renderer;
     pepper_renderer_t          *gl_renderer;
 };
@@ -105,7 +106,7 @@ struct drm_fb
 };
 
 pepper_bool_t
-pepper_drm_output_create(pepper_drm_t *drm);
+pepper_drm_output_create(pepper_drm_t *drm, const char *renderer);
 
 void
 pepper_drm_output_destroy(drm_output_t *output);
index e6c96be..1c95c45 100644 (file)
@@ -631,7 +631,7 @@ fini_renderer(drm_output_t *output)
 
 static drm_output_t *
 drm_output_create(pepper_drm_t *drm, struct udev_device *device,
-                  drmModeRes *res, drmModeConnector *conn, const char *renderer)
+                  drmModeRes *res, drmModeConnector *conn)
 {
     int             i;
     drm_output_t   *output;
@@ -684,7 +684,7 @@ drm_output_create(pepper_drm_t *drm, struct udev_device *device,
         }
     }
 
-    if (!init_renderer(output, renderer))
+    if (!init_renderer(output, drm->renderer))
     {
         PEPPER_ERROR("Failed to initialize renderer in %s\n", __FUNCTION__);
         goto error;
@@ -742,7 +742,7 @@ add_outputs(pepper_drm_t *drm, struct udev_device *device)
         }
 
         /* TODO: Get renderer string from somewhere else. i.e. config file. */
-        output = drm_output_create(drm, device, res, conn, "pixman");
+        output = drm_output_create(drm, device, res, conn);
         if (!output)
         {
             PEPPER_ERROR("Failed to create drm_output in %s\n", __FUNCTION__);
@@ -861,7 +861,7 @@ update_outputs(pepper_drm_t *drm, struct udev_device *device)
         else if (!output && conn->connection == DRM_MODE_CONNECTED)
         {
             /* TODO: Get renderer string from somewhere else. */
-            output = drm_output_create(drm, device, res, conn, "pixman");
+            output = drm_output_create(drm, device, res, conn);
             if (!output)
             {
                 PEPPER_ERROR("Failed to create drm_output in %s\n", __FUNCTION__);
@@ -913,7 +913,7 @@ done:
 }
 
 pepper_bool_t
-pepper_drm_output_create(pepper_drm_t *drm)
+pepper_drm_output_create(pepper_drm_t *drm, const char *renderer)
 {
     struct udev_device      *drm_device;
     const char              *filepath;
@@ -952,6 +952,9 @@ pepper_drm_output_create(pepper_drm_t *drm)
         goto error;
     }
 
+    if (renderer)
+        drm->renderer = strdup(renderer);
+
     /* create gl-renderer & pixman-renderer */
     drm->gbm_device = gbm_create_device(drm->drm_fd);
     if (drm->gbm_device)
index 68019b6..91b32cd 100644 (file)
@@ -10,7 +10,7 @@ extern "C" {
 typedef struct pepper_drm   pepper_drm_t;
 
 PEPPER_API pepper_drm_t *
-pepper_drm_create(pepper_object_t *compositor, const char *device);
+pepper_drm_create(pepper_object_t *compositor, const char *device, const char *renderer);
 
 PEPPER_API void
 pepper_drm_destroy(pepper_drm_t *drm);
index edf51aa..bf0f920 100644 (file)
@@ -41,7 +41,7 @@ main(int argc, char **argv)
     compositor = pepper_compositor_create("wayland-0");
     PEPPER_ASSERT(compositor);
 
-    drm = pepper_drm_create(compositor, "");
+    drm = pepper_drm_create(compositor, ""/*device*/, "gl"/*renderer*/);
     PEPPER_ASSERT(drm);
 
     if (!pepper_desktop_shell_init(compositor))