[Mesa-dev] [PATCH 1/2] i965: Apply depthstencil alignment workaround when doing fast clears.
Paul Berry
stereotype441 at gmail.com
Tue Mar 12 12:53:38 PDT 2013
On 12 March 2013 12:28, Eric Anholt <eric at anholt.net> wrote:
> Paul Berry <stereotype441 at gmail.com> writes:
>
> > Fast depth clears have the same depth/stencil alignment requirements
> > as other drawing operations. Therefore, we need to call
> > brw_workaround_depthstencil_alignment() from both the clear and
> > drawing paths.
> >
> > Without this fix, we get image corruption if the following conditions
> > hold: (a) the first ever drawing operation to a depth miplevel (or the
> > first drawing operation after having used the texture for sampling) is
> > a clear, (b) the depth miplevel has a size that is eligible for fast
> > depth clears, and (c) the depth miplevel has an offset within the
> > miptree that isn't 8x8 aligned.
> >
> > Fixes piglit "depthstencil-render-miplevels" tests with size 273.
> >
> > NOTE: This is a candidate for stable branches
> > ---
> > src/mesa/drivers/dri/i965/brw_clear.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_clear.c
> b/src/mesa/drivers/dri/i965/brw_clear.c
> > index 53d8e54..cde1a06 100644
> > --- a/src/mesa/drivers/dri/i965/brw_clear.c
> > +++ b/src/mesa/drivers/dri/i965/brw_clear.c
> > @@ -40,6 +40,8 @@
> > #include "intel_mipmap_tree.h"
> > #include "intel_regions.h"
> >
> > +#include "brw_context.h"
> > +
> > #define FILE_DEBUG_FLAG DEBUG_BLIT
> >
> > static const char *buffer_names[] = {
> > @@ -219,7 +221,8 @@ brw_fast_clear_depth(struct gl_context *ctx)
> > static void
> > brw_clear(struct gl_context *ctx, GLbitfield mask)
> > {
> > - struct intel_context *intel = intel_context(ctx);
> > + struct brw_context *brw = brw_context(ctx);
> > + struct intel_context *intel = &brw->intel;
> >
> > if (!_mesa_check_conditional_render(ctx))
> > return;
> > @@ -229,6 +232,7 @@ brw_clear(struct gl_context *ctx, GLbitfield mask)
> > }
> >
> > intel_prepare_render(intel);
> > + brw_workaround_depthstencil_alignment(brw);
>
> It seems like this should be happening in brw_fast_clear(), either
> before before calling blorp or inside of it, instead of in the potential
> caller of brw_fast_clear(). Makes sense, though.
>
Chad made the same comment to me in person yesterday. The reason I put it
here is to accommodate patch 2/2 (which allows
brw_workaround_depthstencil_alignment to avoid an unnecessary copy when
clearing the whole miplevel). If I move the call to
brw_workaround_depthstencil_alignment into brw_fast_clear_depth(), then the
unnecessary copy will only be avoided when doing depth clears. If I leave
it here, the unnecessary copy will be avoided for all clears.
>
> > if (mask & BUFFER_BIT_DEPTH) {
> > if (brw_fast_clear_depth(ctx)) {
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130312/0bde1e0f/attachment.html>
More information about the mesa-dev
mailing list