aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/common/meta.c
diff options
context:
space:
mode:
authorAnuj Phogat <[email protected]>2015-06-11 16:44:45 -0700
committerAnuj Phogat <[email protected]>2015-07-24 10:48:58 -0700
commitbbbefec7323d0a338346233ab4ab715bcf4e1b78 (patch)
treef72cafbbea43a6c48b68d46951e5c93475ba7cf8 /src/mesa/drivers/common/meta.c
parentca4e17e03e9aeaa04fe6bb04bfe2d6f97991005b (diff)
mesa: Set green, blue channels to zero only for formats with these components
This is an optimization which avoids setting pixel transfer operations when not required. _mesa_ReadPixels falls back to slower path if transfer operations are set. Signed-off-by: Anuj Phogat <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]>
Diffstat (limited to 'src/mesa/drivers/common/meta.c')
-rw-r--r--src/mesa/drivers/common/meta.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index ca10bbe81f6..826f2239d11 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -3159,9 +3159,16 @@ decompress_texture_image(struct gl_context *ctx,
* returned as red and two-channel texture values are returned as
* red/alpha.
*/
- if ((baseTexFormat == GL_LUMINANCE ||
- baseTexFormat == GL_LUMINANCE_ALPHA ||
- baseTexFormat == GL_INTENSITY) ||
+ if (((baseTexFormat == GL_LUMINANCE ||
+ baseTexFormat == GL_LUMINANCE_ALPHA ||
+ baseTexFormat == GL_INTENSITY) &&
+ (destBaseFormat == GL_RGBA ||
+ destBaseFormat == GL_RGB ||
+ destBaseFormat == GL_RG ||
+ destBaseFormat == GL_GREEN ||
+ destBaseFormat == GL_BLUE ||
+ destBaseFormat == GL_BGRA ||
+ destBaseFormat == GL_BGR)) ||
/* If we're reading back an RGB(A) texture (using glGetTexImage) as
* luminance then we need to return L=tex(R).
*/