Reviewed-by: Iago Toral Quiroga <ito...@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.jus...@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); > }
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev