X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglsl%2Fopt_vectorize.cpp;h=2f71a83583b1f5f7c4078cd7f6d6895afe9d94e3;hb=f90c6b1ce0d96c7dbdd32ab913d5c88913700ba2;hp=f9a3b618345af7378156873a921c4ecf945c175c;hpb=ae2a03b5736037128fb071595717f300d5b3afd5;p=mesa.git diff --git a/src/glsl/opt_vectorize.cpp b/src/glsl/opt_vectorize.cpp index f9a3b618345..2f71a83583b 100644 --- a/src/glsl/opt_vectorize.cpp +++ b/src/glsl/opt_vectorize.cpp @@ -86,6 +86,7 @@ public: virtual ir_visitor_status visit_enter(ir_expression *); virtual ir_visitor_status visit_enter(ir_if *); virtual ir_visitor_status visit_enter(ir_loop *); + virtual ir_visitor_status visit_enter(ir_texture *); virtual ir_visitor_status visit_leave(ir_assignment *); @@ -227,8 +228,7 @@ write_mask_to_swizzle(unsigned write_mask) case WRITEMASK_Z: return SWIZZLE_Z; case WRITEMASK_W: return SWIZZLE_W; } - assert(!"not reached"); - unreachable(); + unreachable("not reached"); } /** @@ -352,6 +352,18 @@ ir_vectorize_visitor::visit_enter(ir_loop *ir) return visit_continue_with_parent; } +/** + * Upon entering an ir_texture, remove the current assignment from + * further consideration. Vectorizing multiple texture lookups into one + * is wrong. + */ +ir_visitor_status +ir_vectorize_visitor::visit_enter(ir_texture *) +{ + this->current_assignment = NULL; + return visit_continue_with_parent; +} + /** * Upon leaving an ir_assignment, save a pointer to it in ::assignment[] if * the swizzle mask(s) found were appropriate. Also save a pointer in