We have ir_rvalues for various fields within ir_ssbo_store, so we want constant folding to know about them. Specifically, the offset of the store operation can be computed as the addition of a constant offset and a constant base offset, so we want that constant addition replaced with its constant result. --- src/glsl/opt_constant_folding.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
diff --git a/src/glsl/opt_constant_folding.cpp b/src/glsl/opt_constant_folding.cpp index 4aae3f0..4cc9f68 100644 --- a/src/glsl/opt_constant_folding.cpp +++ b/src/glsl/opt_constant_folding.cpp @@ -53,6 +53,7 @@ public: virtual ir_visitor_status visit_enter(ir_discard *ir); virtual ir_visitor_status visit_enter(ir_assignment *ir); virtual ir_visitor_status visit_enter(ir_call *ir); + virtual ir_visitor_status visit_enter(ir_ssbo_store *ir); virtual void handle_rvalue(ir_rvalue **rvalue); @@ -179,6 +180,21 @@ ir_constant_folding_visitor::visit_enter(ir_call *ir) return visit_continue_with_parent; } +ir_visitor_status +ir_constant_folding_visitor::visit_enter(ir_ssbo_store *ir) +{ + ir->block->accept(this); + handle_rvalue(&ir->block); + + ir->offset->accept(this); + handle_rvalue(&ir->offset); + + ir->val->accept(this); + handle_rvalue(&ir->val); + + return visit_continue_with_parent; +} + bool do_constant_folding(exec_list *instructions) { -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev