瀏覽代碼

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);


Loading…
取消
儲存