[PATCH xserver] glamor: keep gl_fbo and fbo consistent
Olivier Fourdan
ofourdan at redhat.com
Tue Jan 24 10:33:10 UTC 2017
Hi
> If the pixmap type is neither GLAMOR_TEXTURE_ONLY nor GLAMOR_TEXTURE_DRM
> we might have the fbo field set but the gl_fbo still set to the default
> GLAMOR_FBO_UNATTACHED, which later may fail an assert in
> glamor_upload_picture_to_texture().
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99346
> Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
> ---
> glamor/glamor_render.c | 8 ++++++++
> glamor/glamor_utils.h | 4 ++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
> index e04dd21..a9ab971 100644
> --- a/glamor/glamor_render.c
> +++ b/glamor/glamor_render.c
> @@ -916,6 +916,10 @@ glamor_composite_choose_shader(CARD8 op,
> }
> if (source_pixmap_priv->gl_fbo == GLAMOR_FBO_UNATTACHED) {
> #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD
> + if (!GLAMOR_PIXMAP_PRIV_HAS_TEXTURE(source_pixmap_priv)) {
> + glamor_fallback("no texture in source\n");
> + goto fail;
> + }
> source_needs_upload = TRUE;
> #else
> glamor_fallback("no texture in source\n");
> @@ -932,6 +936,10 @@ glamor_composite_choose_shader(CARD8 op,
> }
> if (mask_pixmap_priv->gl_fbo == GLAMOR_FBO_UNATTACHED) {
> #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD
> + if (!GLAMOR_PIXMAP_PRIV_HAS_TEXTURE(mask_pixmap_priv)) {
> + glamor_fallback("no texture in mask\n");
> + goto fail;
> + }
> mask_needs_upload = TRUE;
> #else
> glamor_fallback("no texture in mask\n");
> diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
> index 6b88527..636c095 100644
> --- a/glamor/glamor_utils.h
> +++ b/glamor/glamor_utils.h
> @@ -585,6 +585,10 @@
>
> #define GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv) (pixmap_priv->gl_fbo ==
> GLAMOR_FBO_NORMAL)
>
> +#define GLAMOR_PIXMAP_PRIV_HAS_TEXTURE(pixmap_priv) ( \
> + pixmap_priv->type == GLAMOR_TEXTURE_DRM \
> + || pixmap_priv->type == GLAMOR_TEXTURE_ONLY)
> +
> /**
> * Borrow from uxa.
> */
> --
> 2.9.3
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.
Cheers,
Olivier
More information about the xorg-devel
mailing list