glamor performance regression

Michel Dänzer michel at daenzer.net
Thu Mar 13 20:07:54 PDT 2014


On Don, 2014-03-13 at 10:43 -0700, Eric Anholt wrote:
> Michel Dänzer <michel at daenzer.net> writes:
> 
> > On Mon, 2014-03-10 at 14:10 -0700, Keith Packard wrote:
> >> 
> >> commit 25be6b384298a7769fedb6d9b5bdc370398c9c95
> >> Author: Eric Anholt <eric at anholt.net>
> >> Date:   Sun Jan 12 07:18:50 2014 +0800
> >> 
> >>     glamor: Fix a mismatched glamor_get/put_context().
> >>     
> >>     We don't call GL in this function any more, so we can just drop the
> >>     get.
> >>     
> >>     Signed-off-by: Eric Anholt <eric at anholt.net>
> >>     Reviewed-by: Markus Wick <markus at selfnet.de>
> >
> > This commit made glamor unusably slow with radeonsi, at least an order
> > of magnitude slower than before.
> >
> > Eric's pending change 'glamor: Drop the set of the context to NULL at
> > the end of glamor ops.' fixes the performance regression with Xephyr,
> > but obviously doesn't help Xorg. The standalone glamor tree doesn't have
> > this problem, even though the corresponding context calls are balanced
> > there.
> >
> > Eric, any ideas?
> 
> We need to delete the context unset in EGL, too, and actually fix things
> correctly.

Hmm, the patch below indeed fixes the performance regression with Xorg.
But attempting to do GLX indirect rendering crashes the server, and more
importantly, I can't even complete a piglit run, because
glx-make-current-multi-process crashes the server as well. That crash
was fixed in the standalone glamor tree by commit
cccfea4454949e3e376be42bb230603848997195 ('Fix a missing MakeCurrent in
glamor_egl_create_argb8888_based_texture'), but the corresponding change
in xserver doesn't prevent the crash right now.

I might have to switch back to the standalone glamor tree until there's
a solution for this. Any ideas for a solution?


diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c
index 05e6bd0..1935529 100644
--- a/glamor/glamor_egl.c
+++ b/glamor/glamor_egl.c
@@ -118,11 +118,7 @@ glamor_egl_get_context(struct glamor_context *glamor_ctx)
 static void
 glamor_egl_put_context(struct glamor_context *glamor_ctx)
 {
-    if (--glamor_ctx->get_count)
-        return;
-
-    eglMakeCurrent(glamor_ctx->display, EGL_NO_SURFACE,
-                   EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    --glamor_ctx->get_count;
 }

 static EGLImageKHR


-- 
Earthling Michel Dänzer            |                  http://www.amd.com
Libre software enthusiast          |                Mesa and X developer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 173 bytes
Desc: This is a digitally signed message part
URL: <http://lists.x.org/archives/xorg-devel/attachments/20140314/c4a6f2fa/attachment.pgp>


More information about the xorg-devel mailing list