summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntia Puentes <[email protected]>2016-09-03 03:04:37 +0200
committerAntia Puentes <[email protected]>2016-09-10 12:52:32 +0200
commit83e8617f4b13e75f44ba45dd156c0656a5e07b08 (patch)
tree1c5ce0063cf3d743553d803583973fac9f2002c1
parent08bcbfdc07ed6ba371998b00deb7a2a67357c6af (diff)
i965: Fix calculation of the image height at start level
- Fixes CTS tests: * GL44-CTS.shader_image_size.advanced-nonMS-cs-float * GL44-CTS.shader_image_size.advanced-nonMS-cs-int * GL44-CTS.shader_image_size.advanced-nonMS-cs-uint * GL44-CTS.shader_image_size.advanced-nonMS-gs-float * GL44-CTS.shader_image_size.advanced-nonMS-gs-int * GL44-CTS.shader_image_size.advanced-nonMS-gs-uint * GL44-CTS.shader_image_size.advanced-nonMS-tes-float * GL44-CTS.shader_image_size.advanced-nonMS-tes-int * GL44-CTS.shader_image_size.advanced-nonMS-tes-uint * GL44-CTS.shader_image_size.advanced-nonMS-vs-float * GL44-CTS.shader_image_size.advanced-nonMS-vs-int * GL44-CTS.shader_image_size.advanced-nonMS-vs-uint v1: (written by Dave Airlie) Always shift height images for levels. Fixed the CTS test. v2: Only shift height if the texture is not an 1D_ARRAY, it fixes assertion in GL44-CTS.texture_view.gettexparameter due to the original patch (Antia). v3: Remove the loop. Do not shift height either for 1D textures. Use an explicit switch and add an assertion (levels == 0) for multisampled textures (Jason). v4: Rectangle textures can not have levels either (Ilia Mirkin). Signed-off-by: Dave Airlie <[email protected]> Signed-off-by: Antia Puentes <[email protected]> Reviewed-by: Anuj Phogat <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_image.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
index 7affe08c808..65962eb41ba 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -47,12 +47,27 @@ intel_miptree_create_for_teximage(struct brw_context *brw,
DBG("%s\n", __func__);
/* Figure out image dimensions at start level. */
- for (i = intelImage->base.Base.Level; i > 0; i--) {
- width <<= 1;
- if (height != 1)
- height <<= 1;
- if (intelObj->base.Target == GL_TEXTURE_3D)
- depth <<= 1;
+ switch(intelObj->base.Target) {
+ case GL_TEXTURE_2D_MULTISAMPLE:
+ case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+ case GL_TEXTURE_RECTANGLE:
+ assert(intelImage->base.Base.Level == 0);
+ break;
+ case GL_TEXTURE_3D:
+ depth <<= intelImage->base.Base.Level;
+ /* Fall through */
+ case GL_TEXTURE_2D:
+ case GL_TEXTURE_2D_ARRAY:
+ case GL_TEXTURE_CUBE_MAP:
+ case GL_TEXTURE_CUBE_MAP_ARRAY:
+ height <<= intelImage->base.Base.Level;
+ /* Fall through */
+ case GL_TEXTURE_1D:
+ case GL_TEXTURE_1D_ARRAY:
+ width <<= intelImage->base.Base.Level;
+ break;
+ default:
+ unreachable("Unexpected target");
}
/* Guess a reasonable value for lastLevel. This is probably going