[PATCH xserver] glamor: keep gl_fbo and fbo consistent

Olivier Fourdan ofourdan at redhat.com
Tue Jan 24 15:01:05 UTC 2017


> There is a fundamental logical problem with this patch though, because
> glamor_upload_picture_to_texture() does:
> 
>   assert(glamor_pixmap_is_memory(pixmap));
> 
> which is basically priv->type == GLAMOR_MEMORY;
> 
> So glamor_upload_picture_to_texture() clearly expects a pixmap of type
> GLAMOR_MEMORY which my patch avoids, so the patch is clearly not right... I
> mean, it avoids the assert() failure but it disables the entire logic.

Oh, I reckon this it pretty obvious though... Sorry I did not spot this before, took me a while to figure that, but this is because of CA_TWO_PASS (that's even obious from the backtrace frame #5 in bug 99346 [0])

In glamor_composite_with_shader() [1] we call glamor_composite_choose_shader() twice in a row when CA_TWO_PASS is set [2], the first call works, but the second reaches the assertion failure set by commit ee7ca67 [3].

This is because glamor_composite_choose_shader() calls glamor_upload_picture_to_texture() which in turn calls glamor_pixmap_ensure_fbo() which sets the fbo on the first call, which cause the assert to be reached on the second.

So I suspect commit ee7ca67 [3] and commit 1bed5ef [4] can't work with CA_TWO_PASS

Cheers,
Olivier

[0] https://bugs.freedesktop.org/show_bug.cgi?id=99346#c0
[1] https://cgit.freedesktop.org/xorg/xserver/tree/glamor/glamor_render.c#n1112
[2] https://cgit.freedesktop.org/xorg/xserver/tree/glamor/glamor_render.c#n1142
[3] https://cgit.freedesktop.org/xorg/xserver/commit/?id=ee7ca67
[4] https://cgit.freedesktop.org/xorg/xserver/commit/?id=1bed5ef


More information about the xorg-devel mailing list