Mesa (master): util: simplify temp register selection in u_pstipple.c

Brian Paul brianp at kemper.freedesktop.org
Fri Oct 31 21:31:45 UTC 2014


Module: Mesa
Branch: master
Commit: 55008ef6976de2e3f04ac92a33f7a4a4acafeaea
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=55008ef6976de2e3f04ac92a33f7a4a4acafeaea

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Oct 30 19:38:09 2014 -0600

util: simplify temp register selection in u_pstipple.c

Reviewed-by: Charmaine Lee <charmainel at vmware.com>

---

 src/gallium/auxiliary/util/u_pstipple.c |   45 +++++++++++++------------------
 1 file changed, 18 insertions(+), 27 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_pstipple.c b/src/gallium/auxiliary/util/u_pstipple.c
index 5c6c8fc..92343d6 100644
--- a/src/gallium/auxiliary/util/u_pstipple.c
+++ b/src/gallium/auxiliary/util/u_pstipple.c
@@ -180,7 +180,6 @@ struct pstip_transform_context {
    int maxInput;
    uint samplersUsed;  /**< bitfield of samplers used */
    int freeSampler;  /** an available sampler for the pstipple */
-   int texTemp;  /**< temp registers */
    int numImmed;
    boolean firstInstruction;
    uint coordOrigin;
@@ -261,14 +260,14 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
 {
    struct pstip_transform_context *pctx =
       (struct pstip_transform_context *) ctx;
+   int wincoordInput;
+   int texTemp;
 
    if (pctx->firstInstruction) {
       /* emit our new declarations before the first instruction */
 
       struct tgsi_full_declaration decl;
       struct tgsi_full_instruction newInst;
-      uint i;
-      int wincoordInput;
 
       /* find free texture sampler */
       pctx->freeSampler = free_bit(pctx->samplersUsed);
@@ -280,18 +279,6 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
       else
          wincoordInput = pctx->wincoordInput;
 
-      /* find one free temp register */
-      for (i = 0; i < 32; i++) {
-         if ((pctx->tempsUsed & (1 << i)) == 0) {
-            /* found a free temp */
-            if (pctx->texTemp < 0)
-               pctx->texTemp  = i;
-            else
-               break;
-         }
-      }
-      assert(pctx->texTemp >= 0);
-
       if (pctx->wincoordInput < 0) {
          /* declare new position input reg */
          decl = tgsi_default_full_declaration();
@@ -313,12 +300,18 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
       decl.Range.Last = pctx->freeSampler;
       ctx->emit_declaration(ctx, &decl);
 
-      /* 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);
+      /* Declare temp[0] reg if not already declared.
+       * We can always use temp[0] since this code is before
+       * the rest of the shader.
+       */
+      texTemp = 0;
+      if ((pctx->tempsUsed & (1 << texTemp)) == 0) {
+         decl = tgsi_default_full_declaration();
+         decl.Declaration.File = TGSI_FILE_TEMPORARY;
+         decl.Range.First = 
+            decl.Range.Last = texTemp;
+         ctx->emit_declaration(ctx, &decl);
+      }
 
       /* emit immediate = {1/32, 1/32, 1, 1}
        * The index/position of this immediate will be pctx->numImmed
@@ -356,7 +349,7 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
       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.Dst[0].Register.Index = texTemp;
       newInst.Instruction.NumSrcRegs = 2;
       newInst.Src[0].Register.File = TGSI_FILE_INPUT;
       newInst.Src[0].Register.Index = wincoordInput;
@@ -369,12 +362,12 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
       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.Dst[0].Register.Index = 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[0].Register.Index = texTemp;
       newInst.Src[1].Register.File = TGSI_FILE_SAMPLER;
       newInst.Src[1].Register.Index = pctx->freeSampler;
       ctx->emit_instruction(ctx, &newInst);
@@ -385,7 +378,7 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
       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.Index = texTemp;
       newInst.Src[0].Register.Negate = 1;
       ctx->emit_instruction(ctx, &newInst);
    }
@@ -419,8 +412,6 @@ util_pstipple_create_fragment_shader(const struct tgsi_token *tokens,
    memset(&transform, 0, sizeof(transform));
    transform.wincoordInput = -1;
    transform.maxInput = -1;
-   transform.texTemp = -1;
-   transform.firstInstruction = TRUE;
    transform.coordOrigin = TGSI_FS_COORD_ORIGIN_UPPER_LEFT;
    transform.base.transform_instruction = pstip_transform_inst;
    transform.base.transform_declaration = pstip_transform_decl;




More information about the mesa-commit mailing list