[Mesa-dev] [PATCH 1/7] tgsi/scan: record barrier instruction usage

Nicolai Hähnle nhaehnle at gmail.com
Fri May 26 09:52:02 UTC 2017


Not really useful on its own, but you'd still need it if you do go the 
route of splitting up threadgroups under the hood. So in that case:

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>


On 25.05.2017 19:04, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> ---
>   src/gallium/auxiliary/tgsi/tgsi_scan.c | 6 ++++++
>   src/gallium/auxiliary/tgsi/tgsi_scan.h | 2 ++
>   2 files changed, 8 insertions(+)
> 
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> index 847f4fc..cfe9f15 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> @@ -360,20 +360,26 @@ scan_instruction(struct tgsi_shader_info *info,
>      case TGSI_OPCODE_IF:
>      case TGSI_OPCODE_UIF:
>      case TGSI_OPCODE_BGNLOOP:
>         (*current_depth)++;
>         info->max_depth = MAX2(info->max_depth, *current_depth);
>         break;
>      case TGSI_OPCODE_ENDIF:
>      case TGSI_OPCODE_ENDLOOP:
>         (*current_depth)--;
>         break;
> +   case TGSI_OPCODE_BARRIER:
> +      info->uses_barrier = true;
> +      break;
> +   case TGSI_OPCODE_MEMBAR:
> +      info->uses_memory_barrier = true;
> +      break;
>      default:
>         break;
>      }
>   
>      if (fullinst->Instruction.Opcode == TGSI_OPCODE_INTERP_CENTROID ||
>          fullinst->Instruction.Opcode == TGSI_OPCODE_INTERP_OFFSET ||
>          fullinst->Instruction.Opcode == TGSI_OPCODE_INTERP_SAMPLE) {
>         const struct tgsi_full_src_register *src0 = &fullinst->Src[0];
>         unsigned input;
>   
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
> index af1651b..baaa7f6 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
> @@ -128,20 +128,22 @@ struct tgsi_shader_info
>      boolean writes_position;
>      boolean writes_psize;
>      boolean writes_clipvertex;
>      boolean writes_primid;
>      boolean writes_viewport_index;
>      boolean writes_layer;
>      boolean writes_memory; /**< contains stores or atomics to buffers or images */
>      boolean is_msaa_sampler[PIPE_MAX_SAMPLERS];
>      boolean uses_doubles; /**< uses any of the double instructions */
>      boolean uses_derivatives;
> +   boolean uses_barrier;
> +   boolean uses_memory_barrier;
>      unsigned clipdist_writemask;
>      unsigned culldist_writemask;
>      unsigned num_written_culldistance;
>      unsigned num_written_clipdistance;
>   
>      unsigned images_declared; /**< bitmask of declared images */
>      /**
>       * Bitmask indicating which declared image is a buffer.
>       */
>      unsigned images_buffers;
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list