From 53d472df24d4bc05359120df0615321318922d6d Mon Sep 17 00:00:00 2001 From: Sagar Ghuge Date: Tue, 15 Oct 2019 11:15:22 -0700 Subject: [PATCH] intel/blorp: Add helper function for stencil buffer resolve On Gen12+, Stencil buffer's lossless compression should be resolved with WM_HZ_OP packet. Signed-off-by: Sagar Ghuge Reviewed-by: Nanley Chery --- src/intel/blorp/blorp.c | 30 ++++++++++++++++++++++++++++++ src/intel/blorp/blorp.h | 4 ++++ 2 files changed, 34 insertions(+) diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c index 086bfb1c596..f93662ccae8 100644 --- a/src/intel/blorp/blorp.c +++ b/src/intel/blorp/blorp.c @@ -366,3 +366,33 @@ blorp_hiz_op(struct blorp_batch *batch, struct blorp_surf *surf, batch->blorp->exec(batch, ¶ms); } } + +void +blorp_hiz_stencil_op(struct blorp_batch *batch, struct blorp_surf *stencil, + uint32_t level, uint32_t start_layer, + uint32_t num_layers, enum isl_aux_op op) +{ + struct blorp_params params; + blorp_params_init(¶ms); + + params.hiz_op = op; + params.full_surface_hiz_op = true; + + for (uint32_t a = 0; a < num_layers; a++) { + const uint32_t layer = start_layer + a; + + brw_blorp_surface_info_init(batch->blorp, ¶ms.stencil, stencil, level, + layer, stencil->surf->format, true); + params.x1 = minify(params.stencil.surf.logical_level0_px.width, + params.stencil.view.base_level); + params.y1 = minify(params.stencil.surf.logical_level0_px.height, + params.stencil.view.base_level); + params.dst.surf.samples = params.stencil.surf.samples; + params.dst.surf.logical_level0_px = + params.stencil.surf.logical_level0_px; + params.dst.view = params.stencil.view; + params.num_samples = params.stencil.surf.samples; + + batch->blorp->exec(batch, ¶ms); + } +} diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h index ead261b6230..afee0a96a8c 100644 --- a/src/intel/blorp/blorp.h +++ b/src/intel/blorp/blorp.h @@ -246,6 +246,10 @@ blorp_hiz_op(struct blorp_batch *batch, struct blorp_surf *surf, uint32_t level, uint32_t start_layer, uint32_t num_layers, enum isl_aux_op op); +void +blorp_hiz_stencil_op(struct blorp_batch *batch, struct blorp_surf *stencil, + uint32_t level, uint32_t start_layer, + uint32_t num_layers, enum isl_aux_op op); #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ -- 2.30.2