summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaura Ekstrand <laura@jlekstrand.net>2017-11-01 16:50:11 -0700
committerLaura Ekstrand <laura@jlekstrand.net>2017-11-01 16:50:11 -0700
commitd25b9dd1a61292842569b7b870666217a1c8e585 (patch)
treebb0ecb7931ea6b1563f2ab442e805a071e069c0b
parent2a77c763fe769b37d154585114b403b7755b9e17 (diff)
intel/blorp: Add attachment version of mcs_partial_resolve.
-rw-r--r--src/intel/blorp/blorp.h11
-rw-r--r--src/intel/blorp/blorp_clear.c36
2 files changed, 47 insertions, 0 deletions
diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h
index 9716c66302..f36a22acff 100644
--- a/src/intel/blorp/blorp.h
+++ b/src/intel/blorp/blorp.h
@@ -216,6 +216,17 @@ blorp_mcs_partial_resolve(struct blorp_batch *batch,
enum isl_format format,
uint32_t start_layer, uint32_t num_layers);
+/* Resolves subresources of the image subresource range specified in the
+ * binding table.
+ */
+void
+blorp_mcs_partial_resolve_attachment(struct blorp_batch *batch,
+ const uint32_t binding_table_offset,
+ struct blorp_surf *surf,
+ enum isl_format format,
+ uint32_t start_layer,
+ uint32_t num_layers);
+
/**
* 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 cd83fa13ca..b18f0d130d 100644
--- a/src/intel/blorp/blorp_clear.c
+++ b/src/intel/blorp/blorp_clear.c
@@ -911,3 +911,39 @@ blorp_mcs_partial_resolve(struct blorp_batch *batch,
batch->blorp->exec(batch, &params);
}
+
+void
+blorp_mcs_partial_resolve_attachment(struct blorp_batch *batch,
+ const uint32_t binding_table_offset,
+ struct blorp_surf *surf,
+ enum isl_format format,
+ uint32_t start_layer, uint32_t num_layers)
+{
+ struct blorp_params params;
+ blorp_params_init(&params);
+
+ assert(batch->blorp->isl_dev->info->gen >= 7);
+
+ params.x0 = 0;
+ params.y0 = 0;
+ params.x1 = surf->surf->logical_level0_px.width;
+ params.y1 = surf->surf->logical_level0_px.height;
+
+ brw_blorp_surface_info_init(batch->blorp, &params.src, surf, 0,
+ start_layer, format, false);
+ brw_blorp_surface_info_init(batch->blorp, &params.dst, surf, 0,
+ start_layer, format, true);
+
+ params.num_samples = params.dst.surf.samples;
+ params.use_pre_baked_binding_table = true;
+ params.pre_baked_binding_table_offset = binding_table_offset;
+ params.num_layers = num_layers;
+
+ memcpy(&params.wm_inputs.clear_color,
+ surf->clear_color.f32, sizeof(float) * 4);
+
+ if (!blorp_params_get_mcs_partial_resolve_kernel(batch->blorp, &params))
+ return;
+
+ batch->blorp->exec(batch, &params);
+}