Hmm, that doesn't look right.  Let me retry.

Keith

On Wed, 2009-07-22 at 02:42 -0700, Keith Whitwell wrote:
> Remove the need to have a pointer in this struct by just including
> the immediate data inline.  Having a pointer in the struct introduces
> complications like needing to alloc/free the data pointed to, uncertainty
> about who owns the data, etc.  There doesn't seem to be a need for it,
> and it is unlikely to make much difference plus or minus to performance.
> 
> Added some asserts as we now will trip up on immediates with more
> than four elements.  There were actually already quite a few such asserts,
> but the >4 case could be used in the future to specify indexable immediate
> ranges, such as lookup tables.
> ---
>  src/gallium/auxiliary/draw/draw_pipe_pstipple.c    |    5 +++-
>  src/gallium/auxiliary/draw/draw_vs_aos.c           |    2 +-
>  src/gallium/auxiliary/gallivm/tgsitollvm.cpp       |    4 +-
>  src/gallium/auxiliary/tgsi/tgsi_build.c            |   21 +++++++++++--------
>  src/gallium/auxiliary/tgsi/tgsi_build.h            |    2 +-
>  src/gallium/auxiliary/tgsi/tgsi_dump.c             |    2 +-
>  src/gallium/auxiliary/tgsi/tgsi_dump_c.c           |    2 +-
>  src/gallium/auxiliary/tgsi/tgsi_exec.c             |    2 +-
>  src/gallium/auxiliary/tgsi/tgsi_parse.c            |   13 +----------
>  src/gallium/auxiliary/tgsi/tgsi_parse.h            |    6 +----
>  src/gallium/auxiliary/tgsi/tgsi_ppc.c              |    2 +-
>  src/gallium/auxiliary/tgsi/tgsi_sse2.c             |    2 +-
>  src/gallium/auxiliary/tgsi/tgsi_text.c             |    5 +++-
>  src/gallium/drivers/cell/ppu/cell_gen_fp.c         |    4 +-
>  .../drivers/i915simple/i915_fpc_translate.c        |    2 +-
>  src/gallium/drivers/i965simple/brw_vs_emit.c       |    8 +++---
>  src/gallium/drivers/nv20/nv20_vertprog.c           |    8 +++---
>  src/gallium/drivers/nv30/nv30_fragprog.c           |    8 +++---
>  src/gallium/drivers/nv30/nv30_vertprog.c           |    8 +++---
>  src/gallium/drivers/nv40/nv40_fragprog.c           |    8 +++---
>  src/gallium/drivers/nv40/nv40_vertprog.c           |    8 +++---
>  src/gallium/drivers/nv50/nv50_program.c            |    8 +++---
>  src/gallium/drivers/r300/r300_fs.c                 |    3 +-
>  src/gallium/drivers/r300/r300_vs.c                 |    3 +-
>  src/gallium/include/pipe/p_shader_tokens.h         |    2 +-
>  src/mesa/state_tracker/st_mesa_to_tgsi.c           |    6 ++++-
>  26 files changed, 71 insertions(+), 73 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c 
> b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
> index 30a6d29..283502c 100644
> --- a/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
> +++ b/src/gallium/auxiliary/draw/draw_pipe_pstipple.c
> @@ -256,7 +256,10 @@ pstip_transform_inst(struct tgsi_transform_context *ctx,
>           uint size = 4;
>           immed = tgsi_default_full_immediate();
>           immed.Immediate.NrTokens = 1 + size; /* one for the token itself */
> -         immed.u.Pointer = (void *) value;
> +         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);
>        }
> 
> diff --git a/src/gallium/auxiliary/draw/draw_vs_aos.c 
> b/src/gallium/auxiliary/draw/draw_vs_aos.c
> index 9e37a26..69a890e 100644
> --- a/src/gallium/auxiliary/draw/draw_vs_aos.c
> +++ b/src/gallium/auxiliary/draw/draw_vs_aos.c
> @@ -1892,7 +1892,7 @@ static boolean note_immediate( struct aos_compilation 
> *cp,
>     unsigned j;
> 
>     for (j = 0; j < imm->Immediate.NrTokens - 1; j++) {
> -      cp->vaos->machine->immediate[pos][j] = 
> imm->u.ImmediateFloat32[j].Float;
> +      cp->vaos->machine->immediate[pos][j] = imm->u[j].Float;
>     }
> 
>     return TRUE;
> diff --git a/src/gallium/auxiliary/gallivm/tgsitollvm.cpp 
> b/src/gallium/auxiliary/gallivm/tgsitollvm.cpp
> index 5b08200..cdaf79e 100644
> --- a/src/gallium/auxiliary/gallivm/tgsitollvm.cpp
> +++ b/src/gallium/auxiliary/gallivm/tgsitollvm.cpp
> @@ -163,7 +163,7 @@ translate_immediate(Storage *storage,
>     for (i = 0; i < imm->Immediate.NrTokens - 1; ++i) {
>        switch (imm->Immediate.DataType) {
>        case TGSI_IMM_FLOAT32:
> -         vec[i] = imm->u.ImmediateFloat32[i].Float;
> +         vec[i] = imm->u[i].Float;
>           break;
>        default:
>           assert(0);
> @@ -182,7 +182,7 @@ translate_immediateir(StorageSoa *storage,
>     for (i = 0; i < imm->Immediate.NrTokens - 1; ++i) {
>        switch (imm->Immediate.DataType) {
>        case TGSI_IMM_FLOAT32:
> -         vec[i] = imm->u.ImmediateFloat32[i].Float;
> +         vec[i] = imm->u[i].Float;
>           break;
>        default:
>           assert(0);
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c 
> b/src/gallium/auxiliary/tgsi/tgsi_build.c
> index d272533..eabf9c3 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_build.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_build.c
> @@ -335,7 +335,10 @@ tgsi_default_full_immediate( void )
>     struct tgsi_full_immediate fullimm;
> 
>     fullimm.Immediate = tgsi_default_immediate();
> -   fullimm.u.Pointer = (void *) 0;
> +   fullimm.u[0].Float = 0.0f;
> +   fullimm.u[1].Float = 0.0f;
> +   fullimm.u[2].Float = 0.0f;
> +   fullimm.u[3].Float = 0.0f;
> 
>     return fullimm;
>  }
> @@ -352,19 +355,19 @@ immediate_grow(
>     header_bodysize_grow( header );
>  }
> 
> -struct tgsi_immediate_float32
> +union tgsi_immediate_data
>  tgsi_build_immediate_float32(
>     float value,
>     struct tgsi_immediate *immediate,
>     struct tgsi_header *header )
>  {
> -   struct tgsi_immediate_float32 immediate_float32;
> +   union tgsi_immediate_data immediate_data;
> 
> -   immediate_float32.Float = value;
> +   immediate_data.Float = value;
> 
>     immediate_grow( immediate, header );
> 
> -   return immediate_float32;
> +   return immediate_data;
>  }
> 
>  unsigned
> @@ -385,15 +388,15 @@ tgsi_build_full_immediate(
>     *immediate = tgsi_build_immediate( header );
> 
>     for( i = 0; i < full_imm->Immediate.NrTokens - 1; i++ ) {
> -      struct tgsi_immediate_float32 *if32;
> +      union tgsi_immediate_data *data;
> 
>        if( maxsize <= size )
>           return  0;
> -      if32 = (struct tgsi_immediate_float32 *) &tokens[size];
> +      data = (union tgsi_immediate_data *) &tokens[size];
>        size++;
> 
> -      *if32 = tgsi_build_immediate_float32(
> -         full_imm->u.ImmediateFloat32[i].Float,
> +      *data = tgsi_build_immediate_float32(
> +         full_imm->u[i].Float,
>           immediate,
>           header );
>     }
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.h 
> b/src/gallium/auxiliary/tgsi/tgsi_build.h
> index 9a3a077..17d977b 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_build.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_build.h
> @@ -119,7 +119,7 @@ tgsi_build_immediate(
>  struct tgsi_full_immediate
>  tgsi_default_full_immediate( void );
> 
> -struct tgsi_immediate_float32
> +union tgsi_immediate_data
>  tgsi_build_immediate_float32(
>     float value,
>     struct tgsi_immediate *immediate,
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c 
> b/src/gallium/auxiliary/tgsi/tgsi_dump.c
> index a6994ec..59a43a7 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
> @@ -298,7 +298,7 @@ iter_immediate(
>     for (i = 0; i < imm->Immediate.NrTokens - 1; i++) {
>        switch (imm->Immediate.DataType) {
>        case TGSI_IMM_FLOAT32:
> -         FLT( imm->u.ImmediateFloat32[i].Float );
> +         FLT( imm->u[i].Float );
>           break;
>        default:
>           assert( 0 );
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump_c.c 
> b/src/gallium/auxiliary/tgsi/tgsi_dump_c.c
> index 3dc61c4..75c8730 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_dump_c.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_dump_c.c
> @@ -288,7 +288,7 @@ dump_immediate_verbose(
>        switch( imm->Immediate.DataType ) {
>        case TGSI_IMM_FLOAT32:
>           TXT( "\nFloat: " );
> -         FLT( imm->u.ImmediateFloat32[i].Float );
> +         FLT( imm->u[i].Float );
>           break;
> 
>        default:
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
> b/src/gallium/auxiliary/tgsi/tgsi_exec.c
> index fe571a8..f76f4f1 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
> @@ -306,7 +306,7 @@ tgsi_exec_machine_bind_shader(
> 
>              for( i = 0; i < size; i++ ) {
>                 mach->Imms[mach->ImmLimit + i / 4][i % 4] =
> -                 parse.FullToken.FullImmediate.u.ImmediateFloat32[i].Float;
> +                 parse.FullToken.FullImmediate.u[i].Float;
>              }
>              mach->ImmLimit += size / 4;
>           }
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_parse.c 
> b/src/gallium/auxiliary/tgsi/tgsi_parse.c
> index 7f2cfb7..4870f82 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_parse.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_parse.c
> @@ -42,9 +42,6 @@ void
>  tgsi_full_token_free(
>     union tgsi_full_token *full_token )
>  {
> -   if( full_token->Token.Type == TGSI_TOKEN_TYPE_IMMEDIATE ) {
> -      FREE( (void *) full_token->FullImmediate.u.Pointer );
> -   }
>  }
> 
>  unsigned
> @@ -156,14 +153,8 @@ tgsi_parse_token(
>        case TGSI_IMM_FLOAT32:
>           {
>              uint imm_count = imm->Immediate.NrTokens - 1;
> -            struct tgsi_immediate_float32 *data;
> -
> -            data = (struct tgsi_immediate_float32 *) MALLOC(sizeof(struct 
> tgsi_immediate_float32) * imm_count);
> -            if (data) {
> -               for (i = 0; i < imm_count; i++) {
> -                  next_token(ctx, &data[i]);
> -               }
> -               imm->u.ImmediateFloat32 = data;
> +            for (i = 0; i < imm_count; i++) {
> +               next_token(ctx, &imm->u[i]);
>              }
>           }
>           break;
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_parse.h 
> b/src/gallium/auxiliary/tgsi/tgsi_parse.h
> index a289e26..1035bda 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_parse.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_parse.h
> @@ -73,11 +73,7 @@ struct tgsi_full_declaration
>  struct tgsi_full_immediate
>  {
>     struct tgsi_immediate   Immediate;
> -   union
> -   {
> -      const void                          *Pointer;
> -      const struct tgsi_immediate_float32 *ImmediateFloat32;
> -   } u;
> +   union tgsi_immediate_data u[4];
>  };
> 
>  #define TGSI_FULL_MAX_DST_REGISTERS 2
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_ppc.c 
> b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
> index 0c64ae5..fddf544 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_ppc.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
> @@ -1333,7 +1333,7 @@ tgsi_emit_ppc(const struct tgsi_token *tokens,
>              assert(num_immediates < TGSI_EXEC_NUM_IMMEDIATES);
>              for (i = 0; i < size; i++) {
>                 immediates[num_immediates][i] =
> -                 parse.FullToken.FullImmediate.u.ImmediateFloat32[i].Float;
> +                 parse.FullToken.FullImmediate.u[i].Float;
>              }
>              num_immediates++;
>           }
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_sse2.c 
> b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
> index 4c3343d..c347017 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_sse2.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
> @@ -2953,7 +2953,7 @@ tgsi_emit_sse2(
>              assert(num_immediates < TGSI_EXEC_NUM_IMMEDIATES);
>              for( i = 0; i < size; i++ ) {
>                 immediates[num_immediates][i] =
> -                 parse.FullToken.FullImmediate.u.ImmediateFloat32[i].Float;
> +                 parse.FullToken.FullImmediate.u[i].Float;
>              }
>  #if 0
>              debug_printf("SSE FS immediate[%d] = %f %f %f %f\n",
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c 
> b/src/gallium/auxiliary/tgsi/tgsi_text.c
> index a76bbc9..3024da6 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_text.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
> @@ -1091,7 +1091,10 @@ static boolean parse_immediate( struct translate_ctx 
> *ctx )
>     imm = tgsi_default_full_immediate();
>     imm.Immediate.NrTokens += 4;
>     imm.Immediate.DataType = TGSI_IMM_FLOAT32;
> -   imm.u.Pointer = values;
> +   imm.u[0].Float = values[0];
> +   imm.u[1].Float = values[1];
> +   imm.u[2].Float = values[2];
> +   imm.u[3].Float = values[3];
> 
>     advance = tgsi_build_full_immediate(
>        &imm,
> diff --git a/src/gallium/drivers/cell/ppu/cell_gen_fp.c 
> b/src/gallium/drivers/cell/ppu/cell_gen_fp.c
> index 5a889a6..7cd5656 100644
> --- a/src/gallium/drivers/cell/ppu/cell_gen_fp.c
> +++ b/src/gallium/drivers/cell/ppu/cell_gen_fp.c
> @@ -1875,9 +1875,9 @@ emit_immediate(struct codegen *gen, const struct 
> tgsi_full_immediate *immed)
>     assert(gen->num_imm < MAX_TEMPS);
> 
>     for (ch = 0; ch < 4; ch++) {
> -      float val = immed->u.ImmediateFloat32[ch].Float;
> +      float val = immed->u[ch].Float;
> 
> -      if (ch > 0 && val == immed->u.ImmediateFloat32[ch - 1].Float) {
> +      if (ch > 0 && val == immed->u[ch - 1].Float) {
>           /* re-use previous register */
>           gen->imm_regs[gen->num_imm][ch] = gen->imm_regs[gen->num_imm][ch - 
> 1];
>        }
> diff --git a/src/gallium/drivers/i915simple/i915_fpc_translate.c 
> b/src/gallium/drivers/i915simple/i915_fpc_translate.c
> index 961c1bf..5ac0b8c 100644
> --- a/src/gallium/drivers/i915simple/i915_fpc_translate.c
> +++ b/src/gallium/drivers/i915simple/i915_fpc_translate.c
> @@ -976,7 +976,7 @@ i915_translate_instructions(struct i915_fp_compile *p,
>              const uint pos = p->num_immediates++;
>              uint j;
>              for (j = 0; j < imm->Immediate.NrTokens - 1; j++) {
> -               p->immediates[pos][j] = imm->u.ImmediateFloat32[j].Float;
> +               p->immediates[pos][j] = imm->u[j].Float;
>              }
>           }
>           break;
> diff --git a/src/gallium/drivers/i965simple/brw_vs_emit.c 
> b/src/gallium/drivers/i965simple/brw_vs_emit.c
> index e03d653..3ee82d9 100644
> --- a/src/gallium/drivers/i965simple/brw_vs_emit.c
> +++ b/src/gallium/drivers/i965simple/brw_vs_emit.c
> @@ -1294,10 +1294,10 @@ void brw_vs_emit(struct brw_vs_compile *c)
>        case TGSI_TOKEN_TYPE_IMMEDIATE: {
>           struct tgsi_full_immediate *imm = &parse.FullToken.FullImmediate;
>           assert(imm->Immediate.NrTokens == 4 + 1);
> -         c->prog_data.imm_buf[c->prog_data.num_imm][0] = 
> imm->u.ImmediateFloat32[0].Float;
> -         c->prog_data.imm_buf[c->prog_data.num_imm][1] = 
> imm->u.ImmediateFloat32[1].Float;
> -         c->prog_data.imm_buf[c->prog_data.num_imm][2] = 
> imm->u.ImmediateFloat32[2].Float;
> -         c->prog_data.imm_buf[c->prog_data.num_imm][3] = 
> imm->u.ImmediateFloat32[3].Float;
> +         c->prog_data.imm_buf[c->prog_data.num_imm][0] = imm->u[0].Float;
> +         c->prog_data.imm_buf[c->prog_data.num_imm][1] = imm->u[1].Float;
> +         c->prog_data.imm_buf[c->prog_data.num_imm][2] = imm->u[2].Float;
> +         c->prog_data.imm_buf[c->prog_data.num_imm][3] = imm->u[3].Float;
>           c->prog_data.num_imm++;
>        }
>           break;
> diff --git a/src/gallium/drivers/nv20/nv20_vertprog.c 
> b/src/gallium/drivers/nv20/nv20_vertprog.c
> index c1e5889..388245e 100644
> --- a/src/gallium/drivers/nv20/nv20_vertprog.c
> +++ b/src/gallium/drivers/nv20/nv20_vertprog.c
> @@ -617,10 +617,10 @@ nv20_vertprog_translate(struct nv20_context *nv20,
>                         assert(imm->Immediate.NrTokens == 4 + 1);
>                         vpc->imm[vpc->nr_imm++] =
>                                 constant(vpc, -1,
> -                                        imm->u.ImmediateFloat32[0].Float,
> -                                        imm->u.ImmediateFloat32[1].Float,
> -                                        imm->u.ImmediateFloat32[2].Float,
> -                                        imm->u.ImmediateFloat32[3].Float);
> +                                        imm->u[0].Float,
> +                                        imm->u[1].Float,
> +                                        imm->u[2].Float,
> +                                        imm->u[3].Float);
>                 }
>                         break;
>                 case TGSI_TOKEN_TYPE_INSTRUCTION:
> diff --git a/src/gallium/drivers/nv30/nv30_fragprog.c 
> b/src/gallium/drivers/nv30/nv30_fragprog.c
> index 1d1c556..a48ba97 100644
> --- a/src/gallium/drivers/nv30/nv30_fragprog.c
> +++ b/src/gallium/drivers/nv30/nv30_fragprog.c
> @@ -704,10 +704,10 @@ nv30_fragprog_prepare(struct nv30_fpc *fpc)
>                         assert(imm->Immediate.DataType == TGSI_IMM_FLOAT32);
>                         assert(fpc->nr_imm < MAX_IMM);
> 
> -                       vals[0] = imm->u.ImmediateFloat32[0].Float;
> -                       vals[1] = imm->u.ImmediateFloat32[1].Float;
> -                       vals[2] = imm->u.ImmediateFloat32[2].Float;
> -                       vals[3] = imm->u.ImmediateFloat32[3].Float;
> +                       vals[0] = imm->u[0].Float;
> +                       vals[1] = imm->u[1].Float;
> +                       vals[2] = imm->u[2].Float;
> +                       vals[3] = imm->u[3].Float;
>                         fpc->imm[fpc->nr_imm++] = constant(fpc, -1, vals);
>                 }
>                         break;
> diff --git a/src/gallium/drivers/nv30/nv30_vertprog.c 
> b/src/gallium/drivers/nv30/nv30_vertprog.c
> index c7514ef..14a5c02 100644
> --- a/src/gallium/drivers/nv30/nv30_vertprog.c
> +++ b/src/gallium/drivers/nv30/nv30_vertprog.c
> @@ -617,10 +617,10 @@ nv30_vertprog_translate(struct nv30_context *nv30,
>                         assert(imm->Immediate.NrTokens == 4 + 1);
>                         vpc->imm[vpc->nr_imm++] =
>                                 constant(vpc, -1,
> -                                        imm->u.ImmediateFloat32[0].Float,
> -                                        imm->u.ImmediateFloat32[1].Float,
> -                                        imm->u.ImmediateFloat32[2].Float,
> -                                        imm->u.ImmediateFloat32[3].Float);
> +                                        imm->u[0].Float,
> +                                        imm->u[1].Float,
> +                                        imm->u[2].Float,
> +                                        imm->u[3].Float);
>                 }
>                         break;
>                 case TGSI_TOKEN_TYPE_INSTRUCTION:
> diff --git a/src/gallium/drivers/nv40/nv40_fragprog.c 
> b/src/gallium/drivers/nv40/nv40_fragprog.c
> index 680976d..32d9ed1 100644
> --- a/src/gallium/drivers/nv40/nv40_fragprog.c
> +++ b/src/gallium/drivers/nv40/nv40_fragprog.c
> @@ -790,10 +790,10 @@ nv40_fragprog_prepare(struct nv40_fpc *fpc)
>                         assert(imm->Immediate.DataType == TGSI_IMM_FLOAT32);
>                         assert(fpc->nr_imm < MAX_IMM);
> 
> -                       vals[0] = imm->u.ImmediateFloat32[0].Float;
> -                       vals[1] = imm->u.ImmediateFloat32[1].Float;
> -                       vals[2] = imm->u.ImmediateFloat32[2].Float;
> -                       vals[3] = imm->u.ImmediateFloat32[3].Float;
> +                       vals[0] = imm->u[0].Float;
> +                       vals[1] = imm->u[1].Float;
> +                       vals[2] = imm->u[2].Float;
> +                       vals[3] = imm->u[3].Float;
>                         fpc->imm[fpc->nr_imm++] = constant(fpc, -1, vals);
>                 }
>                         break;
> diff --git a/src/gallium/drivers/nv40/nv40_vertprog.c 
> b/src/gallium/drivers/nv40/nv40_vertprog.c
> index e75e8d3..0382dbb 100644
> --- a/src/gallium/drivers/nv40/nv40_vertprog.c
> +++ b/src/gallium/drivers/nv40/nv40_vertprog.c
> @@ -788,10 +788,10 @@ nv40_vertprog_translate(struct nv40_context *nv40,
>                         assert(imm->Immediate.NrTokens == 4 + 1);
>                         vpc->imm[vpc->nr_imm++] =
>                                 constant(vpc, -1,
> -                                        imm->u.ImmediateFloat32[0].Float,
> -                                        imm->u.ImmediateFloat32[1].Float,
> -                                        imm->u.ImmediateFloat32[2].Float,
> -                                        imm->u.ImmediateFloat32[3].Float);
> +                                        imm->u[0].Float,
> +                                        imm->u[1].Float,
> +                                        imm->u[2].Float,
> +                                        imm->u[3].Float);
>                 }
>                         break;
>                 case TGSI_TOKEN_TYPE_INSTRUCTION:
> diff --git a/src/gallium/drivers/nv50/nv50_program.c 
> b/src/gallium/drivers/nv50/nv50_program.c
> index 5f7d06d..4ec9c03 100644
> --- a/src/gallium/drivers/nv50/nv50_program.c
> +++ b/src/gallium/drivers/nv50/nv50_program.c
> @@ -1809,10 +1809,10 @@ nv50_program_tx_prep(struct nv50_pc *pc)
>                         const struct tgsi_full_immediate *imm =
>                                 &p.FullToken.FullImmediate;
> 
> -                       ctor_immd(pc, imm->u.ImmediateFloat32[0].Float,
> -                                     imm->u.ImmediateFloat32[1].Float,
> -                                     imm->u.ImmediateFloat32[2].Float,
> -                                     imm->u.ImmediateFloat32[3].Float);
> +                       ctor_immd(pc, imm->u[0].Float,
> +                                     imm->u[1].Float,
> +                                     imm->u[2].Float,
> +                                     imm->u[3].Float);
>                 }
>                         break;
>                 case TGSI_TOKEN_TYPE_DECLARATION:
> diff --git a/src/gallium/drivers/r300/r300_fs.c 
> b/src/gallium/drivers/r300/r300_fs.c
> index 4b30430..8672e21 100644
> --- a/src/gallium/drivers/r300/r300_fs.c
> +++ b/src/gallium/drivers/r300/r300_fs.c
> @@ -67,8 +67,7 @@ void r300_translate_fragment_shader(struct r300_context* 
> r300,
>                  for (i = 0; i < 4; i++) {
>                      consts->constants[assembler->imm_offset +
>                          assembler->imm_count][i] =
> -                        parser.FullToken.FullImmediate.u.ImmediateFloat32[i]
> -                        .Float;
> +                        parser.FullToken.FullImmediate.u[i].Float;
>                  }
>                  assembler->imm_count++;
>                  break;
> diff --git a/src/gallium/drivers/r300/r300_vs.c 
> b/src/gallium/drivers/r300/r300_vs.c
> index f87435f..a664a31 100644
> --- a/src/gallium/drivers/r300/r300_vs.c
> +++ b/src/gallium/drivers/r300/r300_vs.c
> @@ -378,8 +378,7 @@ void r300_translate_vertex_shader(struct r300_context* 
> r300,
>                  for (i = 0; i < 4; i++) {
>                      consts->constants[assembler->imm_offset +
>                          assembler->imm_count][i] =
> -                        parser.FullToken.FullImmediate.u.ImmediateFloat32[i]
> -                        .Float;
> +                        parser.FullToken.FullImmediate.u[i].Float;
>                  }
>                  assembler->imm_count++;
>                  break;
> diff --git a/src/gallium/include/pipe/p_shader_tokens.h 
> b/src/gallium/include/pipe/p_shader_tokens.h
> index b00cfe3..b87aae6 100644
> --- a/src/gallium/include/pipe/p_shader_tokens.h
> +++ b/src/gallium/include/pipe/p_shader_tokens.h
> @@ -152,7 +152,7 @@ struct tgsi_immediate
>     unsigned Extended   : 1;  /**< BOOL */
>  };
> 
> -struct tgsi_immediate_float32
> +union tgsi_immediate_data
>  {
>     float Float;
>  };
> diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
> b/src/mesa/state_tracker/st_mesa_to_tgsi.c
> index e150dff..6380cd6 100644
> --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
> +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
> @@ -225,11 +225,15 @@ static struct tgsi_full_immediate
>  make_immediate(const float *value, uint size)
>  {
>     struct tgsi_full_immediate imm;
> +   unsigned i;
> 
>     imm = tgsi_default_full_immediate();
>     imm.Immediate.NrTokens += size;
>     imm.Immediate.DataType = TGSI_IMM_FLOAT32;
> -   imm.u.Pointer = value;
> +
> +   for (i = 0; i < size; i++)
> +      imm.u[i].Float = value[i];
> +
>     return imm;
>  }
> 
> --
> 1.6.0.4
> 


------------------------------------------------------------------------------
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to