[Mesa-dev] [PATCH 15/36] i965/blorp: Move intratile offset calculations out of surface state setup
Jason Ekstrand
jason at jlekstrand.net
Thu Jun 30 00:37:34 UTC 2016
---
src/mesa/drivers/dri/i965/brw_blorp.c | 24 ++++++++++++------------
src/mesa/drivers/dri/i965/brw_blorp.h | 15 ++-------------
src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 8 ++++----
3 files changed, 18 insertions(+), 29 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c
index d6581d0..5e433d3 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.c
+++ b/src/mesa/drivers/dri/i965/brw_blorp.c
@@ -66,9 +66,6 @@ brw_blorp_surface_info_init(struct brw_context *brw,
info->width = minify(mt->physical_width0, level - mt->first_level);
info->height = minify(mt->physical_height0, level - mt->first_level);
- intel_miptree_get_image_offset(mt, level, layer,
- &info->x_offset, &info->y_offset);
-
info->swizzle = SWIZZLE_XYZW;
if (format == MESA_FORMAT_NONE)
@@ -110,6 +107,15 @@ brw_blorp_surface_info_init(struct brw_context *brw,
break;
}
}
+
+ uint32_t x_offset, y_offset;
+ intel_miptree_get_image_offset(mt, level, layer, &x_offset, &y_offset);
+
+ uint8_t bs = isl_format_get_layout(info->brw_surfaceformat)->bs;
+ isl_tiling_get_intratile_offset_el(&brw->isl_dev, info->surf.tiling, bs,
+ info->surf.row_pitch, x_offset, y_offset,
+ &info->bo_offset,
+ &info->tile_x_sa, &info->tile_y_sa);
}
@@ -305,13 +311,6 @@ brw_blorp_emit_surface_state(struct brw_context *brw,
ISL_SURF_USAGE_TEXTURE_BIT,
};
- uint32_t offset, tile_x, tile_y;
- isl_tiling_get_intratile_offset_el(&brw->isl_dev, surf.tiling,
- isl_format_get_layout(view.format)->bs,
- surf.row_pitch,
- surface->x_offset, surface->y_offset,
- &offset, &tile_x, &tile_y);
-
uint32_t surf_offset;
uint32_t *dw = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE,
ss_info.num_dwords * 4, ss_info.ss_align,
@@ -320,11 +319,12 @@ brw_blorp_emit_surface_state(struct brw_context *brw,
const uint32_t mocs = is_render_target ? ss_info.rb_mocs : ss_info.tex_mocs;
isl_surf_fill_state(&brw->isl_dev, dw, .surf = &surf, .view = &view,
- .address = surface->mt->bo->offset64 + offset,
+ .address = surface->mt->bo->offset64 + surface->bo_offset,
.aux_surf = aux_surf, .aux_usage = surface->aux_usage,
.aux_address = aux_offset,
.mocs = mocs, .clear_color = clear_color,
- .x_offset_sa = tile_x, .y_offset_sa = tile_y);
+ .x_offset_sa = surface->tile_x_sa,
+ .y_offset_sa = surface->tile_y_sa);
/* Emit relocation to surface contents */
drm_intel_bo_emit_reloc(brw->batch.bo,
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h
index b8a8d06..fddd007 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.h
+++ b/src/mesa/drivers/dri/i965/brw_blorp.h
@@ -104,19 +104,8 @@ struct brw_blorp_surface_info
*/
uint32_t height;
- /**
- * X offset within the surface to texture from (or render to). For
- * surfaces using INTEL_MSAA_LAYOUT_IMS, this is measured in samples, not
- * pixels.
- */
- uint32_t x_offset;
-
- /**
- * Y offset within the surface to texture from (or render to). For
- * surfaces using INTEL_MSAA_LAYOUT_IMS, this is measured in samples, not
- * pixels.
- */
- uint32_t y_offset;
+ uint32_t bo_offset;
+ uint32_t tile_x_sa, tile_y_sa;
/**
* Format that should be used when setting up the surface state for this
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
index c253412..5696d52 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
@@ -1896,8 +1896,8 @@ brw_blorp_blit_miptrees(struct brw_context *brw,
params.y1 = ALIGN(params.y1, y_align) / 2;
params.dst.width = ALIGN(params.dst.width, x_align) * 2;
params.dst.height = ALIGN(params.dst.height, y_align) / 2;
- params.dst.x_offset *= 2;
- params.dst.y_offset /= 2;
+ params.dst.tile_x_sa *= 2;
+ params.dst.tile_y_sa /= 2;
wm_prog_key.use_kill = true;
}
@@ -1922,8 +1922,8 @@ brw_blorp_blit_miptrees(struct brw_context *brw,
const unsigned x_align = 8, y_align = params.src.surf.samples != 0 ? 8 : 4;
params.src.width = ALIGN(params.src.width, x_align) * 2;
params.src.height = ALIGN(params.src.height, y_align) / 2;
- params.src.x_offset *= 2;
- params.src.y_offset /= 2;
+ params.src.tile_x_sa *= 2;
+ params.src.tile_y_sa /= 2;
}
/* tex_samples and rt_samples are the sample counts that are set up in
--
2.5.0.400.gff86faf
More information about the mesa-dev
mailing list