On Fri, Mar 15, 2019 at 11:52 AM Connor Abbott <cwabbo...@gmail.com> wrote:
>
> On Fri, Mar 15, 2019 at 3:46 PM Ilia Mirkin <imir...@alum.mit.edu> wrote:
> >
> > On Fri, Mar 15, 2019 at 10:29 AM Alyssa Rosenzweig <aly...@rosenzweig.io> 
> > wrote:
> > >
> > > > This is needed if you can only handle point sprites on certain
> > > > varyings but not others. This is the case for nv30- and nvc0-based
> > > > GPUs, which is why the cap was introduced.
> > > >
> > > > If your GPU does not have such restrictions, you can safely remove the 
> > > > cap.
> > >
> > > Ah-ha, I see, thank you.
> > >
> > > I can't handle point sprites on any varyings (they all have to get
> > > lowered to gl_PointCoord), so.. :)
> >
> > Yeah, that's not extremely surprising. Point sprites weren't a thing
> > in GLES 1, and only available as gl_PointCoord in GLES 2. With GL 1.x
> > + multitexture, you can have up to 8 tex coords used in your fragment
> > pipeline, and so need a fixed-function way of setting them to point
> > coords when drawing points. Hence the current TEXCOORD semantics of
> > just bumping generic varyings by 8, so that we can be sure that any
> > shaders with true gl_TexCoord[] usage get the low 8 varyings assigned
> > (and which, on nvc0+ go through "special" shader outputs, subject to
> > the replacement).
> >
> > Note that e.g. Adreno A3xx+ is capable of doing the replacement
> > everywhere, despite being a GLES-targeted GPU. So it's not out of the
> > realm of possibility that you just haven't figured out the full
> > mechanism for doing it yet.
>
> Can you replace more than one varying and output multiple points vertex 
> shader, or something crazy like that? On Mali gl_PointCoord is just a normal 
> varying whose descriptor points to a special point-coord buffer that gets fed 
> to the tiler, so we should be able to make an arbitrary varying "turn into" 
> gl_PointCoord just by changing its descriptor at draw time.

Yeah, any (gl_TexCoord) varying may get replaced by a point sprite
coord (in GL 1.x / GL 2.x). Note that there's additional complication
from coordinate inversion, when you're drawing on the winsys fb vs an
fbo. So you have to be able to generate both S,T and S,1-T. [Or
perhaps there's an explicit control for it, I forget.] With GLES2+,
it's just gl_PointCoord though.

The way gallium handles this is that you get a mask of varyings to
replace in 
https://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/include/pipe/p_state.h#n188
+ whether to invert or not (sprite_coord_mode).

Cheers,

  -ilia
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to