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