Module: Mesa
Branch: master
Commit: 3d497e0d915df8b71cd845c2cfbc6703db313628
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3d497e0d915df8b71cd845c2cfbc6703db313628

Author: Dave Airlie <[email protected]>
Date:   Thu Jul  9 16:36:16 2015 +1000

r600g/sb: add support for multiple streams to SB backend

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 <[email protected]>

---

 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 dadee45..522ff9d 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_finalize.cpp
@@ -764,8 +764,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 c479927..19bd078 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));
+                       }
                }
        }
 

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to