mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-16 19:48:20 +02:00
i965: Check CCS_E compatibility for texture view rendering
Only use CCS_E to render to a texture that is CCS_E-compatible with the
original texture's miptree (linear) format. This prevents render
operations from writing data that can't be decoded with the original
miptree format.
On Gen10, with the new CCS_E-enabled formats handled, this enables the
driver to pass the arb_texture_view-rendering-formats piglit test.
v2. Add a TODO for texturing. (Jason)
Cc: <mesa-stable@lists.freedesktop.org>
Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
(cherry picked from commit 9e849eb8bb)
This commit is contained in:
parent
3d7546a312
commit
af1dc1cf87
1 changed files with 27 additions and 2 deletions
|
|
@ -227,6 +227,27 @@ intel_miptree_supports_hiz(const struct brw_context *brw,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the format that will be used to access the miptree is
|
||||
* CCS_E-compatible with the miptree's linear/non-sRGB format.
|
||||
*
|
||||
* Why use the linear format? Well, although the miptree may be specified with
|
||||
* an sRGB format, the usage of that color space/format can be toggled. Since
|
||||
* our HW tends to support more linear formats than sRGB ones, we use this
|
||||
* format variant for check for CCS_E compatibility.
|
||||
*/
|
||||
static bool
|
||||
format_ccs_e_compat_with_miptree(const struct gen_device_info *devinfo,
|
||||
const struct intel_mipmap_tree *mt,
|
||||
enum isl_format access_format)
|
||||
{
|
||||
assert(mt->aux_usage == ISL_AUX_USAGE_CCS_E);
|
||||
|
||||
mesa_format linear_format = _mesa_get_srgb_format_linear(mt->format);
|
||||
enum isl_format isl_format = brw_isl_format_for_mesa_format(linear_format);
|
||||
return isl_formats_are_ccs_e_compatible(devinfo, isl_format, access_format);
|
||||
}
|
||||
|
||||
static bool
|
||||
intel_miptree_supports_ccs_e(struct brw_context *brw,
|
||||
const struct intel_mipmap_tree *mt)
|
||||
|
|
@ -2442,6 +2463,7 @@ can_texture_with_ccs(struct brw_context *brw,
|
|||
if (mt->aux_usage != ISL_AUX_USAGE_CCS_E)
|
||||
return false;
|
||||
|
||||
/* TODO: Replace with format_ccs_e_compat_with_miptree for better perf. */
|
||||
if (!isl_formats_are_ccs_e_compatible(&brw->screen->devinfo,
|
||||
mt->surf.format, view_format)) {
|
||||
perf_debug("Incompatible sampling format (%s) for rbc (%s)\n",
|
||||
|
|
@ -2582,8 +2604,11 @@ intel_miptree_render_aux_usage(struct brw_context *brw,
|
|||
return mt->mcs_buf ? ISL_AUX_USAGE_CCS_D : ISL_AUX_USAGE_NONE;
|
||||
|
||||
case ISL_AUX_USAGE_CCS_E: {
|
||||
/* If the format supports CCS_E, then we can just use it */
|
||||
if (isl_format_supports_ccs_e(&brw->screen->devinfo, render_format))
|
||||
/* If the format supports CCS_E and is compatible with the miptree,
|
||||
* then we can use it.
|
||||
*/
|
||||
if (format_ccs_e_compat_with_miptree(&brw->screen->devinfo,
|
||||
mt, render_format))
|
||||
return ISL_AUX_USAGE_CCS_E;
|
||||
|
||||
/* Otherwise, we have to fall back to CCS_D */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue