Mesa (master): iris: Use single-aspect formats more in iris_blit

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jan 7 23:08:46 UTC 2021


Module: Mesa
Branch: master
Commit: 1148da343643bf437de266f46dd69683f95ab166
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1148da343643bf437de266f46dd69683f95ab166

Author: Nanley Chery <nanley.g.chery at intel.com>
Date:   Mon Jan  4 11:40:52 2021 -0800

iris: Use single-aspect formats more in iris_blit

In order to handle blitting the stencil aspect of a depth-stencil
resource, use aspect-specific pipe formats in the aspect_mask loop.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8340>

---

 src/gallium/drivers/iris/iris_blit.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/iris/iris_blit.c b/src/gallium/drivers/iris/iris_blit.c
index d9d74d37853..b3a345b88f4 100644
--- a/src/gallium/drivers/iris/iris_blit.c
+++ b/src/gallium/drivers/iris/iris_blit.c
@@ -346,6 +346,18 @@ iris_resource_for_aspect(struct pipe_resource *p_res, unsigned pipe_mask)
    }
 }
 
+static enum pipe_format
+pipe_format_for_aspect(enum pipe_format format, unsigned pipe_mask)
+{
+   if (pipe_mask == PIPE_MASK_S) {
+      return util_format_stencil_only(format);
+   } else if (pipe_mask == PIPE_MASK_Z) {
+      return util_format_get_depth_only(format);
+   } else {
+      return format;
+   }
+}
+
 /**
  * The pipe->blit() driver hook.
  *
@@ -464,14 +476,18 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info)
       struct iris_resource *dst_res =
          iris_resource_for_aspect(info->dst.resource, aspect);
 
+      enum pipe_format src_pfmt =
+         pipe_format_for_aspect(info->src.format, aspect);
+      enum pipe_format dst_pfmt =
+         pipe_format_for_aspect(info->dst.format, aspect);
+
       if (iris_resource_unfinished_aux_import(src_res))
          iris_resource_finish_aux_import(ctx->screen, src_res);
       if (iris_resource_unfinished_aux_import(dst_res))
          iris_resource_finish_aux_import(ctx->screen, dst_res);
 
       struct iris_format_info src_fmt =
-         iris_format_for_usage(devinfo, info->src.format,
-                               ISL_SURF_USAGE_TEXTURE_BIT);
+         iris_format_for_usage(devinfo, src_pfmt, ISL_SURF_USAGE_TEXTURE_BIT);
       enum isl_aux_usage src_aux_usage =
          iris_resource_texture_aux_usage(ice, src_res, src_fmt.fmt);
 
@@ -482,7 +498,7 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info)
                                    IRIS_DOMAIN_OTHER_READ);
 
       struct iris_format_info dst_fmt =
-         iris_format_for_usage(devinfo, info->dst.format,
+         iris_format_for_usage(devinfo, dst_pfmt,
                                ISL_SURF_USAGE_RENDER_TARGET_BIT);
       enum isl_aux_usage dst_aux_usage =
          iris_resource_blorp_write_aux_usage(ice, dst_res, dst_fmt.fmt);



More information about the mesa-commit mailing list