summaryrefslogtreecommitdiff
path: root/glamor/glamor.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-12-28 13:46:17 -0800
committerEric Anholt <eric@anholt.net>2014-03-17 14:30:45 -0700
commit12b2adaaeb091ad48825f439fa0359e5641c86d1 (patch)
tree0655df34b252e3465f20bfaa5ff2aeac33330b02 /glamor/glamor.c
parentdf1ef90fa0f98c779c3f312130183dbf32f1e447 (diff)
glamor: Do glyph private init at screeninit time, and other stuff at CSR.
This hasn't actually been a problem, since the server hasn't allocated any glyphs before our glyph private initialization during CreateScreenResources. But it's generally not X Server style to do things this way. Now that glamor itself drives both parts of glyphs setup, DDX drivers no longer need to tell glamor to initialize glyphs. We do retain the old public symbol so they can keep running with no changes. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Markus Wick <markus@selfnet.de>
Diffstat (limited to 'glamor/glamor.c')
-rw-r--r--glamor/glamor.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/glamor/glamor.c b/glamor/glamor.c
index e85617927..e298b04cb 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -271,6 +271,29 @@ glamor_set_debug_level(int *debug_level)
int glamor_debug_level;
+/**
+ * Creates any pixmaps used internally by glamor, since those can't be
+ * allocated at ScreenInit time.
+ */
+static Bool
+glamor_create_screen_resources(ScreenPtr screen)
+{
+ glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
+ Bool ret = TRUE;
+
+ screen->CreateScreenResources =
+ glamor_priv->saved_procs.create_screen_resources;
+ if (screen->CreateScreenResources)
+ ret = screen->CreateScreenResources(screen);
+ screen->CreateScreenResources = glamor_create_screen_resources;
+
+ if (!glamor_realize_glyph_caches(screen)) {
+ ErrorF("Failed to initialize glyph cache\n");
+ ret = FALSE;
+ }
+
+ return ret;
+}
/** Set up glamor for an already-configured GL context. */
Bool
@@ -374,6 +397,10 @@ glamor_init(ScreenPtr screen, unsigned int flags)
glamor_priv->saved_procs.close_screen = screen->CloseScreen;
screen->CloseScreen = glamor_close_screen;
+ glamor_priv->saved_procs.create_screen_resources =
+ screen->CreateScreenResources;
+ screen->CreateScreenResources = glamor_create_screen_resources;
+
if (flags & GLAMOR_USE_SCREEN) {
if (!RegisterBlockAndWakeupHandlers(_glamor_block_handler,
_glamor_wakeup_handler,
@@ -457,6 +484,7 @@ glamor_init(ScreenPtr screen, unsigned int flags)
glamor_init_xv_shader(screen);
#endif
glamor_pixmap_init(screen);
+ glamor_glyphs_init(screen);
glamor_priv->flags = flags;
glamor_priv->screen = screen;
@@ -535,6 +563,8 @@ glamor_close_screen(ScreenPtr screen)
flags = glamor_priv->flags;
glamor_glyphs_fini(screen);
screen->CloseScreen = glamor_priv->saved_procs.close_screen;
+ screen->CreateScreenResources =
+ glamor_priv->saved_procs.create_screen_resources;
if (flags & GLAMOR_USE_SCREEN) {
screen->CreateGC = glamor_priv->saved_procs.create_gc;