From f248be55bdaf14ee6e2319ec4d8c0ed96433200a Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 28 Nov 2014 00:49:48 +0000 Subject: [PATCH] r600g/sb: fix issues cause by GLSL switching to loops for switch --- src/gallium/drivers/r600/sb/sb_bc_finalize.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp index f0849ca..2e04570 100644 --- a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp +++ b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp @@ -46,15 +46,22 @@ int bc_finalizer::run() { for (regions_vec::reverse_iterator I = rv.rbegin(), E = rv.rend(); I != E; ++I) { region_node *r = *I; - + bool is_if = false; assert(r); - bool loop = r->is_loop(); + assert(r->first); + if (r->first->is_container()) { + container_node *repdep1 = static_cast(r->first); + assert(repdep1->is_depart() || repdep1->is_repeat()); + if_node *n_if = static_cast(repdep1->first); + if (n_if && n_if->is_if()) + is_if = true; + } - if (loop) - finalize_loop(r); - else + if (is_if) finalize_if(r); + else + finalize_loop(r); r->expand(); } @@ -168,9 +175,6 @@ void bc_finalizer::finalize_if(region_node* r) { if (n_if) { - - assert(n_if->is_if()); - container_node *repdep2 = static_cast(n_if->first); assert(repdep2->is_depart() || repdep2->is_repeat()); -- 2.1.0