소스 검색

glsl: Fix loop bounds detection.

When analyzing a loop where the loop condition is expressed in the
non-standard order (e.g. "4 > i" instead of "i < 4"), we were
reversing the condition incorrectly, leading to a loop bound that was
off by 1.

Fixes piglit tests {vs,fs}-loop-bounds-unrolled.shader_test.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
tags/mesa-9.1-rc1
Paul Berry 12 년 전
부모
커밋
09df6bb96d
1개의 변경된 파일4개의 추가작업 그리고 4개의 파일을 삭제
  1. 4
    4
      src/glsl/loop_controls.cpp

+ 4
- 4
src/glsl/loop_controls.cpp 파일 보기

@@ -222,10 +222,10 @@ loop_control_visitor::visit_leave(ir_loop *ir)
limit = cond->operands[0]->as_constant();

switch (cmp) {
case ir_binop_less: cmp = ir_binop_gequal; break;
case ir_binop_greater: cmp = ir_binop_lequal; break;
case ir_binop_lequal: cmp = ir_binop_greater; break;
case ir_binop_gequal: cmp = ir_binop_less; break;
case ir_binop_less: cmp = ir_binop_greater; break;
case ir_binop_greater: cmp = ir_binop_less; break;
case ir_binop_lequal: cmp = ir_binop_gequal; break;
case ir_binop_gequal: cmp = ir_binop_lequal; break;
default: assert(!"Should not get here.");
}
}

Loading…
취소
저장