<p dir="ltr"><br>
On Sep 5, 2015 4:45 AM, "Francisco Jerez" <<a href="mailto:currojerez@riseup.net">currojerez@riseup.net</a>> wrote:<br>
><br>
> Chris Wilson <<a href="mailto:chris@chris-wilson.co.uk">chris@chris-wilson.co.uk</a>> writes:<br>
><br>
> > On Fri, Sep 04, 2015 at 02:40:54PM -0700, Jason Ekstrand wrote:<br>
> >> On Fri, Sep 4, 2015 at 1:22 PM, Chris Wilson <<a href="mailto:chris@chris-wilson.co.uk">chris@chris-wilson.co.uk</a>> wrote:<br>
> >> > With the introduction of ARB_shader_image_load_store, shaders<br>
> >> > are able to perform random memory accesses to texture that<br>
> >> > are not easily tracked by the driver. Rather than see if this<br>
> >> > texture is bound to an ImageUnit when we perform a TexImage command<br>
> >> > via the GPU, and so its dirty state untracked by the normal implicit<br>
> >> > flush mechanism, insert an explicit flush before the next access.<br>
> >><br>
> >> This doesn't seem quite right to me.  What's to prevent a regular<br>
> >> render target from having the same problem?  We already do flushes<br>
> >> whenever we have a rendertarget -> texture transition, I think the<br>
> >> better thing to do would be to add them when we do a rendertarget -><br>
> >> image transition.<br>
> ><br>
> Coincidentally I sent a patch to Jordan yesterday doing exactly that.<br>
> It should fix a superset of what this patch fixes and also handle the<br>
> case in which a buffer bound as image was fast-cleared and a resolve is<br>
> needed.  I didn't have time to do enough testing so I may not send it<br>
> for review until I'm back from vacation in three weeks.  In the meantime<br>
> I don't have any objection to this patch going in as temporary<br>
> workaround if this problem annoys you.</p>
<p dir="ltr">Could you at least send it to the list as an RFC?</p>
<p dir="ltr">--Jason</p>
<p dir="ltr">> > Another argument is that it is a client bug not to call<br>
> > glMemoryBarrier() between setting up a texture and using it for the<br>
> > first time.<br>
> ><br>
> > The nearest discussion of this I could find was<br>
> ><br>
> > Issue (11) What amount of automatic synchronization is provided for image loads<br>
> >          and stores?  In particular, is the use of MemoryBarrier() required<br>
> >          to ensure consistent ordering relative to other GL operations?  Or is<br>
> >          some other mechanism (e.g., unbinding a texture from an image unit<br>
> >          and then binding it to a texture image unit) sufficient?<br>
> ><br>
> >       RESOLVED:  Use of MemoryBarrier is required, and there is no<br>
> >       automatic synchronization when images are bound or unbound.<br>
> ><br>
> >       Implicit synchronization is difficult, as it might require some<br>
> >       combination of:<br>
> ><br>
> >         - tracking which images might be written (randomly) in the shader<br>
> >           itself;<br>
> ><br>
> >         - assuming that if a shader that performs writes is executed, all<br>
> >           texels of all bound images could be modified and thus must be<br>
> >           treated as dirty;<br>
> ><br>
> >         - idling at the end of each primitive or draw call, so that the<br>
> >           results of all previous commands are complete.<br>
> ><br>
> >       Since normal OpenGL operation is pipelined, idling would result in a<br>
> >       significant performance impact since pipelining would otherwise allow<br>
> >       fragment shader execution for draw call N while simultaneously<br>
> >       performing vertex shader execution for draw call N+1.<br>
> ><br>
> ><br>
> > From that language, I understand it to mean that the client is<br>
> > responsible for ensuring that the texture is coherent on binding after a<br>
> > glTexImage*D.<br>
><br>
> Not really, ARB_shader_image_load_store does guarantee implicit<br>
> synchronization of image access done after any other GL command that<br>
> already guarantees implicit synchronization in unextended GL.<br>
> glMemoryBarrier is only required to order shader image memory access<br>
> with *subsequent* GL commands of the kind given by the bitset argument.<br>
><br>
> So an implicit flush is definitely needed at some point between<br>
> rendering and image access, either as in your or as in my patch.<br>
><br>
> > -Chris<br>
> ><br>
> > --<br>
> > Chris Wilson, Intel Open Source Technology Centre<br>
> > _______________________________________________<br>
> > mesa-dev mailing list<br>
> > <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> > <a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</p>