[Mesa-dev] [PATCH 9/9] draw: use new tgsi_transform inst/decl helpers in pstipple code

Brian Paul brianp at vmware.com
Mon Sep 22 08:45:05 PDT 2014


---
 src/gallium/auxiliary/draw/draw_pipe_pstipple.c |   87 +++++------------------
 1 file changed, 19 insertions(+), 68 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
index 7ef86a6..8f21c46 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
@@ -197,8 +197,6 @@ static void
 pstip_transform_prolog(struct tgsi_transform_context *ctx)
 {
    struct pstip_transform_context *pctx = (struct pstip_transform_context *) ctx;
-   struct tgsi_full_declaration decl;
-   struct tgsi_full_instruction newInst;
    uint i;
    int wincoordInput;
 
@@ -226,47 +224,21 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
 
    if (pctx->wincoordInput < 0) {
       /* declare new position input reg */
-      decl = tgsi_default_full_declaration();
-      decl.Declaration.File = TGSI_FILE_INPUT;
-      decl.Declaration.Interpolate = 1;
-      decl.Declaration.Semantic = 1;
-      decl.Semantic.Name = TGSI_SEMANTIC_POSITION;
-      decl.Semantic.Index = 0;
-      decl.Range.First = 
-      decl.Range.Last = wincoordInput;
-      decl.Interp.Interpolate = TGSI_INTERPOLATE_LINEAR; /* XXX? */
-      ctx->emit_declaration(ctx, &decl);
+      tgsi_transform_input_decl(ctx, wincoordInput,
+                                TGSI_SEMANTIC_POSITION, 1,
+                                TGSI_INTERPOLATE_LINEAR);
    }
 
    /* declare new sampler */
-   decl = tgsi_default_full_declaration();
-   decl.Declaration.File = TGSI_FILE_SAMPLER;
-   decl.Range.First = 
-   decl.Range.Last = pctx->freeSampler;
-   ctx->emit_declaration(ctx, &decl);
+   tgsi_transform_sampler_decl(ctx, pctx->freeSampler);
 
    /* declare new temp regs */
-   decl = tgsi_default_full_declaration();
-   decl.Declaration.File = TGSI_FILE_TEMPORARY;
-   decl.Range.First = 
-   decl.Range.Last = pctx->texTemp;
-   ctx->emit_declaration(ctx, &decl);
+   tgsi_transform_temp_decl(ctx, pctx->texTemp);
 
    /* emit immediate = {1/32, 1/32, 1, 1}
     * The index/position of this immediate will be pctx->numImmed
     */
-   {
-      static const float value[4] = { 1.0/32, 1.0/32, 1.0, 1.0 };
-      struct tgsi_full_immediate immed;
-      uint size = 4;
-      immed = tgsi_default_full_immediate();
-      immed.Immediate.NrTokens = 1 + size; /* one for the token itself */
-      immed.u[0].Float = value[0];
-      immed.u[1].Float = value[1];
-      immed.u[2].Float = value[2];
-      immed.u[3].Float = value[3];
-      ctx->emit_immediate(ctx, &immed);
-   }
+   tgsi_transform_immediate_decl(ctx, 1.0/32.0, 1.0/32.0, 1.0, 1.0);
 
    /* 
     * Insert new MUL/TEX/KILL_IF instructions at start of program
@@ -279,42 +251,21 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
     */
 
    /* MUL texTemp, INPUT[wincoord], 1/32; */
-   newInst = tgsi_default_full_instruction();
-   newInst.Instruction.Opcode = TGSI_OPCODE_MUL;
-   newInst.Instruction.NumDstRegs = 1;
-   newInst.Dst[0].Register.File = TGSI_FILE_TEMPORARY;
-   newInst.Dst[0].Register.Index = pctx->texTemp;
-   newInst.Instruction.NumSrcRegs = 2;
-   newInst.Src[0].Register.File = TGSI_FILE_INPUT;
-   newInst.Src[0].Register.Index = wincoordInput;
-   newInst.Src[1].Register.File = TGSI_FILE_IMMEDIATE;
-   newInst.Src[1].Register.Index = pctx->numImmed;
-   ctx->emit_instruction(ctx, &newInst);
+   tgsi_transform_op2_inst(ctx, TGSI_OPCODE_MUL,
+                           TGSI_FILE_TEMPORARY, pctx->texTemp,
+                           TGSI_WRITEMASK_XYZW,
+                           TGSI_FILE_INPUT, wincoordInput,
+                           TGSI_FILE_IMMEDIATE, pctx->numImmed);
 
    /* TEX texTemp, texTemp, sampler; */
-   newInst = tgsi_default_full_instruction();
-   newInst.Instruction.Opcode = TGSI_OPCODE_TEX;
-   newInst.Instruction.NumDstRegs = 1;
-   newInst.Dst[0].Register.File = TGSI_FILE_TEMPORARY;
-   newInst.Dst[0].Register.Index = pctx->texTemp;
-   newInst.Instruction.NumSrcRegs = 2;
-   newInst.Instruction.Texture = TRUE;
-   newInst.Texture.Texture = TGSI_TEXTURE_2D;
-   newInst.Src[0].Register.File = TGSI_FILE_TEMPORARY;
-   newInst.Src[0].Register.Index = pctx->texTemp;
-   newInst.Src[1].Register.File = TGSI_FILE_SAMPLER;
-   newInst.Src[1].Register.Index = pctx->freeSampler;
-   ctx->emit_instruction(ctx, &newInst);
-
-   /* KILL_IF -texTemp;   # if -texTemp < 0, KILL fragment */
-   newInst = tgsi_default_full_instruction();
-   newInst.Instruction.Opcode = TGSI_OPCODE_KILL_IF;
-   newInst.Instruction.NumDstRegs = 0;
-   newInst.Instruction.NumSrcRegs = 1;
-   newInst.Src[0].Register.File = TGSI_FILE_TEMPORARY;
-   newInst.Src[0].Register.Index = pctx->texTemp;
-   newInst.Src[0].Register.Negate = 1;
-   ctx->emit_instruction(ctx, &newInst);
+   tgsi_transform_tex_2d_inst(ctx,
+                              TGSI_FILE_TEMPORARY, pctx->texTemp,
+                              TGSI_FILE_TEMPORARY, pctx->texTemp,
+                              pctx->freeSampler);
+
+   /* KILL_IF -texTemp.wwww;   # if -texTemp < 0, KILL fragment */
+   tgsi_transform_kill_inst(ctx,
+                            TGSI_FILE_TEMPORARY, pctx->texTemp, TGSI_SWIZZLE_W);
 }
 
 
-- 
1.7.10.4



More information about the mesa-dev mailing list