glsl: Disable several optimizations on shared variables
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@intel.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
f821a3ec4f
commit
fc21a7c26e
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue