[Mesa-dev] [PATCH] tgsi/nouveau: Add support for tesselation ctrl and tesselation eval

Marcos Souza marcos.souza.org at gmail.com
Thu Aug 13 20:55:20 PDT 2015


Hi Ilia,

So i found the point here it addrs that double brackets, and the following
patch solves it, but this is a right solution? If someone could guide me
here, I could fix it :)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c
b/src/gallium/auxiliary/tgsi/tgsi_dump.c
index 8ceb5b4..046471e 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
@@ -302,10 +302,14 @@ iter_declaration(
       TXT("[]");
    }

-   if (decl->Declaration.Dimension) {
-      CHR('[');
-      SID(decl->Dim.Index2D);
-      CHR(']');
+   /* FIXME: patched version could have tree dimensions?? */
+   if (patch && (iter->processor.Processor == TGSI_PROCESSOR_TESS_CTRL ||
+      iter->processor.Processor == TGSI_PROCESSOR_TESS_EVAL)) {
+      if (decl->Declaration.Dimension) {
+         CHR('[');
+         SID(decl->Dim.Index2D);
+         CHR(']');
+      }
    }

After this patch, tess_eval output is the same before and after, but
tess_ctrl is a little different:
[marcos at x mesa]$ diff tess_ctrl tess_ctrl_new
29c29
<  15: LRP OUT[ADDR[1].x][3], TEMP[1].xxxx, TEMP[3], TEMP[2]
---
>  15: LRP OUT[0][3], TEMP[1].xxxx, TEMP[3], TEMP[2]
40c40
<  26: MOV OUT[ADDR[1].x][2], TEMP[0]
---
>  26: MOV OUT[0][2], TEMP[0]

I'll try to investigate and send a new patch in the weekend.

Thanks for all help Ilia and others!

2015-08-13 18:43 GMT-03:00 Ilia Mirkin <imirkin at alum.mit.edu>:

> [mesa-dev readded, please don't drop CC's]
>
> I found it by feeding the shader to nouveau_compiler with
> NV50_PROG_DEBUG=1 set, which dumps the input tgsi. Those two should
> match up.
>
> On Thu, Aug 13, 2015 at 5:39 PM, Marcos Paulo de souza
> <marcos.souza.org at gmail.com> wrote:
> > Hi Ilia,
> >
> > So, how can I test it? Do I need to especify some patameter to verify
> this
> > type of problem?
> >
> > Thanks for the quick revision!
> >
> >
> > Em 13-08-2015 16:03, Ilia Mirkin escreveu:
> >>
> >> Hi Macros,
> >>
> >> Looks like it's not parsed in exactly right. It will parse something
> like
> >>
> >> TESS_EVAL
> >> PROPERTY TES_PRIM_MODE 7
> >> PROPERTY TES_SPACING 2
> >> PROPERTY TES_VERTEX_ORDER_CW 0
> >> PROPERTY TES_POINT_MODE 0
> >> DCL IN[][0], GENERIC[0]
> >> DCL IN[][1], GENERIC[1]
> >>
> >> as
> >>
> >> TESS_EVAL
> >> PROPERTY TES_PRIM_MODE 7
> >> PROPERTY TES_SPACING 2
> >> PROPERTY TES_VERTEX_ORDER_CW 0
> >> PROPERTY TES_POINT_MODE 0
> >> DCL IN[][0][0], GENERIC[0]
> >> DCL IN[][0][1], GENERIC[1]
> >>
> >> Perhaps the same issue happens for geometry shaders, but that doesn't
> >> make it right :) You might have to look at the printing logic to get a
> >> better understanding of what's going wrong.
> >>
> >> Also you should send patches to nouveau separately from patches to the
> >> rest of the infra. Ideally this would have been 2 patches, e.g.
> >>
> >> tgsi: set implicit array size for tess stages
> >> nouveau: recognize tess stages in nouveau_compiler
> >>
> >> or something like that.
> >>
> >> On Wed, Aug 12, 2015 at 9:25 PM, Marcos Paulo de Souza
> >> <marcos.souza.org at gmail.com> wrote:
> >>>
> >>> From: Marcos Paulo de Souza <marcos.souza.org at gmail.com>
> >>>
> >>> Signed-off-by: Marcos Paulo de Souza <marcos.souza.org>
> >>> Suggested-by: Ilia Mirkin <imirkin at alum.mit.edu>
> >>> ---
> >>>   src/gallium/auxiliary/tgsi/tgsi_text.c         | 6 +++++-
> >>>   src/gallium/drivers/nouveau/nouveau_compiler.c | 4 ++++
> >>>   2 files changed, 9 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c
> >>> b/src/gallium/auxiliary/tgsi/tgsi_text.c
> >>> index a6675c5..8647e4e 100644
> >>> --- a/src/gallium/auxiliary/tgsi/tgsi_text.c
> >>> +++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
> >>> @@ -259,7 +259,7 @@ struct translate_ctx
> >>>      struct tgsi_token *tokens_end;
> >>>      struct tgsi_header *header;
> >>>      unsigned processor : 4;
> >>> -   int implied_array_size : 5;
> >>> +   int implied_array_size : 6;
> >>>      unsigned num_immediates;
> >>>   };
> >>>
> >>> @@ -1623,6 +1623,10 @@ static boolean translate( struct translate_ctx
> >>> *ctx )
> >>>      if (!parse_header( ctx ))
> >>>         return FALSE;
> >>>
> >>> +   if (ctx->processor == TGSI_PROCESSOR_TESS_CTRL ||
> >>> +       ctx->processor == TGSI_PROCESSOR_TESS_EVAL)
> >>> +       ctx->implied_array_size = 32 ;
> >>> +
> >>>      while (*ctx->cur != '\0') {
> >>>         uint label_val = 0;
> >>>         if (!eat_white( &ctx->cur )) {
> >>> diff --git a/src/gallium/drivers/nouveau/nouveau_compiler.c
> >>> b/src/gallium/drivers/nouveau/nouveau_compiler.c
> >>> index 8660498..495450b 100644
> >>> --- a/src/gallium/drivers/nouveau/nouveau_compiler.c
> >>> +++ b/src/gallium/drivers/nouveau/nouveau_compiler.c
> >>> @@ -190,6 +190,10 @@ main(int argc, char *argv[])
> >>>         type = PIPE_SHADER_GEOMETRY;
> >>>      else if (!strncmp(text, "COMP", 4))
> >>>         type = PIPE_SHADER_COMPUTE;
> >>> +   else if (!strncmp(text, "TESS_CTRL", 9))
> >>> +      type = PIPE_SHADER_TESS_CTRL;
> >>> +   else if (!strncmp(text, "TESS_EVAL", 9))
> >>> +      type = PIPE_SHADER_TESS_EVAL;
> >>>      else {
> >>>         _debug_printf("Unrecognized TGSI header\n");
> >>>         return 1;
> >>> --
> >>> 2.4.3
> >>>
> >>> _______________________________________________
> >>> mesa-dev mailing list
> >>> mesa-dev at lists.freedesktop.org
> >>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
> >
>



-- 
Att,

Marcos Paulo de Souza
Github: https://github.com/marcosps/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150814/27e48bc2/attachment-0001.html>


More information about the mesa-dev mailing list