From c00801de923e125863aaf8180439d59d610b2517 Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Mon, 8 Jan 2018 05:41:34 +0000 Subject: Revert to Mesa 13.0.6 again. Corruption has again been reported on Intel hardware running Xorg with the modesetting driver (which uses OpenGL based acceleration instead of SNA acceleration the intel driver defaults to). Reported in various forms on Sandy Bridge (X220), Ivy Bridge (X230) and Haswell (X240). Confirmed to not occur with the intel driver but the xserver was changed to default to the modesetting driver on >= gen4 hardware (except Ironlake). One means of triggering this is to open a large pdf with xpdf on an idle machine and highlight a section of the document. There have been reports of gpu hangs on gen4 intel hardware (T500 with GM45, X61 with 965GM) when starting Xorg as well. --- lib/mesa/src/compiler/glsl/lower_output_reads.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'lib/mesa/src/compiler/glsl/lower_output_reads.cpp') diff --git a/lib/mesa/src/compiler/glsl/lower_output_reads.cpp b/lib/mesa/src/compiler/glsl/lower_output_reads.cpp index bd3accb3d..8a375ac0a 100644 --- a/lib/mesa/src/compiler/glsl/lower_output_reads.cpp +++ b/lib/mesa/src/compiler/glsl/lower_output_reads.cpp @@ -47,6 +47,8 @@ protected: */ hash_table *replacements; + void *mem_ctx; + unsigned stage; public: output_read_remover(unsigned stage); @@ -78,6 +80,7 @@ hash_table_var_hash(const void *key) output_read_remover::output_read_remover(unsigned stage) { this->stage = stage; + mem_ctx = ralloc_context(NULL); replacements = _mesa_hash_table_create(NULL, hash_table_var_hash, _mesa_key_pointer_equal); } @@ -85,12 +88,15 @@ output_read_remover::output_read_remover(unsigned stage) 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 || ir->var->data.fb_fetch_output) + 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); @@ -167,12 +173,6 @@ output_read_remover::visit_leave(ir_function_signature *sig) 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); } -- cgit v1.2.3