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@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8340>
This commit is contained in:
Nanley Chery 2021-01-04 11:40:52 -08:00 committed by Marge Bot
parent db2cdc4277
commit 1148da3436
1 changed files with 19 additions and 3 deletions

View File

@ -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);