aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2012-12-17 09:55:48 -0800
committerPaul Berry <[email protected]>2012-12-18 09:02:53 -0800
commit1b37fc40fc1d443e7ab9f930f78af9a32525698a (patch)
treebac86839dc84ed051f7081e9bad0b2ce09828522 /src/mesa/drivers/dri
parent5b7099c74d7774dc59895536bad53bd1196e398c (diff)
i965: Fix gl_VertexID when there are no other vertex inputs.
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". Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r--src/mesa/drivers/dri/i965/brw_draw_upload.c6
1 files 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 b6ce0bd13a9..515a7a8a50c 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.
*/