[Intel-gfx] [PATCH 1/2] glamor: Move flags check to intel_glamor.

Zhigang Gong zhigang.gong at linux.intel.com
Tue Nov 15 12:36:13 CET 2011


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.gong at 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




More information about the Intel-gfx mailing list