[Mesa-dev] [PATCH v2 37/42] glsl: Disable several optimizations on shared variables
Iago Toral
itoral at igalia.com
Wed Nov 25 04:14:03 PST 2015
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
On Tue, 2015-11-17 at 21:55 -0800, Jordan Justen wrote:
> Shared variables can be accessed by other threads within the same
> local workgroup. This prevents us from performing certain
> optimizations with shared variables.
>
> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> ---
> src/glsl/opt_constant_propagation.cpp | 3 ++-
> src/glsl/opt_constant_variable.cpp | 3 ++-
> src/glsl/opt_copy_propagation.cpp | 3 ++-
> 3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/glsl/opt_constant_propagation.cpp b/src/glsl/opt_constant_propagation.cpp
> index 184aaa1..fb24a4f 100644
> --- a/src/glsl/opt_constant_propagation.cpp
> +++ b/src/glsl/opt_constant_propagation.cpp
> @@ -500,7 +500,8 @@ ir_constant_propagation_visitor::add_constant(ir_assignment *ir)
> * the variable value isn't modified between this assignment and the next
> * instruction where its value is read.
> */
> - if (deref->var->data.mode == ir_var_shader_storage)
> + if (deref->var->data.mode == ir_var_shader_storage ||
> + deref->var->data.mode == ir_var_shader_shared)
> return;
>
> entry = new(this->mem_ctx) acp_entry(deref->var, ir->write_mask, constant);
> diff --git a/src/glsl/opt_constant_variable.cpp b/src/glsl/opt_constant_variable.cpp
> index cdfbc34..56f6a81 100644
> --- a/src/glsl/opt_constant_variable.cpp
> +++ b/src/glsl/opt_constant_variable.cpp
> @@ -120,7 +120,8 @@ ir_constant_variable_visitor::visit_enter(ir_assignment *ir)
> * and we can't be sure that this variable won't be written by another
> * thread.
> */
> - if (var->data.mode == ir_var_shader_storage)
> + if (var->data.mode == ir_var_shader_storage ||
> + var->data.mode == ir_var_shader_shared)
> return visit_continue;
>
> constval = ir->rhs->constant_expression_value();
> diff --git a/src/glsl/opt_copy_propagation.cpp b/src/glsl/opt_copy_propagation.cpp
> index f206995..5d4cb4f 100644
> --- a/src/glsl/opt_copy_propagation.cpp
> +++ b/src/glsl/opt_copy_propagation.cpp
> @@ -330,7 +330,8 @@ ir_copy_propagation_visitor::add_copy(ir_assignment *ir)
> */
> ir->condition = new(ralloc_parent(ir)) ir_constant(false);
> this->progress = true;
> - } else if (lhs_var->data.mode != ir_var_shader_storage) {
> + } else if (lhs_var->data.mode != ir_var_shader_storage &&
> + lhs_var->data.mode != ir_var_shader_shared) {
> entry = new(this->acp) acp_entry(lhs_var, rhs_var);
> this->acp->push_tail(entry);
> }
More information about the mesa-dev
mailing list