[Mesa-dev] Status of the GLSL->TGSI translator

Brian Paul brianp at vmware.com
Thu Jun 16 10:43:33 PDT 2011


On 06/16/2011 10:34 AM, Bryan Cain wrote:
> On Thu, Jun 16, 2011 at 9:08 AM, Brian Paul <brianp at vmware.com
> <mailto:brianp at vmware.com>> wrote:
>
>
>     Looks like nice work, Bryan.
>
>     Just a few minor questions/comments for now:
>
>     1. The st_fragment/vertex/geometry_program structs now have a
>     glsl_to_tgsi field.  I did a grep, but I couldn't find where that
>     field is assigned.  Can you clue me in?
>
> It's assigned at the end of the get_mesa_program function in
> st_glsl_to_tgsi.cpp.

Thanks.  I was using grep glsl_to_tgsi *.[ch]   Duh.


>     2. The above mentioned program structs contains an old Mesa
>     instruction program AND/OR(?) a GLSL IR.  Do both types of
>     representations co-exist sometimes?  Perhaps you could update the
>     comments on those structs to explain that.
>
> They used to co-exist, because after my first commit, st_glsl_to_tgsi
> still generated Mesa IR in addition to TGSI.  But I removed the Mesa
> IR generation in "st/mesa: stop generating Mesa IR in
> st_glsl_to_tgsi", so now it has either one or the other -
> glsl_to_tgsi_visitor for GLSL shaders, Mesa IR programs for everything
> else.

OK, can you update the comments with this info?


>     3. Kind of a follow-on: for glDrawPixels and glBitmap we take the
>     original program code (in Mesa form) and prepend extra
>     instructions for fetching the fragment color or doing the fragment
>     kill.  Do we always have the Mesa instructions for this?  It seems
>     we don't normally want to generate Mesa instructions all the time
>     but we still need them sometimes.
>
> No, I didn't realize Mesa did that, and we don't have the Mesa
> instructions for GLSL programs anymore.  I'm not sure what the
> right way to handle that is.

How hard would it be to edit the IR to insert the extra operations?

For glBitmaps it's basically sample a texture and then do a 
conditional fragment kill.  For glDrawPixels we need to sample the 
texture representing the image, then apply the pixel transfer ops 
(scale/bias, table lookup, etc).  We generate the code for that in 
st_atom_pixeltransfer.c.  That program is then concatenated with the 
current fragment program with _mesa_combine_program().

If we ever propogate GLSL IR through the gallium interface there's 
lots of places where we'll need to do other kinds of IR editing.

-Brian


More information about the mesa-dev mailing list