diff options
author | Paul Berry <stereotype441@gmail.com> | 2013-11-28 08:13:41 -0800 |
---|---|---|
committer | Paul Berry <stereotype441@gmail.com> | 2013-12-09 10:54:33 -0800 |
commit | e00b93a1f7b4bc7f5e887591c000524e13f80826 (patch) | |
tree | 4bfdfa0f56747019aed8c427fb3349adc1e53e7e /src/mesa | |
parent | 2c17f97fe6a40e4a963fb4eec0ea0555f562b1be (diff) |
glsl/loops: replace loop controls with a normative bound.
This patch replaces the ir_loop fields "from", "to", "increment",
"counter", and "cmp" with a single integer ("normative_bound") that
serves the same purpose.
I've used the name "normative_bound" to emphasize the fact that the
back-end is required to emit code to prevent the loop from running
more than normative_bound times. (By contrast, an "informative" bound
would be a bound that is informational only).
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 6 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 6 | ||||
-rw-r--r-- | src/mesa/program/ir_to_mesa.cpp | 6 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 6 |
4 files changed, 16 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 3e32f6e0eba..70eb9979442 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -2181,8 +2181,10 @@ fs_visitor::visit(ir_if *ir) void fs_visitor::visit(ir_loop *ir) { - /* Any bounded loops should have been lowered by lower_bounded_loops(). */ - assert(ir->counter == NULL); + /* Any normative loop bounds should have been lowered by + * lower_bounded_loops(). + */ + assert(ir->normative_bound < 0); if (brw->gen < 6 && dispatch_width == 16) { fail("Can't support (non-uniform) control flow on 16-wide\n"); diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index cf62e7ed0b0..d0e378b76ef 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -1007,8 +1007,10 @@ vec4_visitor::visit(ir_variable *ir) void vec4_visitor::visit(ir_loop *ir) { - /* Any bounded loops should have been lowered by lower_bounded_loops(). */ - assert(ir->counter == NULL); + /* Any normative loop bounds should have been lowered by + * lower_bounded_loops(). + */ + assert(ir->normative_bound < 0); /* We don't want debugging output to print the whole body of the * loop as the annotation. diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 9fd10d1d91c..583cdef9f26 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -759,8 +759,10 @@ ir_to_mesa_visitor::visit(ir_variable *ir) void ir_to_mesa_visitor::visit(ir_loop *ir) { - /* Any bounded loops should have been lowered by lower_bounded_loops(). */ - assert(ir->counter == NULL); + /* Any normative loop bounds should have been lowered by + * lower_bounded_loops(). + */ + assert(ir->normative_bound < 0); emit(NULL, OPCODE_BGNLOOP); diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index f748ed85092..18d2a5b0a41 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -1137,8 +1137,10 @@ glsl_to_tgsi_visitor::visit(ir_variable *ir) void glsl_to_tgsi_visitor::visit(ir_loop *ir) { - /* Any bounded loops should have been lowered by lower_bounded_loops(). */ - assert(ir->counter == NULL); + /* Any normative loop bounds should have been lowered by + * lower_bounded_loops(). + */ + assert(ir->normative_bound < 0); emit(NULL, TGSI_OPCODE_BGNLOOP); |