[Mesa-dev] [PATCH 02/12] i965/rbc: Set aux surface unconditionally for sampling engine
Jason Ekstrand
jason at jlekstrand.net
Thu Sep 1 00:39:07 UTC 2016
On Wed, Aug 31, 2016 at 8:17 AM, Topi Pohjolainen <
topi.pohjolainen at intel.com> wrote:
> Once mcs buffer gets allocated without delay for lossless
> compression (same as we do for msaa), one gets regression in:
>
> GL45-CTS.texture_barrier_ARB.same-texel-rw
>
> Setting the auxiliary surface for both sampling engine and data
> port seems to fix this. I haven't found any hardware documentation
> backing this though.
>
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
> src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 46
> ++++++++++++++++++++++--
> 1 file changed, 43 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index bfd973b..5cd27ef 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -72,6 +72,48 @@ static const struct surface_state_info
> surface_state_infos[] = {
> [9] = {16, 64, 8, 10, SKL_MOCS_WB, SKL_MOCS_PTE},
> };
>
> +static bool
> +brw_needs_aux_surface(const struct brw_context *brw,
> + const struct intel_mipmap_tree *mt,
> + const struct isl_view *view)
> +{
> + if (!mt->mcs_mt)
> + return false;
> +
> + if (view->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT)
> + return true;
> +
> + const bool is_lossless_compressed =
> + intel_miptree_is_lossless_compressed(brw, mt);
> + const bool view_format_lossless_compressed =
> + isl_format_supports_lossless_compression(brw->intelScreen->
> devinfo,
> + view->format);
> +
> + /* If the underlying surface is compressed but it is sampled using a
> + * format that the sampling engine doesn't support as compressed, there
> + * is no alternative but to treat the surface as non-compressed.
> + */
>
Does this even work? I mean, can you render to a texture with one format
and texture from it with another and still use color compression?
> + if (is_lossless_compressed && !view_format_lossless_compressed) {
>
This is more of a change in behavior than the commit message says. We
should probably make the commit message a bit better.
> + /* Logic elsewhere needs to take care to resolve the color buffer
> prior
> + * to sampling it as non-compressed.
> + */
> + assert(mt->fast_clear_state == INTEL_FAST_CLEAR_STATE_RESOLVED);
> + return false;
> + }
> +
> + /* In practise it looks that setting the same lossless compressed
> surface
> + * to be sampled without auxiliary surface and to be written with
> auxiliary
> + * surface confuses the hardware.
> + * Currently there is no direct way of knowing if render pass will use
> the
> + * sane surface as render target and therefore simply use the auxiliary
> + * surface unconditionally here.
> + */
> + if (is_lossless_compressed)
> + return true;
>
This makes a lot of sense. If we're sampling from and rendering to the
same surface, we'd better have the compression buffer for both. That said,
if we ever bind a compressed buffer as a render target with a
texture-viewed version as a source (as per above), we're going to have a
problem...
> +
> + return mt->fast_clear_state != INTEL_FAST_CLEAR_STATE_RESOLVED;
> +}
> +
> static void
> brw_emit_surface_state(struct brw_context *brw,
> struct intel_mipmap_tree *mt,
> @@ -135,9 +177,7 @@ brw_emit_surface_state(struct brw_context *brw,
> struct isl_surf *aux_surf = NULL, aux_surf_s;
> uint64_t aux_offset = 0;
> enum isl_aux_usage aux_usage = ISL_AUX_USAGE_NONE;
> - if (mt->mcs_mt &&
> - ((view.usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) ||
> - mt->fast_clear_state != INTEL_FAST_CLEAR_STATE_RESOLVED)) {
> + if (brw_needs_aux_surface(brw, mt, &view)) {
> intel_miptree_get_aux_isl_surf(brw, mt, &aux_surf_s, &aux_usage);
> aux_surf = &aux_surf_s;
> assert(mt->mcs_mt->offset == 0);
> --
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160831/1374d3d2/attachment.html>
More information about the mesa-dev
mailing list