diff options
author | Laura Ekstrand <laura@jlekstrand.net> | 2017-11-01 16:50:11 -0700 |
---|---|---|
committer | Laura Ekstrand <laura@jlekstrand.net> | 2017-11-01 16:50:11 -0700 |
commit | d25b9dd1a61292842569b7b870666217a1c8e585 (patch) | |
tree | bb0ecb7931ea6b1563f2ab442e805a071e069c0b | |
parent | 2a77c763fe769b37d154585114b403b7755b9e17 (diff) |
intel/blorp: Add attachment version of mcs_partial_resolve.
-rw-r--r-- | src/intel/blorp/blorp.h | 11 | ||||
-rw-r--r-- | src/intel/blorp/blorp_clear.c | 36 |
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, ¶ms); } + +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(¶ms); + + 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, ¶ms.src, surf, 0, + start_layer, format, false); + brw_blorp_surface_info_init(batch->blorp, ¶ms.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(¶ms.wm_inputs.clear_color, + surf->clear_color.f32, sizeof(float) * 4); + + if (!blorp_params_get_mcs_partial_resolve_kernel(batch->blorp, ¶ms)) + return; + + batch->blorp->exec(batch, ¶ms); +} |