[Mesa-dev] [PATCH 4/6] i965/miptree: Use isl instead of local offset calculator
Topi Pohjolainen
topi.pohjolainen at gmail.com
Wed Jul 26 19:28:36 UTC 2017
Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
src/mesa/drivers/dri/i965/brw_misc_state.c | 20 +++++++++++---
src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 38 +++------------------------
src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 4 ---
3 files changed, 19 insertions(+), 43 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index 1e3be784c5..983fc0c736 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -189,10 +189,22 @@ rebase_depth_stencil(struct brw_context *brw, struct intel_renderbuffer *irb,
brw->depthstencil.tile_x = tile_x;
brw->depthstencil.tile_y = tile_y;
- brw->depthstencil.depth_offset = intel_miptree_get_aligned_offset(
- irb->mt,
- irb->draw_x & ~tile_mask_x,
- irb->draw_y & ~tile_mask_y);
+
+ struct isl_image_offset image_offset;
+ isl_tiling_get_intratile_offset_el(irb->mt->surf.tiling,
+ irb->mt->cpp * 8,
+ irb->mt->surf.row_pitch,
+ irb->draw_x & ~tile_mask_x,
+ irb->draw_y & ~tile_mask_y,
+ &image_offset);
+
+ brw->depthstencil.depth_offset = image_offset.tile_aligned_byte_offset;
+
+ /* Given x and y were already masked to provide aligned offset. Therefore
+ * there should be no intra tile offset.
+ */
+ assert(image_offset.intra_tile_x == 0);
+ assert(image_offset.intra_tile_y == 0);
return false;
}
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index 37024c011d..cab888f04d 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -1300,34 +1300,6 @@ intel_get_tile_masks(enum isl_tiling tiling, uint32_t cpp,
}
/**
- * Compute the offset (in bytes) from the start of the BO to the given x
- * and y coordinate. For tiled BOs, caller must ensure that x and y are
- * multiples of the tile size.
- */
-uint32_t
-intel_miptree_get_aligned_offset(const struct intel_mipmap_tree *mt,
- uint32_t x, uint32_t y)
-{
- int cpp = mt->cpp;
- uint32_t pitch = mt->surf.row_pitch;
-
- switch (mt->surf.tiling) {
- default:
- unreachable("not reached");
- case ISL_TILING_LINEAR:
- return y * pitch + x * cpp;
- case ISL_TILING_X:
- assert((x % (512 / cpp)) == 0);
- assert((y % 8) == 0);
- return y * pitch + x / (512 / cpp) * 4096;
- case ISL_TILING_Y0:
- assert((x % (128 / cpp)) == 0);
- assert((y % 32) == 0);
- return y * pitch + x / (128 / cpp) * 4096;
- }
-}
-
-/**
* Rendering with tiled buffers requires that the base address of the buffer
* be aligned to a page boundary. For renderbuffers, and sometimes with
* textures, we may want the surface to point at a texture image level that
@@ -1361,15 +1333,11 @@ intel_miptree_get_tile_offsets(const struct intel_mipmap_tree *mt,
assert(mt->level[0].level_y == 0);
uint32_t x, y;
- uint32_t mask_x, mask_y;
-
- intel_get_tile_masks(mt->surf.tiling, mt->cpp, &mask_x, &mask_y);
intel_miptree_get_image_offset(mt, level, slice, &x, &y);
- image_offset->intra_tile_x = x & mask_x;
- image_offset->intra_tile_y = y & mask_y;
- image_offset->tile_aligned_byte_offset =
- intel_miptree_get_aligned_offset(mt, x & ~mask_x, y & ~mask_y);
+ isl_tiling_get_intratile_offset_el(mt->surf.tiling,
+ mt->cpp * 8, mt->surf.row_pitch,
+ x, y, image_offset);
}
static void
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
index b8d36b35e0..d9d2ce9ee2 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
@@ -468,10 +468,6 @@ intel_miptree_get_tile_offsets(const struct intel_mipmap_tree *mt,
unsigned level, unsigned slice,
struct isl_image_offset *image_offset);
-uint32_t
-intel_miptree_get_aligned_offset(const struct intel_mipmap_tree *mt,
- uint32_t x, uint32_t y);
-
void
intel_miptree_copy_slice(struct brw_context *brw,
struct intel_mipmap_tree *src_mt,
--
2.11.0
More information about the mesa-dev
mailing list