From: Nicolai Hähnle <nicolai.haeh...@amd.com> This whole pass is a no-op. --- src/compiler/glsl/lower_output_reads.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/compiler/glsl/lower_output_reads.cpp b/src/compiler/glsl/lower_output_reads.cpp index 8a375ac..b0045f0 100644 --- a/src/compiler/glsl/lower_output_reads.cpp +++ b/src/compiler/glsl/lower_output_reads.cpp @@ -89,22 +89,20 @@ output_read_remover::~output_read_remover() { _mesa_hash_table_destroy(replacements, NULL); ralloc_free(mem_ctx); } ir_visitor_status output_read_remover::visit(ir_dereference_variable *ir) { if (ir->var->data.mode != ir_var_shader_out) return visit_continue; - if (stage == MESA_SHADER_TESS_CTRL) - return visit_continue; hash_entry *entry = _mesa_hash_table_search(replacements, ir->var); ir_variable *temp = entry ? (ir_variable *) entry->data : NULL; /* If we don't have an existing temporary, create one. */ if (temp == NULL) { void *var_ctx = ralloc_parent(ir->var); temp = new(var_ctx) ir_variable(ir->var->type, ir->var->name, ir_var_temporary); _mesa_hash_table_insert(replacements, ir->var, temp); @@ -166,13 +164,19 @@ output_read_remover::visit_leave(ir_function_signature *sig) if (strcmp(sig->function_name(), "main") != 0) return visit_continue; hash_table_call_foreach(replacements, emit_main_copy, sig); return visit_continue; } void lower_output_reads(unsigned stage, exec_list *instructions) { + /* Due to the possible interactions between multiple tessellation control + * shader invocations, we leave output variables as-is. + */ + if (stage == MESA_SHADER_TESS_CTRL) + return; + output_read_remover v(stage); visit_list_elements(&v, instructions); } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev