[Mesa-dev] [PATCH 08/15] i965/miptree: Add support isl based miptrees in map_movntdqa()

Topi Pohjolainen topi.pohjolainen at gmail.com
Tue Jun 13 19:10:59 UTC 2017


---
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 17 +++++++++++++----
 1 file changed, 13 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 9fdd56eaf2..a2d4fa9d92 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -2986,15 +2986,23 @@ intel_miptree_map_movntdqa(struct brw_context *brw,
 
    src += mt->offset;
 
-   src += image_y * mt->pitch;
-   src += image_x * mt->cpp;
+   if (mt->surf.size > 0) {
+      src += image_y * mt->surf.row_pitch;
+      src += image_x * isl_format_get_layout(mt->surf.format)->bpb / 8;
+   } else {
+      src += image_y * mt->pitch;
+      src += image_x * mt->cpp;
+   }
 
    /* Due to the pixel offsets for the particular image being mapped, our
     * src pointer may not be 16-byte aligned.  However, if the pitch is
     * divisible by 16, then the amount by which it's misaligned will remain
     * consistent from row to row.
     */
-   assert((mt->pitch % 16) == 0);
+   if (mt->surf.size > 0)
+      assert((mt->surf.row_pitch % 16) == 0);
+   else
+      assert((mt->pitch % 16) == 0);
    const int misalignment = ((uintptr_t) src) & 15;
 
    /* Create an untiled temporary buffer for the mapping. */
@@ -3008,9 +3016,10 @@ intel_miptree_map_movntdqa(struct brw_context *brw,
 
    assert((((uintptr_t) map->ptr) & 15) == misalignment);
 
+   const unsigned pitch = mt->surf.size > 0 ? mt->surf.row_pitch : mt->pitch;
    for (uint32_t y = 0; y < map->h; y++) {
       void *dst_ptr = map->ptr + y * map->stride;
-      void *src_ptr = src + y * mt->pitch;
+      void *src_ptr = src + y * pitch;
 
       _mesa_streaming_load_memcpy(dst_ptr, src_ptr, width_bytes);
    }
-- 
2.11.0



More information about the mesa-dev mailing list