diff options
author | Anuj Phogat <[email protected]> | 2015-06-11 16:44:45 -0700 |
---|---|---|
committer | Anuj Phogat <[email protected]> | 2015-07-24 10:48:58 -0700 |
commit | bbbefec7323d0a338346233ab4ab715bcf4e1b78 (patch) | |
tree | f72cafbbea43a6c48b68d46951e5c93475ba7cf8 /src/mesa/drivers | |
parent | ca4e17e03e9aeaa04fe6bb04bfe2d6f97991005b (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')
-rw-r--r-- | src/mesa/drivers/common/meta.c | 13 |
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). */ |