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 <kenneth@whitecape.org>
This commit is contained in:
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user