On 12/17/2012 10:03 AM, Paul Berry wrote:
brw_emit_vertices contains special case logic to handle the case where
a vertex shader doesn't read any inputs. This special case logic was
incorrectly activating in the case were the only vertex input is
gl_VertexID. As a result, if a shader used gl_VertexID but used no
other inputs, then all vertices got a gl_VertexID of zero.
Fixes oglconform test "ubo-usage advanced.transform_feedback".
---
src/mesa/drivers/dri/i965/brw_draw_upload.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c
b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index b6ce0bd..515a7a8 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -571,6 +571,8 @@ static void brw_emit_vertices(struct brw_context *brw)
brw_emit_query_begin(brw);
+ nr_elements = brw->vb.nr_enabled + brw->vs.prog_data->uses_vertexid;
+
/* If the VS doesn't read any inputs (calculating vertex position from
* a state variable for some reason, for example), emit a single pad
* VERTEX_ELEMENT struct and bail.
@@ -578,7 +580,7 @@ static void brw_emit_vertices(struct brw_context *brw)
* The stale VB state stays in place, but they don't do anything unless
* a VE loads from them.
*/
- if (brw->vb.nr_enabled == 0) {
+ if (nr_elements == 0) {
BEGIN_BATCH(3);
OUT_BATCH((_3DSTATE_VERTEX_ELEMENTS << 16) | 1);
if (intel->gen >= 6) {
@@ -642,8 +644,6 @@ static void brw_emit_vertices(struct brw_context *brw)
ADVANCE_BATCH();
}
- nr_elements = brw->vb.nr_enabled + brw->vs.prog_data->uses_vertexid;
-
/* The hardware allows one more VERTEX_ELEMENTS than VERTEX_BUFFERS,
presumably
* for VertexID/InstanceID.
*/
Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev