aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-graphics/xorg-xserver/xserver-xorg/0005-glamor-Stop-trying-to-store-the-pixmap-s-format-in-g.patch
blob: 9a0aa7abe98ed792dac82e311a3f9a5b91913fe5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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