summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2016-05-23 15:17:02 -0700
committerIan Romanick <ian.d.romanick@intel.com>2016-06-01 11:11:39 -0700
commitb27dfa5403ed1884999524417c08d2bc50365965 (patch)
tree6e5a5efece055145b771f7546f481e8e67522c93
parent049bb94d2e177f7415e7dddd71907be3e7f153c6 (diff)
downloadexternal_mesa3d-b27dfa5403ed1884999524417c08d2bc50365965.zip
external_mesa3d-b27dfa5403ed1884999524417c08d2bc50365965.tar.gz
external_mesa3d-b27dfa5403ed1884999524417c08d2bc50365965.tar.bz2
i965: If control_data_header_size_bits is zero, don't do EndPrimitive
This can occur when max_vertices=0 is explicitly specified. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Cc: "12.0" <mesa-stable@lists.freedesktop.org>
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_nir.cpp3
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
index 58191fc..e9f6999 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
@@ -1668,6 +1668,9 @@ fs_visitor::emit_gs_end_primitive(const nir_src &vertex_count_nir_src)
struct brw_gs_prog_data *gs_prog_data =
(struct brw_gs_prog_data *) prog_data;
+ if (gs_compile->control_data_header_size_bits == 0)
+ return;
+
/* We can only do EndPrimitive() functionality when the control data
* consists of cut bits. Fortunately, the only time it isn't is when the
* output type is points, in which case EndPrimitive() is a no-op.
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
index 76a80a5..927438f 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
@@ -539,6 +539,9 @@ vec4_gs_visitor::gs_end_primitive()
return;
}
+ if (c->control_data_header_size_bits == 0)
+ return;
+
/* Cut bits use one bit per vertex. */
assert(c->control_data_bits_per_vertex == 1);