[Mesa-dev] [PATCH] tgsi: move to using vector for system values.

Brian Paul brianp at vmware.com
Tue Apr 26 15:22:33 UTC 2016


On 04/25/2016 05:49 PM, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> For compute support some of the system values are .xyz types,
> so move to using a vector instead of a single channel.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>   src/gallium/auxiliary/draw/draw_gs.c      | 2 +-
>   src/gallium/auxiliary/draw/draw_vs_exec.c | 8 ++++----
>   src/gallium/auxiliary/tgsi/tgsi_exec.c    | 2 +-
>   src/gallium/auxiliary/tgsi/tgsi_exec.h    | 2 +-
>   4 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
> index ef217fa..95ea94f 100644
> --- a/src/gallium/auxiliary/draw/draw_gs.c
> +++ b/src/gallium/auxiliary/draw/draw_gs.c
> @@ -197,7 +197,7 @@ static void tgsi_gs_prepare(struct draw_geometry_shader *shader,
>      if (shader->info.uses_invocationid) {
>         unsigned i = machine->SysSemanticToIndex[TGSI_SEMANTIC_INVOCATIONID];
>         for (j = 0; j < TGSI_QUAD_SIZE; j++)
> -         machine->SystemValue[i].i[j] = shader->invocation_id;
> +         machine->SystemValue[i].xyzw[0].i[j] = shader->invocation_id;
>      }
>   }
>
> diff --git a/src/gallium/auxiliary/draw/draw_vs_exec.c b/src/gallium/auxiliary/draw/draw_vs_exec.c
> index da0d1a7..fe6ad5b 100644
> --- a/src/gallium/auxiliary/draw/draw_vs_exec.c
> +++ b/src/gallium/auxiliary/draw/draw_vs_exec.c
> @@ -107,7 +107,7 @@ vs_exec_run_linear( struct draw_vertex_shader *shader,
>         unsigned i = machine->SysSemanticToIndex[TGSI_SEMANTIC_INSTANCEID];
>         assert(i < Elements(machine->SystemValue));
>         for (j = 0; j < TGSI_QUAD_SIZE; j++)
> -         machine->SystemValue[i].i[j] = shader->draw->instance_id;
> +         machine->SystemValue[i].xyzw[0].i[j] = shader->draw->instance_id;
>      }
>
>      for (i = 0; i < count; i += MAX_TGSI_VERTICES) {
> @@ -130,19 +130,19 @@ vs_exec_run_linear( struct draw_vertex_shader *shader,
>            if (shader->info.uses_vertexid) {
>               unsigned vid = machine->SysSemanticToIndex[TGSI_SEMANTIC_VERTEXID];
>               assert(vid < Elements(machine->SystemValue));
> -            machine->SystemValue[vid].i[j] = i + j;
> +            machine->SystemValue[vid].xyzw[0].i[j] = i + j;
>               /* XXX this should include base vertex. Where to get it??? */
>            }
>            if (shader->info.uses_basevertex) {
>               unsigned vid = machine->SysSemanticToIndex[TGSI_SEMANTIC_BASEVERTEX];
>               assert(vid < Elements(machine->SystemValue));
> -            machine->SystemValue[vid].i[j] = 0;
> +            machine->SystemValue[vid].xyzw[0].i[j] = 0;
>               /* XXX Where to get it??? */
>            }
>            if (shader->info.uses_vertexid_nobase) {
>               unsigned vid = machine->SysSemanticToIndex[TGSI_SEMANTIC_VERTEXID_NOBASE];
>               assert(vid < Elements(machine->SystemValue));
> -            machine->SystemValue[vid].i[j] = i + j;
> +            machine->SystemValue[vid].xyzw[0].i[j] = i + j;
>            }
>
>            for (slot = 0; slot < shader->info.num_inputs; slot++) {
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
> index 002aefc..0e1642e 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
> @@ -1277,7 +1277,7 @@ fetch_src_file_channel(const struct tgsi_exec_machine *mach,
>          * gl_FragCoord, for example, in a sys value register.
>          */
>         for (i = 0; i < TGSI_QUAD_SIZE; i++) {
> -         chan->u[i] = mach->SystemValue[index->i[i]].u[i];
> +         chan->u[i] = mach->SystemValue[index->i[i]].xyzw[0].u[i];
>         }
>         break;
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h b/src/gallium/auxiliary/tgsi/tgsi_exec.h
> index d02a45a..897ac7a 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_exec.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h
> @@ -356,7 +356,7 @@ struct tgsi_exec_machine
>
>      /* System values */
>      unsigned                      SysSemanticToIndex[TGSI_SEMANTIC_COUNT];
> -   union tgsi_exec_channel       SystemValue[TGSI_MAX_MISC_INPUTS];
> +   struct tgsi_exec_vector       SystemValue[TGSI_MAX_MISC_INPUTS];
>
>      struct tgsi_exec_vector       *Addrs;
>      struct tgsi_exec_vector       *Predicates;
>

Reviewed-by: Brian Paul <brianp at vmware.com>



More information about the mesa-dev mailing list