diff options
Diffstat (limited to 'mesalib/src/glsl')
-rw-r--r-- | mesalib/src/glsl/Makefile.am | 4 | ||||
-rw-r--r-- | mesalib/src/glsl/glsl_parser_extras.cpp | 2 | ||||
-rw-r--r-- | mesalib/src/glsl/linker.cpp | 5 | ||||
-rw-r--r-- | mesalib/src/glsl/lower_clip_distance.cpp | 5 |
4 files changed, 15 insertions, 1 deletions
diff --git a/mesalib/src/glsl/Makefile.am b/mesalib/src/glsl/Makefile.am index b9ed5b62b..27e180e0a 100644 --- a/mesalib/src/glsl/Makefile.am +++ b/mesalib/src/glsl/Makefile.am @@ -111,7 +111,9 @@ libglcpp_la_SOURCES = \ glcpp_glcpp_SOURCES = \ glcpp/glcpp.c \ $(top_srcdir)/src/mesa/program/prog_hash_table.c -glcpp_glcpp_LDADD = libglcpp.la +glcpp_glcpp_LDADD = \ + libglcpp.la \ + -lm libglsl_la_LIBADD = libglcpp.la libglsl_la_SOURCES = \ diff --git a/mesalib/src/glsl/glsl_parser_extras.cpp b/mesalib/src/glsl/glsl_parser_extras.cpp index f401f03bc..d76d94b7a 100644 --- a/mesalib/src/glsl/glsl_parser_extras.cpp +++ b/mesalib/src/glsl/glsl_parser_extras.cpp @@ -191,6 +191,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, this->gs_input_prim_type = GL_POINTS; this->gs_input_size = 0; this->out_qualifier = new(this) ast_type_qualifier(); + memset(this->atomic_counter_offsets, 0, + sizeof(this->atomic_counter_offsets)); } /** diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp index fac186a63..1366077f7 100644 --- a/mesalib/src/glsl/linker.cpp +++ b/mesalib/src/glsl/linker.cpp @@ -2396,6 +2396,11 @@ done: if (prog->_LinkedShaders[i] == NULL) continue; + /* Do a final validation step to make sure that the IR wasn't + * invalidated by any modifications performed after intrastage linking. + */ + validate_ir_tree(prog->_LinkedShaders[i]->ir); + /* Retain any live IR, but trash the rest. */ reparent_ir(prog->_LinkedShaders[i]->ir, prog->_LinkedShaders[i]->ir); diff --git a/mesalib/src/glsl/lower_clip_distance.cpp b/mesalib/src/glsl/lower_clip_distance.cpp index 682c8fdcd..04fa6d410 100644 --- a/mesalib/src/glsl/lower_clip_distance.cpp +++ b/mesalib/src/glsl/lower_clip_distance.cpp @@ -381,6 +381,11 @@ lower_clip_distance_visitor::fix_lhs(ir_assignment *ir) ir_visitor_status lower_clip_distance_visitor::visit_leave(ir_assignment *ir) { + /* First invoke the base class visitor. This causes handle_rvalue() to be + * called on ir->rhs and ir->condition. + */ + ir_rvalue_visitor::visit_leave(ir); + if (this->is_clip_distance_vec8(ir->lhs) || this->is_clip_distance_vec8(ir->rhs)) { /* LHS or RHS of the assignment is the entire 1D gl_ClipDistance array |