Mesa (master): util: convert u_simple_shaders to use tgsi_ureg

Cooper Yuan cooperyuan at gmail.com
Thu Aug 13 14:38:17 UTC 2009


it seems tgsi has not been linked into gallium driver, there is undefined
symbol, for instance, ureg_create.

On Thu, Aug 13, 2009 at 5:04 AM, Keith Whitwell <
keithw at kemper.freedesktop.org> wrote:

> Module: Mesa
> Branch: master
> Commit: 002c76cfefe8c1ab12fb7031a649a30fb349a3e3
> URL:
> http://cgit.freedesktop.org/mesa/mesa/commit/?id=002c76cfefe8c1ab12fb7031a649a30fb349a3e3
>
> Author: Keith Whitwell <keithw at vmware.com>
> Date:   Thu Aug 13 12:46:32 2009 +0100
>
> util: convert u_simple_shaders to use tgsi_ureg
>
> Much nicer now.
>
> ---
>
>  src/gallium/auxiliary/util/u_simple_shaders.c |  318
> +++++--------------------
>  1 files changed, 60 insertions(+), 258 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_simple_shaders.c
> b/src/gallium/auxiliary/util/u_simple_shaders.c
> index e519c35..1152d62 100644
> --- a/src/gallium/auxiliary/util/u_simple_shaders.c
> +++ b/src/gallium/auxiliary/util/u_simple_shaders.c
> @@ -42,9 +42,7 @@
>  #include "util/u_memory.h"
>  #include "util/u_simple_shaders.h"
>
> -#include "tgsi/tgsi_build.h"
> -#include "tgsi/tgsi_dump.h"
> -#include "tgsi/tgsi_parse.h"
> +#include "tgsi/tgsi_ureg.h"
>
>
>
> @@ -58,93 +56,31 @@ util_make_vertex_passthrough_shader(struct pipe_context
> *pipe,
>                                     const uint *semantic_indexes)
>
>  {
> -   struct pipe_shader_state shader;
> -   struct tgsi_token tokens[100];
> -   struct tgsi_header *header;
> -   struct tgsi_processor *processor;
> -   struct tgsi_full_declaration decl;
> -   struct tgsi_full_instruction inst;
> -   const uint procType = TGSI_PROCESSOR_VERTEX;
> -   uint ti, i;
> +   struct ureg_program *ureg;
> +   uint i;
>
> -   /* shader header
> -    */
> -   *(struct tgsi_version *) &tokens[0] = tgsi_build_version();
> +   ureg = ureg_create( pipe, TGSI_PROCESSOR_VERTEX );
> +   if (ureg == NULL)
> +      return NULL;
>
> -   header = (struct tgsi_header *) &tokens[1];
> -   *header = tgsi_build_header();
> -
> -   processor = (struct tgsi_processor *) &tokens[2];
> -   *processor = tgsi_build_processor( procType, header );
> -
> -   ti = 3;
> -
> -   /* declare inputs */
> -   for (i = 0; i < num_attribs; i++) {
> -      decl = tgsi_default_full_declaration();
> -      decl.Declaration.File = TGSI_FILE_INPUT;
> -
> -      decl.Declaration.Semantic = 1;
> -      decl.Semantic.SemanticName = semantic_names[i];
> -      decl.Semantic.SemanticIndex = semantic_indexes[i];
> -
> -      decl.DeclarationRange.First =
> -      decl.DeclarationRange.Last = i;
> -      ti += tgsi_build_full_declaration(&decl,
> -                                        &tokens[ti],
> -                                        header,
> -                                        Elements(tokens) - ti);
> -   }
> -
> -   /* declare outputs */
>    for (i = 0; i < num_attribs; i++) {
> -      decl = tgsi_default_full_declaration();
> -      decl.Declaration.File = TGSI_FILE_OUTPUT;
> -      decl.Declaration.Semantic = 1;
> -      decl.Semantic.SemanticName = semantic_names[i];
> -      decl.Semantic.SemanticIndex = semantic_indexes[i];
> -      decl.DeclarationRange.First =
> -         decl.DeclarationRange.Last = i;
> -      ti += tgsi_build_full_declaration(&decl,
> -                                        &tokens[ti],
> -                                        header,
> -                                        Elements(tokens) - ti);
> +      struct ureg_src src;
> +      struct ureg_dst dst;
> +
> +      src = ureg_DECL_vs_input( ureg,
> +                                semantic_names[i],
> +                                semantic_indexes[i]);
> +
> +      dst = ureg_DECL_output( ureg,
> +                              semantic_names[i],
> +                              semantic_indexes[i]);
> +
> +      ureg_MOV( ureg, dst, src );
>    }
>
> -   /* emit MOV instructions */
> -   for (i = 0; i < num_attribs; i++) {
> -      /* MOVE out[i], in[i]; */
> -      inst = tgsi_default_full_instruction();
> -      inst.Instruction.Opcode = TGSI_OPCODE_MOV;
> -      inst.Instruction.NumDstRegs = 1;
> -      inst.FullDstRegisters[0].DstRegister.File = TGSI_FILE_OUTPUT;
> -      inst.FullDstRegisters[0].DstRegister.Index = i;
> -      inst.Instruction.NumSrcRegs = 1;
> -      inst.FullSrcRegisters[0].SrcRegister.File = TGSI_FILE_INPUT;
> -      inst.FullSrcRegisters[0].SrcRegister.Index = i;
> -      ti += tgsi_build_full_instruction(&inst,
> -                                        &tokens[ti],
> -                                        header,
> -                                        Elements(tokens) - ti );
> -   }
> -
> -   /* END instruction */
> -   inst = tgsi_default_full_instruction();
> -   inst.Instruction.Opcode = TGSI_OPCODE_END;
> -   inst.Instruction.NumDstRegs = 0;
> -   inst.Instruction.NumSrcRegs = 0;
> -   ti += tgsi_build_full_instruction(&inst,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti );
> -
> -#if 0 /*debug*/
> -   tgsi_dump(tokens, 0);
> -#endif
> -
> -   shader.tokens = tokens;
> +   ureg_END( ureg );
>
> -   return pipe->create_vs_state(pipe, &shader);
> +   return ureg_create_shader_and_destroy( ureg );
>  }
>
>
> @@ -158,99 +94,29 @@ util_make_vertex_passthrough_shader(struct
> pipe_context *pipe,
>  void *
>  util_make_fragment_tex_shader(struct pipe_context *pipe)
>  {
> -   struct pipe_shader_state shader;
> -   struct tgsi_token tokens[100];
> -   struct tgsi_header *header;
> -   struct tgsi_processor *processor;
> -   struct tgsi_full_declaration decl;
> -   struct tgsi_full_instruction inst;
> -   const uint procType = TGSI_PROCESSOR_FRAGMENT;
> -   uint ti;
> -
> -   /* shader header
> -    */
> -   *(struct tgsi_version *) &tokens[0] = tgsi_build_version();
> -
> -   header = (struct tgsi_header *) &tokens[1];
> -   *header = tgsi_build_header();
> -
> -   processor = (struct tgsi_processor *) &tokens[2];
> -   *processor = tgsi_build_processor( procType, header );
> -
> -   ti = 3;
> -
> -   /* declare TEX[0] input */
> -   decl = tgsi_default_full_declaration();
> -   decl.Declaration.File = TGSI_FILE_INPUT;
> -   /* XXX this could be linear... */
> -   decl.Declaration.Interpolate = TGSI_INTERPOLATE_PERSPECTIVE;
> -   decl.Declaration.Semantic = 1;
> -   decl.Semantic.SemanticName = TGSI_SEMANTIC_GENERIC;
> -   decl.Semantic.SemanticIndex = 0;
> -   decl.DeclarationRange.First =
> -   decl.DeclarationRange.Last = 0;
> -   ti += tgsi_build_full_declaration(&decl,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti);
> -
> -   /* declare color[0] output */
> -   decl = tgsi_default_full_declaration();
> -   decl.Declaration.File = TGSI_FILE_OUTPUT;
> -   decl.Declaration.Semantic = 1;
> -   decl.Semantic.SemanticName = TGSI_SEMANTIC_COLOR;
> -   decl.Semantic.SemanticIndex = 0;
> -   decl.DeclarationRange.First =
> -   decl.DeclarationRange.Last = 0;
> -   ti += tgsi_build_full_declaration(&decl,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti);
> -
> -   /* declare sampler */
> -   decl = tgsi_default_full_declaration();
> -   decl.Declaration.File = TGSI_FILE_SAMPLER;
> -   decl.DeclarationRange.First =
> -   decl.DeclarationRange.Last = 0;
> -   ti += tgsi_build_full_declaration(&decl,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti);
> -
> -   /* TEX instruction */
> -   inst = tgsi_default_full_instruction();
> -   inst.Instruction.Opcode = TGSI_OPCODE_TEX;
> -   inst.Instruction.NumDstRegs = 1;
> -   inst.FullDstRegisters[0].DstRegister.File = TGSI_FILE_OUTPUT;
> -   inst.FullDstRegisters[0].DstRegister.Index = 0;
> -   inst.Instruction.NumSrcRegs = 2;
> -   inst.InstructionExtTexture.Texture = TGSI_TEXTURE_2D;
> -   inst.FullSrcRegisters[0].SrcRegister.File = TGSI_FILE_INPUT;
> -   inst.FullSrcRegisters[0].SrcRegister.Index = 0;
> -   inst.FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER;
> -   inst.FullSrcRegisters[1].SrcRegister.Index = 0;
> -   ti += tgsi_build_full_instruction(&inst,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti );
> -
> -   /* END instruction */
> -   inst = tgsi_default_full_instruction();
> -   inst.Instruction.Opcode = TGSI_OPCODE_END;
> -   inst.Instruction.NumDstRegs = 0;
> -   inst.Instruction.NumSrcRegs = 0;
> -   ti += tgsi_build_full_instruction(&inst,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti );
> -
> -#if 0 /*debug*/
> -   tgsi_dump(tokens, 0);
> -#endif
> -
> -   shader.tokens = tokens;
> -
> -   return pipe->create_fs_state(pipe, &shader);
> +   struct ureg_program *ureg;
> +   struct ureg_src sampler;
> +   struct ureg_src tex;
> +   struct ureg_dst out;
> +
> +   ureg = ureg_create( pipe, TGSI_PROCESSOR_FRAGMENT );
> +   if (ureg == NULL)
> +      return NULL;
> +
> +   sampler = ureg_DECL_sampler( ureg );
> +
> +   tex = ureg_DECL_fs_input( ureg,
> +                             TGSI_SEMANTIC_GENERIC, 0,
> +                             TGSI_INTERPOLATE_PERSPECTIVE );
> +
> +   out = ureg_DECL_output( ureg,
> +                           TGSI_SEMANTIC_COLOR,
> +                           0 );
> +
> +   ureg_TEX( ureg, out, TGSI_TEXTURE_2D, tex, sampler );
> +   ureg_END( ureg );
> +
> +   return ureg_create_shader_and_destroy( ureg );
>  }
>
>
> @@ -263,87 +129,23 @@ util_make_fragment_tex_shader(struct pipe_context
> *pipe)
>  void *
>  util_make_fragment_passthrough_shader(struct pipe_context *pipe)
>  {
> -   struct pipe_shader_state shader;
> -   struct tgsi_token tokens[40];
> -   struct tgsi_header *header;
> -   struct tgsi_processor *processor;
> -   struct tgsi_full_declaration decl;
> -   struct tgsi_full_instruction inst;
> -   const uint procType = TGSI_PROCESSOR_FRAGMENT;
> -   uint ti;
> -
> -   /* shader header
> -    */
> -   *(struct tgsi_version *) &tokens[0] = tgsi_build_version();
> -
> -   header = (struct tgsi_header *) &tokens[1];
> -   *header = tgsi_build_header();
> -
> -   processor = (struct tgsi_processor *) &tokens[2];
> -   *processor = tgsi_build_processor( procType, header );
> -
> -   ti = 3;
> -
> -   /* declare input */
> -   decl = tgsi_default_full_declaration();
> -   decl.Declaration.File = TGSI_FILE_INPUT;
> -   decl.Declaration.Semantic = 1;
> -   decl.Semantic.SemanticName = TGSI_SEMANTIC_COLOR;
> -   decl.Semantic.SemanticIndex = 0;
> -   decl.DeclarationRange.First =
> -      decl.DeclarationRange.Last = 0;
> -   ti += tgsi_build_full_declaration(&decl,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti);
> -
> -   /* declare output */
> -   decl = tgsi_default_full_declaration();
> -   decl.Declaration.File = TGSI_FILE_OUTPUT;
> -   decl.Declaration.Semantic = 1;
> -   decl.Semantic.SemanticName = TGSI_SEMANTIC_COLOR;
> -   decl.Semantic.SemanticIndex = 0;
> -   decl.DeclarationRange.First =
> -      decl.DeclarationRange.Last = 0;
> -   ti += tgsi_build_full_declaration(&decl,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti);
> -
> -
> -   /* MOVE out[0], in[0]; */
> -   inst = tgsi_default_full_instruction();
> -   inst.Instruction.Opcode = TGSI_OPCODE_MOV;
> -   inst.Instruction.NumDstRegs = 1;
> -   inst.FullDstRegisters[0].DstRegister.File = TGSI_FILE_OUTPUT;
> -   inst.FullDstRegisters[0].DstRegister.Index = 0;
> -   inst.Instruction.NumSrcRegs = 1;
> -   inst.FullSrcRegisters[0].SrcRegister.File = TGSI_FILE_INPUT;
> -   inst.FullSrcRegisters[0].SrcRegister.Index = 0;
> -   ti += tgsi_build_full_instruction(&inst,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti );
> -
> -   /* END instruction */
> -   inst = tgsi_default_full_instruction();
> -   inst.Instruction.Opcode = TGSI_OPCODE_END;
> -   inst.Instruction.NumDstRegs = 0;
> -   inst.Instruction.NumSrcRegs = 0;
> -   ti += tgsi_build_full_instruction(&inst,
> -                                     &tokens[ti],
> -                                     header,
> -                                     Elements(tokens) - ti );
> -
> -   assert(ti < Elements(tokens));
> -
> -#if 0 /*debug*/
> -   tgsi_dump(tokens, 0);
> -#endif
> -
> -   shader.tokens = tokens;
> -
> -   return pipe->create_fs_state(pipe, &shader);
> +   struct ureg_program *ureg;
> +   struct ureg_src src;
> +   struct ureg_dst dst;
> +
> +   ureg = ureg_create( pipe, TGSI_PROCESSOR_FRAGMENT );
> +   if (ureg == NULL)
> +      return NULL;
> +
> +   src = ureg_DECL_fs_input( ureg, TGSI_SEMANTIC_COLOR, 0,
> +                             TGSI_INTERPOLATE_PERSPECTIVE );
> +
> +   dst = ureg_DECL_output( ureg, TGSI_SEMANTIC_COLOR, 0 );
> +
> +   ureg_MOV( ureg, dst, src );
> +   ureg_END( ureg );
> +
> +   return ureg_create_shader_and_destroy( ureg );
>  }
>
>
>
> _______________________________________________
> mesa-commit mailing list
> mesa-commit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-commit
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-commit/attachments/20090813/492da245/attachment.htm>


More information about the mesa-commit mailing list