[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