Address Chris comment. We concentrate all the flag check into
intel_glamor layer which makes the interface to glamor
self-contained.

Signed-off-by: Zhigang Gong <zhigang.g...@linux.intel.com>
---
 src/Makefile.am    |    6 +---
 src/intel_driver.c |   25 +++++------------
 src/intel_glamor.c |   75 +++++++++++++++++++++++++++++++++++++++++++++------
 src/intel_uxa.c    |   31 +++++----------------
 4 files changed, 82 insertions(+), 55 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 1a29390..12ff6ee 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,10 +40,6 @@ SUBDIRS += sna
 intel_drv_la_LIBADD += sna/libsna.la
 endif
 
-if GLAMOR
-GLAMOR_SOURCE = intel_glamor.c
-endif
-
 NULL:=#
 
 intel_drv_la_SOURCES = \
@@ -74,7 +70,7 @@ intel_drv_la_SOURCES = \
         i965_3d.c \
         i965_video.c \
         i965_render.c \
-        $(GLAMOR_SOURCE) \
+        intel_glamor.c \
         $(NULL)
 
 if DRI
diff --git a/src/intel_driver.c b/src/intel_driver.c
index 0f528f3..2cc418e 100644
--- a/src/intel_driver.c
+++ b/src/intel_driver.c
@@ -714,19 +714,12 @@ static Bool I830PreInit(ScrnInfoPtr scrn, int flags)
                return FALSE;
        }
 
-#ifdef GLAMOR
-        /* Load glamor module */
-        if (!xf86LoadSubModule(scrn, "glamor_egl")) {
-                PreInitCleanup(scrn);
-                return FALSE;
-        }
-
-        if (!intel_glamor_pre_init(scrn)) {
-               xf86DrvMsg(scrn->scrnIndex, X_ERROR,
-                          "Failed to pre init glamor display.\n");
-               return FALSE;
-        }
-#endif
+       if (!intel_glamor_pre_init(scrn)) {
+               PreInitCleanup(scrn);
+               xf86DrvMsg(scrn->scrnIndex, X_ERROR,
+                       "Failed to pre init glamor display.\n");
+               return FALSE;
+       }
 
        /* Load the dri2 module if requested. */
        if (intel->directRenderingType != DRI_DISABLED)
@@ -1126,8 +1119,7 @@ static void I830FreeScreen(int scrnIndex, int flags)
        ScrnInfoPtr scrn = xf86Screens[scrnIndex];
        intel_screen_private *intel = intel_get_screen_private(scrn);
 
-       if (intel->uxa_flags & UXA_GLAMOR_FLAGS)
-               intel_glamor_free_screen(scrnIndex, flags);
+       intel_glamor_free_screen(scrnIndex, flags);
 
        if (intel) {
                intel_mode_fini(intel);
@@ -1208,8 +1200,7 @@ static Bool I830CloseScreen(int scrnIndex, ScreenPtr 
screen)
 
        DeleteCallback(&FlushCallback, intel_flush_callback, scrn);
 
-       if (intel->uxa_flags & UXA_GLAMOR_FLAGS)
-               intel_glamor_close_screen(screen);
+       intel_glamor_close_screen(screen);
 
        if (intel->uxa_driver) {
                uxa_driver_fini(screen);
diff --git a/src/intel_glamor.c b/src/intel_glamor.c
index cadfc71..80cde40 100644
--- a/src/intel_glamor.c
+++ b/src/intel_glamor.c
@@ -48,6 +48,9 @@ intel_glamor_create_screen_resources(ScreenPtr screen)
        ScrnInfoPtr scrn = xf86Screens[screen->myNum];
        intel_screen_private *intel = intel_get_screen_private(scrn);
 
+       if (!(intel->uxa_flags & UXA_GLAMOR_FLAGS))
+               return TRUE;
+
        if (!glamor_glyphs_init(screen))
                return FALSE;
        if (!glamor_egl_create_textured_screen(screen,
@@ -60,57 +63,100 @@ intel_glamor_create_screen_resources(ScreenPtr screen)
 Bool
 intel_glamor_pre_init(ScrnInfoPtr scrn)
 {
+#ifdef GLAMOR
        intel_screen_private *intel;
        intel = intel_get_screen_private(scrn);
+
+       /* Load glamor module */
+       if (!xf86LoadSubModule(scrn, "glamor_egl")) 
+               return FALSE;
+
        return glamor_egl_init(scrn, intel->drmSubFD);
+#else
+       return TRUE;
+#endif
 }
 
 Bool
 intel_glamor_create_textured_pixmap(PixmapPtr pixmap)
 {
        struct intel_pixmap *priv;
+       ScrnInfoPtr scrn = xf86Screens[pixmap->drawable.pScreen->myNum];
+       intel_screen_private * intel;
+       
        priv = intel_get_pixmap_private(pixmap);
-       return glamor_egl_create_textured_pixmap(pixmap, priv->bo->handle,
-                                                priv->stride);
+       intel = intel_get_screen_private(scrn);
+       if ((intel->uxa_flags & UXA_GLAMOR_FLAGS)
+            && glamor_egl_create_textured_pixmap(pixmap, priv->bo->handle,
+                                                 priv->stride)) {
+               priv->pinned = 1;
+               return TRUE;
+       }
+       return FALSE;
 }
 
 void
 intel_glamor_destroy_pixmap(PixmapPtr pixmap)
 {
-       glamor_egl_destroy_textured_pixmap(pixmap);
+       ScrnInfoPtr scrn = xf86Screens[pixmap->drawable.pScreen->myNum];
+       intel_screen_private * intel;
+
+       intel = intel_get_screen_private(scrn);
+       if (intel->uxa_flags & UXA_GLAMOR_FLAGS)
+               glamor_egl_destroy_textured_pixmap(pixmap);
 }
 
 Bool
 intel_glamor_init(ScreenPtr screen)
 {
+#ifdef GLAMOR
        ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+       intel_screen_private * intel;
+
 
        if (!glamor_init(screen, GLAMOR_INVERTED_Y_AXIS)) {
                xf86DrvMsg(scrn->scrnIndex, X_ERROR,
                           "Failed to initialize glamor\n");
-               return FALSE;
+               goto fail;
        }
 
        if (!glamor_egl_init_textured_pixmap(screen)) {
                xf86DrvMsg(scrn->scrnIndex, X_ERROR,
-                          "Failed to initialize glamor\n");
-               return FALSE;
+                          "Failed to initialize textured pixmap.\n");
+               goto fail;
        }
 
+       intel = intel_get_screen_private(scrn);
+       intel->uxa_driver->flags |= UXA_USE_GLAMOR;
+       intel->uxa_flags = intel->uxa_driver->flags;
+
+       xf86DrvMsg(scrn->scrnIndex, X_INFO,
+                  "Use GLAMOR acceleration.\n");
        return TRUE;
+
+  fail:
+       xf86DrvMsg(scrn->scrnIndex, X_WARNING,
+                  "Use standard UXA acceleration.");
+       return FALSE;
+#else
+       return TRUE;
+#endif
 }
 
 void
 intel_glamor_block_handler(intel_screen_private * intel)
 {
        ScreenPtr screen = screenInfo.screens[intel->scrn->scrnIndex];
-       glamor_block_handler(screen);
+
+       if (intel->uxa_flags & UXA_GLAMOR_FLAGS)
+               glamor_block_handler(screen);
 }
 
 Bool
 intel_glamor_create_screen_image(ScreenPtr screen, int handle, int stride)
 {
        PixmapPtr pixmap;
+
        if (!glamor_egl_create_textured_screen(screen, handle, stride))
                return FALSE;
        pixmap = screen->GetScreenPixmap(screen);
@@ -120,11 +166,22 @@ intel_glamor_create_screen_image(ScreenPtr screen, int 
handle, int stride)
 Bool
 intel_glamor_close_screen(ScreenPtr screen)
 {
-       return glamor_egl_close_screen(screen);
+       ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+       intel_screen_private * intel;
+
+       intel = intel_get_screen_private(scrn);
+       if (intel && (intel->uxa_flags & UXA_GLAMOR_FLAGS))
+               return glamor_egl_close_screen(screen);
+       return TRUE;
 }
 
 void
 intel_glamor_free_screen(int scrnIndex, int flags)
 {
-       glamor_egl_free_screen(scrnIndex, GLAMOR_EGL_EXTERNAL_BUFFER);
+       ScrnInfoPtr scrn = xf86Screens[scrnIndex];
+       intel_screen_private * intel;
+       
+       intel = intel_get_screen_private(scrn);
+       if (intel && (intel->uxa_flags & UXA_GLAMOR_FLAGS))
+               glamor_egl_free_screen(scrnIndex, GLAMOR_EGL_EXTERNAL_BUFFER);
 }
diff --git a/src/intel_uxa.c b/src/intel_uxa.c
index 81d5ec0..5202076 100644
--- a/src/intel_uxa.c
+++ b/src/intel_uxa.c
@@ -966,8 +966,7 @@ void intel_uxa_block_handler(intel_screen_private *intel)
         * and beyond rendering results may not hit the
         * framebuffer until significantly later.
         */
-       if (intel->uxa_flags & UXA_GLAMOR_FLAGS)
-               intel_glamor_block_handler(intel);
+       intel_glamor_block_handler(intel);
        intel_flush_rendering(intel);
 }
 
@@ -1100,10 +1099,7 @@ intel_uxa_create_pixmap(ScreenPtr screen, int w, int h, 
int depth,
                list_init(&priv->flush);
                intel_set_pixmap_private(pixmap, priv);
 
-               if (intel->uxa_flags & UXA_GLAMOR_FLAGS) {
-                       priv->pinned = 1;
-                       intel_glamor_create_textured_pixmap(pixmap);
-               }
+               intel_glamor_create_textured_pixmap(pixmap);
        }
 
        return pixmap;
@@ -1111,11 +1107,8 @@ intel_uxa_create_pixmap(ScreenPtr screen, int w, int h, 
int depth,
 
 static Bool intel_uxa_destroy_pixmap(PixmapPtr pixmap)
 {
-       ScrnInfoPtr scrn = xf86Screens[pixmap->drawable.pScreen->myNum];
-       intel_screen_private *intel = intel_get_screen_private(scrn);
        if (pixmap->refcnt == 1) {
-               if (intel->uxa_flags & UXA_GLAMOR_FLAGS)
-                       intel_glamor_destroy_pixmap(pixmap);
+               intel_glamor_destroy_pixmap(pixmap);
                intel_set_pixmap_bo(pixmap, NULL);
        }
        fbDestroyPixmap(pixmap);
@@ -1148,8 +1141,7 @@ Bool intel_uxa_create_screen_resources(ScreenPtr screen)
                scrn->displayWidth = intel->front_pitch / intel->cpp;
        }
 
-       if ((intel->uxa_flags & UXA_GLAMOR_FLAGS)
-           && !intel_glamor_create_screen_resources(screen))
+       if (!intel_glamor_create_screen_resources(screen))
                return FALSE;
 
        return TRUE;
@@ -1313,17 +1305,8 @@ Bool intel_uxa_init(ScreenPtr screen)
 
        uxa_set_fallback_debug(screen, intel->fallback_debug);
        uxa_set_force_fallback(screen, intel->force_fallback);
-#ifdef GLAMOR
-       if (intel_glamor_init(screen)) {
-               xf86DrvMsg(scrn->scrnIndex, X_INFO,
-                          "Intel GLAMOR initialization successfully.\n");
-               intel->uxa_driver->flags |= UXA_USE_GLAMOR;
-               intel->uxa_flags = intel->uxa_driver->flags;
-       } else {
-               xf86DrvMsg(scrn->scrnIndex, X_WARNING,
-                          "Intel GLAMOR initialization failed," 
-                          "change to use standard UXA.\n");
-       }
-#endif
+
+       intel_glamor_init(screen);
+
        return TRUE;
 }
-- 
1.7.4.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to