summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2013-11-28 08:13:41 -0800
committerPaul Berry <[email protected]>2013-12-09 10:54:33 -0800
commite00b93a1f7b4bc7f5e887591c000524e13f80826 (patch)
tree4bfdfa0f56747019aed8c427fb3349adc1e53e7e /src/mesa/drivers
parent2c17f97fe6a40e4a963fb4eec0ea0555f562b1be (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 <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_visitor.cpp6
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp6
2 files changed, 8 insertions, 4 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.