Mesa (master): meta/GetTexSubImage: Account for GL_PACK_SKIP_IMAGES on compressed textures
Eduardo Lima Mitev
elima at kemper.freedesktop.org
Tue Nov 15 11:27:50 UTC 2016
Module: Mesa
Branch: master
Commit: e73513f3c85f45a05a23dbdcda7901812fc4d4fa
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e73513f3c85f45a05a23dbdcda7901812fc4d4fa
Author: Eduardo Lima Mitev <elima at igalia.com>
Date: Mon Nov 14 15:25:14 2016 -0800
meta/GetTexSubImage: Account for GL_PACK_SKIP_IMAGES on compressed textures
This option was being ignored when packing compressed 3D and cube textures.
Fixes CTS test (on gen8+):
* GL45-CTS.gtf32.GL3Tests.packed_pixels.packed_pixels_pixelstore
v2: Drop API checks.
v3 (Ken): Just apply the existing code in more cases.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/common/meta.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 5ab1e6c..99c85cf 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -3243,8 +3243,20 @@ _mesa_meta_GetTexSubImage(struct gl_context *ctx,
for (slice = 0; slice < depth; slice++) {
void *dst;
- if (texImage->TexObject->Target == GL_TEXTURE_2D_ARRAY
- || texImage->TexObject->Target == GL_TEXTURE_CUBE_MAP_ARRAY) {
+ /* Section 8.11.4 (Texture Image Queries) of the GL 4.5 spec says:
+ *
+ * "For three-dimensional, two-dimensional array, cube map array,
+ * and cube map textures pixel storage operations are applied as
+ * if the image were two-dimensional, except that the additional
+ * pixel storage state values PACK_IMAGE_HEIGHT and
+ * PACK_SKIP_IMAGES are applied. The correspondence of texels to
+ * memory locations is as defined for TexImage3D in section 8.5."
+ */
+ switch (texImage->TexObject->Target) {
+ case GL_TEXTURE_3D:
+ case GL_TEXTURE_2D_ARRAY:
+ case GL_TEXTURE_CUBE_MAP:
+ case GL_TEXTURE_CUBE_MAP_ARRAY: {
/* Setup pixel packing. SkipPixels and SkipRows will be applied
* in the decompress_texture_image() function's call to
* glReadPixels but we need to compute the dest slice's address
@@ -3255,9 +3267,11 @@ _mesa_meta_GetTexSubImage(struct gl_context *ctx,
packing.SkipRows = 0;
dst = _mesa_image_address3d(&packing, pixels, width, height,
format, type, slice, 0, 0);
+ break;
}
- else {
+ default:
dst = pixels;
+ break;
}
result = decompress_texture_image(ctx, texImage, slice,
xoffset, yoffset, width, height,
More information about the mesa-commit
mailing list