ソースを参照

glsl: Handle conditional discards in lower_discard_flow().

This pass wasn't prepared to handle conditional discards.

Instead of initializing the "discarded" temporary to "true", set it to
the condition.  Then, refer to the variable for the condition, to avoid
duplicating the expression tree.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
tags/10.6-branchpoint
Kenneth Graunke 10年前
コミット
d77b186871
1個のファイルの変更8行の追加1行の削除
  1. 8
    1
      src/glsl/lower_discard_flow.cpp

+ 8
- 1
src/glsl/lower_discard_flow.cpp ファイルの表示

@@ -90,7 +90,14 @@ ir_visitor_status
lower_discard_flow_visitor::visit_enter(ir_discard *ir)
{
ir_dereference *lhs = new(mem_ctx) ir_dereference_variable(discarded);
ir_rvalue *rhs = new(mem_ctx) ir_constant(true);
ir_rvalue *rhs;
if (ir->condition) {
/* discarded <- condition, use (var_ref discarded) as the condition */
rhs = ir->condition;
ir->condition = new(mem_ctx) ir_dereference_variable(discarded);
} else {
rhs = new(mem_ctx) ir_constant(true);
}
ir_assignment *assign = new(mem_ctx) ir_assignment(lhs, rhs);
ir->insert_before(assign);


読み込み中…
キャンセル
保存