[Mesa-dev] [PATCH] i965: Fix unmapping depth-stencil textures with non-zero offset

Neil Roberts neil at linux.intel.com
Thu Jun 5 05:52:13 PDT 2014


Hi,

This should fix the problem with depth-stencil textures mentioned in
the commit message for my GL_ARB_clear_texture patch here:

http://lists.freedesktop.org/archives/mesa-dev/2014-June/060739.html

- Neil

------- >8 --------------- (use git am --scissors to automatically chop here)

intel_miptree_unmap_depthstencil was not taking into account the offset of the
mapping when calculating the address to store the depth value. This was making
glTexSubImage2D update the wrong texels if it was used with a non-zero offset
on a depth-stencil texture. This patch makes the loop look more like the
equivalent one in intel_miptree_map_depthstencil so that it will use the right
location.
---
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index dd7e57a..2fee6e48 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -2136,13 +2136,14 @@ intel_miptree_unmap_depthstencil(struct brw_context *brw,
 
       for (uint32_t y = 0; y < map->h; y++) {
 	 for (uint32_t x = 0; x < map->w; x++) {
+	    int map_x = map->x + x, map_y = map->y + y;
 	    ptrdiff_t s_offset = intel_offset_S8(s_mt->pitch,
-						 x + s_image_x + map->x,
-						 y + s_image_y + map->y,
+						 map_x + s_image_x,
+						 map_y + s_image_y,
 						 brw->has_swizzling);
-	    ptrdiff_t z_offset = ((y + z_image_y) *
+	    ptrdiff_t z_offset = ((map_y + z_image_y) *
                                   (z_mt->pitch / 4) +
-				  (x + z_image_x));
+				  (map_x + z_image_x));
 
 	    if (map_z32f_x24s8) {
 	       z_map[z_offset] = packed_map[(y * map->w + x) * 2 + 0];
-- 
1.9.0



More information about the mesa-dev mailing list