diff options
author | Aras Pranckevicius <[email protected]> | 2014-08-13 20:40:05 +0300 |
---|---|---|
committer | Matt Turner <[email protected]> | 2014-08-14 09:40:33 -0700 |
commit | 2b837576eb47eeb25f381c534a8bbccda0ee4c89 (patch) | |
tree | ed9a4fce1983cbcc1fdad0f52c21d58a82c7d8c1 /src | |
parent | 088106fa798adf43b7965c2d1861d2905c63d062 (diff) |
glsl: Fixed vectorize pass vs. texture lookups.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=82574
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/opt_vectorize.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/glsl/opt_vectorize.cpp b/src/glsl/opt_vectorize.cpp index 28534a86ade..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 *); @@ -352,6 +353,18 @@ ir_vectorize_visitor::visit_enter(ir_loop *ir) } /** + * 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 * ::last_assignment so that we can compare future assignments with it. |