[Mesa-dev] [PATCH 16/24] blorp/clear: Add a binding-table-based CCS resolve function
Nanley Chery
nanleychery at gmail.com
Thu May 11 19:05:23 UTC 2017
v2 (Jason Ekstrand):
- Replace "bt" suffix with "attachment."
- Rename helper function to prepare_ccs_resolve.
- Move blorp_params_init() into helper function.
Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
---
src/intel/blorp/blorp.h | 9 +++++++
src/intel/blorp/blorp_clear.c | 62 ++++++++++++++++++++++++++++++++-----------
2 files changed, 55 insertions(+), 16 deletions(-)
diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h
index eab75d70ab..661e0380fd 100644
--- a/src/intel/blorp/blorp.h
+++ b/src/intel/blorp/blorp.h
@@ -191,6 +191,15 @@ blorp_ccs_resolve(struct blorp_batch *batch,
enum isl_format format,
enum blorp_fast_clear_op resolve_op);
+/* Resolves the image subresource specified in the binding table. */
+void
+blorp_ccs_resolve_attachment(struct blorp_batch *batch,
+ const uint32_t binding_table_offset,
+ struct blorp_surf * const surf,
+ const uint32_t level, const uint32_t layer,
+ const enum isl_format format,
+ const enum blorp_fast_clear_op resolve_op);
+
/**
* For an overview of the HiZ operations, see the following sections of the
* Sandy Bridge PRM, Volume 1, Part2:
diff --git a/src/intel/blorp/blorp_clear.c b/src/intel/blorp/blorp_clear.c
index c72d3291c7..2c2f7fbfab 100644
--- a/src/intel/blorp/blorp_clear.c
+++ b/src/intel/blorp/blorp_clear.c
@@ -669,20 +669,21 @@ blorp_clear_attachments(struct blorp_batch *batch,
batch->blorp->exec(batch, ¶ms);
}
-void
-blorp_ccs_resolve(struct blorp_batch *batch,
- struct blorp_surf *surf, uint32_t level, uint32_t layer,
- enum isl_format format,
- enum blorp_fast_clear_op resolve_op)
+static void
+prepare_ccs_resolve(struct blorp_batch * const batch,
+ struct blorp_params * const params,
+ const struct blorp_surf * const surf,
+ const uint32_t level, const uint32_t layer,
+ const enum isl_format format,
+ const enum blorp_fast_clear_op resolve_op)
{
- struct blorp_params params;
- blorp_params_init(¶ms);
/* Layered and mipmapped fast clear is only available from Gen8 onwards. */
assert(ISL_DEV_GEN(batch->blorp->isl_dev) >= 8 ||
(level == 0 && layer == 0));
- brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, surf,
+ blorp_params_init(params);
+ brw_blorp_surface_info_init(batch->blorp, ¶ms->dst, surf,
level, layer, format, true);
/* From the Ivy Bridge PRM, Vol2 Part1 11.9 "Render Target Resolve":
@@ -695,7 +696,7 @@ blorp_ccs_resolve(struct blorp_batch *batch,
* multiply by 8 and 16. On Sky Lake, we multiply by 8.
*/
const struct isl_format_layout *aux_fmtl =
- isl_format_get_layout(params.dst.aux_surf.format);
+ isl_format_get_layout(params->dst.aux_surf.format);
assert(aux_fmtl->txc == ISL_TXC_CCS);
unsigned x_scaledown, y_scaledown;
@@ -709,11 +710,11 @@ blorp_ccs_resolve(struct blorp_batch *batch,
x_scaledown = aux_fmtl->bw / 2;
y_scaledown = aux_fmtl->bh / 2;
}
- params.x0 = params.y0 = 0;
- params.x1 = minify(params.dst.aux_surf.logical_level0_px.width, level);
- params.y1 = minify(params.dst.aux_surf.logical_level0_px.height, level);
- params.x1 = ALIGN(params.x1, x_scaledown) / x_scaledown;
- params.y1 = ALIGN(params.y1, y_scaledown) / y_scaledown;
+ params->x0 = params->y0 = 0;
+ params->x1 = minify(params->dst.aux_surf.logical_level0_px.width, level);
+ params->y1 = minify(params->dst.aux_surf.logical_level0_px.height, level);
+ params->x1 = ALIGN(params->x1, x_scaledown) / x_scaledown;
+ params->y1 = ALIGN(params->y1, y_scaledown) / y_scaledown;
if (batch->blorp->isl_dev->info->gen >= 9) {
assert(resolve_op == BLORP_FAST_CLEAR_OP_RESOLVE_FULL ||
@@ -722,7 +723,7 @@ blorp_ccs_resolve(struct blorp_batch *batch,
/* Broadwell and earlier do not have a partial resolve */
assert(resolve_op == BLORP_FAST_CLEAR_OP_RESOLVE_FULL);
}
- params.fast_clear_op = resolve_op;
+ params->fast_clear_op = resolve_op;
/* Note: there is no need to initialize push constants because it doesn't
* matter what data gets dispatched to the render target. However, we must
@@ -730,8 +731,37 @@ blorp_ccs_resolve(struct blorp_batch *batch,
* color" message.
*/
- if (!blorp_params_get_clear_kernel(batch->blorp, ¶ms, true))
+ if (!blorp_params_get_clear_kernel(batch->blorp, params, true))
return;
+}
+
+void
+blorp_ccs_resolve(struct blorp_batch *batch,
+ struct blorp_surf *surf, uint32_t level, uint32_t layer,
+ enum isl_format format,
+ enum blorp_fast_clear_op resolve_op)
+{
+ struct blorp_params params;
+
+ prepare_ccs_resolve(batch, ¶ms, surf, level, layer, format, resolve_op);
+
+ batch->blorp->exec(batch, ¶ms);
+}
+
+void
+blorp_ccs_resolve_attachment(struct blorp_batch *batch,
+ const uint32_t binding_table_offset,
+ struct blorp_surf * const surf,
+ const uint32_t level, const uint32_t layer,
+ const enum isl_format format,
+ const enum blorp_fast_clear_op resolve_op)
+{
+ struct blorp_params params;
+
+ prepare_ccs_resolve(batch, ¶ms, surf, level, layer, format, resolve_op);
+
+ params.use_pre_baked_binding_table = true;
+ params.pre_baked_binding_table_offset = binding_table_offset;
batch->blorp->exec(batch, ¶ms);
}
--
2.12.2
More information about the mesa-dev
mailing list