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?" Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
1b2e224d7d
commit
34485be256
|
@ -169,8 +169,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 */
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -311,8 +311,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 {
|
||||
|
@ -527,7 +526,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);
|
||||
|
@ -542,14 +541,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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user