[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