<div dir="ltr">On 28 January 2014 11:22, Jordan Justen <span dir="ltr"><<a href="mailto:jordan.l.justen@intel.com" target="_blank">jordan.l.justen@intel.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Signed-off-by: Jordan Justen <<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>><br>
---<br>
 src/mesa/drivers/dri/i965/brw_context.h           | 2 ++<br>
 src/mesa/drivers/dri/i965/brw_defines.h           | 1 +<br>
 src/mesa/drivers/dri/i965/brw_vec4_gs.c           | 2 ++<br>
 src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 6 ++++--<br>
 src/mesa/drivers/dri/i965/gen7_gs_state.c         | 2 ++<br>
 5 files changed, 11 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h<br>
index 8d098e6..ade4458 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_context.h<br>
+++ b/src/mesa/drivers/dri/i965/brw_context.h<br>
@@ -639,6 +639,8 @@ struct brw_gs_prog_data<br>
<br>
    bool include_primitive_id;<br>
<br>
+   int invocations;<br>
+<br>
    /**<br>
     * True if the thread should be dispatched in DUAL_INSTANCE mode, false if<br>
     * it should be dispatched in DUAL_OBJECT mode.<br>
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h<br>
index 5fe1aba..eaf6e8f 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_defines.h<br>
+++ b/src/mesa/drivers/dri/i965/brw_defines.h<br>
@@ -1478,6 +1478,7 @@ enum brw_message_target {<br>
 # define GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_CUT         0<br>
 # define GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_SID         1<br>
 # define GEN7_GS_CONTROL_DATA_HEADER_SIZE_SHIFT                20<br>
+# define GEN7_GS_INSTANCE_CONTROL_SHIFT                        15<br>
 # define GEN7_GS_DISPATCH_MODE_SINGLE                  (0 << 11)<br>
 # define GEN7_GS_DISPATCH_MODE_DUAL_INSTANCE           (1 << 11)<br>
 # define GEN7_GS_DISPATCH_MODE_DUAL_OBJECT             (2 << 11)<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs.c b/src/mesa/drivers/dri/i965/brw_vec4_gs.c<br>
index abc181b..3c6393f 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs.c<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs.c<br>
@@ -48,6 +48,8 @@ do_gs_prog(struct brw_context *brw,<br>
    c.prog_data.include_primitive_id =<br>
       (gp->program.Base.InputsRead & VARYING_BIT_PRIMITIVE_ID) != 0;<br>
<br>
+   c.prog_data.invocations = gp->program.Invocations;<br>
+<br>
    /* Allocate the references to the uniforms that will end up in the<br>
     * prog_data associated with the compiled program, and which will be freed<br>
     * by the state cache.<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp<br>
index 12e137c..21dbc29 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp<br>
@@ -596,9 +596,11 @@ brw_gs_emit(struct brw_context *brw,<br>
    }<br>
<br>
    /* Compile the geometry shader in DUAL_OBJECT dispatch mode, if we can do<br>
-    * so without spilling.<br>
+    * so without spilling. If the GS invocations count > 1, then we can't use<br>
+    * dual object mode.<br>
     */<br>
-   if (likely(!(INTEL_DEBUG & DEBUG_NO_DUAL_OBJECT_GS))) {<br>
+   if (c->prog_data.invocations <= 1 ||<br>
+       likely(!(INTEL_DEBUG & DEBUG_NO_DUAL_OBJECT_GS))) {<br></blockquote><div><br></div><div>This should be &&, not ||.<br><br></div><div>With that fixed, this patch is:<br><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br>
<br></div><div>I sent comments on patches 1, 2, 4, 6, and 7.  Patches 3 and 5 are:<br><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br></div></div></div></div>