From: Paul Berry Date: Mon, 17 Dec 2012 17:55:48 +0000 (-0800) Subject: i965: Fix gl_VertexID when there are no other vertex inputs. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1b37fc40fc1d443e7ab9f930f78af9a32525698a;p=mesa.git 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 --- 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. */