[Mesa-dev] [PATCH v2 14/20] st/mesa: keep track of shared memory declarations
Ilia Mirkin
imirkin at alum.mit.edu
Sun Feb 7 18:26:36 UTC 2016
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
On Sat, Feb 6, 2016 at 5:04 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index d74b84c..9303495 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -401,6 +401,7 @@ public:
> bool native_integers;
> bool have_sqrt;
> bool have_fma;
> + bool use_shared_memory;
>
> variable_storage *find_variable_storage(ir_variable *var);
>
> @@ -3979,6 +3980,7 @@ glsl_to_tgsi_visitor::glsl_to_tgsi_visitor()
> options = NULL;
> have_sqrt = false;
> have_fma = false;
> + use_shared_memory = false;
> }
>
> glsl_to_tgsi_visitor::~glsl_to_tgsi_visitor()
> @@ -4024,6 +4026,8 @@ count_resources(glsl_to_tgsi_visitor *v, gl_program *prog)
> inst->op == TGSI_OPCODE_STORE)) {
> if (inst->buffer.file == PROGRAM_BUFFER)
> v->buffers_used |= 1 << inst->buffer.index;
> + if (inst->buffer.file == PROGRAM_MEMORY)
> + v->use_shared_memory = true;
> }
> }
> prog->SamplersUsed = v->samplers_used;
> @@ -4807,6 +4811,7 @@ struct st_translate {
> struct ureg_src samplers[PIPE_MAX_SAMPLERS];
> struct ureg_src buffers[PIPE_MAX_SHADER_BUFFERS];
> struct ureg_src systemValues[SYSTEM_VALUE_MAX];
> + struct ureg_src shared_memory;
> struct tgsi_texture_offset tex_offsets[MAX_GLSL_TEXTURE_OFFSET];
> unsigned *array_sizes;
> struct array_decl *input_arrays;
> @@ -5295,7 +5300,10 @@ compile_tgsi_instruction(struct st_translate *t,
> for (i = num_src - 1; i >= 0; i--)
> src[i + 1] = src[i];
> num_src++;
> - src[0] = t->buffers[inst->buffer.index];
> + if (inst->buffer.file == PROGRAM_MEMORY)
> + src[0] = t->shared_memory;
> + else
> + src[0] = t->buffers[inst->buffer.index];
> if (inst->buffer.reladdr)
> src[0] = ureg_src_indirect(src[0], ureg_src(t->address[2]));
> assert(src[0].File != TGSI_FILE_NULL);
> @@ -5304,7 +5312,11 @@ compile_tgsi_instruction(struct st_translate *t,
> break;
>
> case TGSI_OPCODE_STORE:
> - dst[0] = ureg_writemask(ureg_dst(t->buffers[inst->buffer.index]), inst->dst[0].writemask);
> + if (inst->buffer.file == PROGRAM_MEMORY)
> + dst[0] = ureg_dst(t->shared_memory);
> + else
> + dst[0] = ureg_dst(t->buffers[inst->buffer.index]);
> + dst[0] = ureg_writemask(dst[0], inst->dst[0].writemask);
> if (inst->buffer.reladdr)
> dst[0] = ureg_dst_indirect(dst[0], ureg_src(t->address[2]));
> assert(dst[0].File != TGSI_FILE_NULL);
> @@ -5959,7 +5971,8 @@ st_translate_program(
> }
> }
>
> -
> + if (program->use_shared_memory)
> + t->shared_memory = ureg_DECL_shared_memory(ureg);
>
> /* Emit each instruction in turn:
> */
> --
> 2.6.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list