[Mesa-dev] [PATCH 2/4] r600g/sb: add support for multiple streams to SB backend

Dave Airlie airlied at gmail.com
Mon Aug 24 18:18:46 PDT 2015


From: Dave Airlie <airlied at redhat.com>

This adds a peephole and removes an assert that isn't
actually valid with some of the stream emit instructions.

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 src/gallium/drivers/r600/sb/sb_bc_finalize.cpp |  2 --
 src/gallium/drivers/r600/sb/sb_bc_parser.cpp   | 18 +++++++++++++++---
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
index 8c2cd14..48d56ac 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
@@ -761,8 +761,6 @@ void bc_finalizer::finalize_cf(cf_node* c) {
 			mask |= (1 << chan);
 		}
 
-		assert(reg >= 0 && mask);
-
 		if (reg >= 0)
 			update_ngpr(reg);
 
diff --git a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
index 4879c03..25b0f55 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
@@ -757,10 +757,22 @@ int bc_parser::prepare_ir() {
 			c->bc.end_of_program = eop;
 
 		} else if (flags & CF_EMIT) {
-			c->flags |= NF_DONT_KILL | NF_DONT_HOIST | NF_DONT_MOVE;
+			/* quick peephole */
+			cf_node *prev = static_cast<cf_node *>(c->prev);
+			if (c->bc.op == CF_OP_CUT_VERTEX &&
+				prev && prev->is_valid() &&
+				prev->bc.op == CF_OP_EMIT_VERTEX &&
+				c->bc.count == prev->bc.count) {
+				prev->bc.set_op(CF_OP_EMIT_CUT_VERTEX);
+				prev->bc.end_of_program = c->bc.end_of_program;
+				c->remove();
+			}
+			else {
+				c->flags |= NF_DONT_KILL | NF_DONT_HOIST | NF_DONT_MOVE;
 
-			c->src.push_back(sh->get_special_value(SV_GEOMETRY_EMIT));
-			c->dst.push_back(sh->get_special_value(SV_GEOMETRY_EMIT));
+				c->src.push_back(sh->get_special_value(SV_GEOMETRY_EMIT));
+				c->dst.push_back(sh->get_special_value(SV_GEOMETRY_EMIT));
+			}
 		}
 	}
 
-- 
2.4.3



More information about the mesa-dev mailing list