[Mesa-dev] [PATCH] i965: Fix SHADER_OPCODE_UNTYPED_SURFACE_WRITE to mark written surfaces

Iago Toral itoral at igalia.com
Tue May 5 22:50:42 PDT 2015


On Tue, 2015-05-05 at 16:41 +0300, Francisco Jerez wrote:
> Iago Toral Quiroga <itoral at igalia.com> writes:
> 
> > We can do this when the surface index is an immediate, as we do for
> > reads. Otherwise the visitor should handle this.
> > ---
> > Francisco, maybe you choose not to do this for a reason? It seems a bit
> > inconsistent with the reads though. Also, other read/write messages seem
> > to mark surfaces in the generator when the surface index is an immediate
> > and leave the visitor to handle non-immediate scenarios.
> >
> 
> Yeah, this deviation from the other untyped surface opcodes was
> intentional, actually I sent a patch to remove the implicit call to
> brw_mark_surface_used() for untyped surface reads and atomics which I
> haven't landed yet [1].

Good to know, since I'll be using these functions I'll make sure I
always mark used surfaces in the visitor code then.

>   The reason is that the surface index may not be
> an immediate, so the visitor cannot in general rely on the generator to
> do it.  Whether the generator can do it or not is even dependent on the
> extent that optimization passes are able to simplify the program, so it
> could lead to hard to debug errors.  It seems more consistent and less
> error-prone to have the visitor handle this unconditionally rather than
> sharing the responsibility between visitor and generator depending on
> the situation.

Yes, makes sense.

Thanks,
Iago

> [1] http://lists.freedesktop.org/archives/mesa-dev/2015-May/083278.html
> 
> >  src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> > index b8b8ed1..cf4b9ae 100644
> > --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> > +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> > @@ -2247,6 +2247,8 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width)
> >           assert(src[2].file == BRW_IMMEDIATE_VALUE);
> >           brw_untyped_surface_write(p, src[0], src[1],
> >                                     inst->mlen, src[2].dw1.ud);
> > +         if (src[1].file == BRW_IMMEDIATE_VALUE)
> > +            brw_mark_surface_used(prog_data, src[1].dw1.ud);
> >           break;
> >  
> >        case SHADER_OPCODE_TYPED_ATOMIC:
> > -- 
> > 1.9.1




More information about the mesa-dev mailing list