diff options
author | Eric Anholt <[email protected]> | 2011-11-08 18:50:09 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2011-11-11 08:27:59 -0800 |
commit | 1c65abb211e6a3df8c46180ae3242486ee97dc8d (patch) | |
tree | 89e4d0955f49f0cd841c9d0f7efd933f6d7fdd4a /src/mesa/drivers/dri/i965/brw_vec4_emit.cpp | |
parent | 9472f6677672ac89d6addba025b33287670da9e9 (diff) |
i965: Add support for gl_VertexID and gl_InstanceID.
The compiler setup for these VF-uploaded attributes looks a little
cheesy with mixing system values and real VBO-sourced attributes. It
would be nice if we could just compute the ATTR[] map to GRF index up
front and use it at visit time instead of using ir->location in the
ATTR file. However, we don't know the reg_offset at
visit(ir_variable *) time, so we can't do the mapping that early.
Fixes piglit vertexid test.
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_vec4_emit.cpp')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_emit.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp index dc39f17614a..54bbe1347b9 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp @@ -35,7 +35,7 @@ int vec4_visitor::setup_attributes(int payload_reg) { int nr_attributes; - int attribute_map[VERT_ATTRIB_MAX]; + int attribute_map[VERT_ATTRIB_MAX + 1]; nr_attributes = 0; for (int i = 0; i < VERT_ATTRIB_MAX; i++) { @@ -45,6 +45,15 @@ vec4_visitor::setup_attributes(int payload_reg) } } + /* VertexID is stored by the VF as the last vertex element, but we + * don't represent it with a flag in inputs_read, so we call it + * VERT_ATTRIB_MAX. + */ + if (prog_data->uses_vertexid) { + attribute_map[VERT_ATTRIB_MAX] = payload_reg + nr_attributes; + nr_attributes++; + } + foreach_list(node, &this->instructions) { vec4_instruction *inst = (vec4_instruction *)node; |