diff options
Diffstat (limited to 'recipes-graphics/xorg-xserver/xserver-xorg/0005-glamor-Stop-trying-to-store-the-pixmap-s-format-in-g.patch')
-rw-r--r-- | recipes-graphics/xorg-xserver/xserver-xorg/0005-glamor-Stop-trying-to-store-the-pixmap-s-format-in-g.patch | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/recipes-graphics/xorg-xserver/xserver-xorg/0005-glamor-Stop-trying-to-store-the-pixmap-s-format-in-g.patch b/recipes-graphics/xorg-xserver/xserver-xorg/0005-glamor-Stop-trying-to-store-the-pixmap-s-format-in-g.patch new file mode 100644 index 00000000..9a0aa7ab --- /dev/null +++ b/recipes-graphics/xorg-xserver/xserver-xorg/0005-glamor-Stop-trying-to-store-the-pixmap-s-format-in-g.patch @@ -0,0 +1,132 @@ +From 2498f6712c3b551c4d8104628aff78246b5cd6c8 Mon Sep 17 00:00:00 2001 +From: Eric Anholt <eric@anholt.net> +Date: Tue, 26 Mar 2019 15:58:59 -0700 +Subject: [PATCH 5/8] glamor: Stop trying to store the pixmap's "format" in + glamor_pixmap_fbo. + +"format" is a bit of a confused term (internalformat vs GL format), +and all we really needed was "is this GL_RED?" + +Upstream-Status: Backport +Signed-off-by: Eric Anholt <eric@anholt.net> +--- + glamor/glamor.c | 3 +-- + glamor/glamor_fbo.c | 7 ++++--- + glamor/glamor_priv.h | 13 ++----------- + glamor/glamor_render.c | 2 +- + glamor/glamor_transfer.c | 2 +- + 5 files changed, 9 insertions(+), 18 deletions(-) + +diff --git a/glamor/glamor.c b/glamor/glamor.c +index 3e9cf284c..c36b6ea74 100644 +--- a/glamor/glamor.c ++++ b/glamor/glamor.c +@@ -184,8 +184,7 @@ glamor_bind_texture(glamor_screen_private *glamor_priv, GLenum texture, + /* Is the operand a GL_RED fbo? + */ + +- if (glamor_fbo_red_is_alpha(glamor_priv, fbo)) { +- ++ if (fbo->is_red) { + /* If destination is also GL_RED, then preserve the bits in + * the R channel */ + +diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c +index f939a6c2f..58eb97bf4 100644 +--- a/glamor/glamor_fbo.c ++++ b/glamor/glamor_fbo.c +@@ -95,7 +95,7 @@ glamor_pixmap_ensure_fb(glamor_screen_private *glamor_priv, + + glamor_pixmap_fbo * + glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, +- int w, int h, GLenum format, GLint tex, int flag) ++ int w, int h, Bool is_red, GLint tex, int flag) + { + glamor_pixmap_fbo *fbo; + +@@ -106,7 +106,7 @@ glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, + fbo->tex = tex; + fbo->width = w; + fbo->height = h; +- fbo->format = format; ++ fbo->is_red = is_red; + + if (flag != GLAMOR_CREATE_FBO_NO_FBO) { + if (glamor_pixmap_ensure_fb(glamor_priv, fbo) != 0) { +@@ -163,7 +163,8 @@ glamor_create_fbo(glamor_screen_private *glamor_priv, + if (!tex) /* Texture creation failed due to GL_OUT_OF_MEMORY */ + return NULL; + +- return glamor_create_fbo_from_tex(glamor_priv, w, h, format, tex, flag); ++ return glamor_create_fbo_from_tex(glamor_priv, w, h, format == GL_RED, ++ tex, flag); + } + + /** +diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h +index a14aaf624..e70d349da 100644 +--- a/glamor/glamor_priv.h ++++ b/glamor/glamor_priv.h +@@ -317,8 +317,7 @@ typedef struct glamor_pixmap_fbo { + GLuint fb; /**< GL FBO name */ + int width; /**< width in pixels */ + int height; /**< height in pixels */ +- GLenum format; /**< GL format used to create the texture. */ +- GLenum type; /**< GL type used to create the texture. */ ++ Bool is_red; + } glamor_pixmap_fbo; + + typedef struct glamor_pixmap_clipped_regions { +@@ -533,7 +532,7 @@ glamor_pixmap_fbo *glamor_pixmap_detach_fbo(glamor_pixmap_private * + void glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo); + glamor_pixmap_fbo *glamor_create_fbo_from_tex(glamor_screen_private * + glamor_priv, int w, int h, +- GLenum format, GLint tex, ++ Bool is_red, GLint tex, + int flag); + glamor_pixmap_fbo *glamor_create_fbo(glamor_screen_private *glamor_priv, int w, + int h, GLenum format, int flag); +@@ -549,14 +548,6 @@ static inline Bool glamor_picture_is_alpha(PicturePtr picture) + return picture->format == PICT_a1 || picture->format == PICT_a8; + } + +-/* Return whether 'fbo' is storing alpha bits in the red channel */ +-static inline Bool +-glamor_fbo_red_is_alpha(glamor_screen_private *glamor_priv, glamor_pixmap_fbo *fbo) +-{ +- /* True when the format is GL_RED (that can only happen when our one channel format is GL_RED */ +- return fbo->format == GL_RED; +-} +- + /* Return whether 'picture' is storing alpha bits in the red channel */ + static inline Bool + glamor_picture_red_is_alpha(PicturePtr picture) +diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c +index d5737018f..6db6bfbc3 100644 +--- a/glamor/glamor_render.c ++++ b/glamor/glamor_render.c +@@ -529,7 +529,7 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit, + * sometimes get zero bits in the R channel, which is harmless. + */ + glamor_bind_texture(glamor_priv, GL_TEXTURE0 + unit, fbo, +- glamor_fbo_red_is_alpha(glamor_priv, dest_priv->fbo)); ++ dest_priv->fbo->is_red); + repeat_type = picture->repeatType; + switch (picture->repeatType) { + case RepeatNone: +diff --git a/glamor/glamor_transfer.c b/glamor/glamor_transfer.c +index 421ed3a5f..215752d7b 100644 +--- a/glamor/glamor_transfer.c ++++ b/glamor/glamor_transfer.c +@@ -40,7 +40,7 @@ glamor_format_for_pixmap(PixmapPtr pixmap, GLenum *format, GLenum *type) + break; + case 16: + if (priv->is_cbcr) { +- *format = priv->fbo->format; ++ *format = GL_RG; + *type = GL_UNSIGNED_BYTE; + } else { + *format = GL_RGB; +-- +2.17.1 + |