gallium: modify draw_find_vs_output() to search vertex shader outputs

This simplifies drivers using the draw module and removes the last dependency
on vertex-shader "internals".  Since the draw module is producing the
post-transformed vertices, it makes sense to ask it where specific vertex
attributes are located.

This could also simplify some things in the state tracker code for selection,
feedback, rasterpos...
This commit is contained in:
Brian 2008-02-25 14:46:42 -07:00
parent ea02342c11
commit d6c7f7e314
1 changed files with 21 additions and 3 deletions

View File

@ -244,14 +244,32 @@ draw_convert_wide_lines(struct draw_context *draw, boolean enable)
/** /**
* The draw module may sometimes generate vertices with extra attributes * Ask the draw module for the location/slot of the given vertex attribute in
* (such as texcoords for AA lines). The driver can call this function * a post-transformed vertex.
* to find those attributes. *
* With this function, drivers that use the draw module should have no reason
* to track the current vertex shader.
*
* Note that the draw module may sometimes generate vertices with extra
* attributes (such as texcoords for AA lines). The driver can call this
* function to find those attributes.
*
* Zero is returned if the attribute is not found since this is
* a don't care / undefined situtation. Returning -1 would be a bit more
* work for the drivers.
*/ */
int int
draw_find_vs_output(struct draw_context *draw, draw_find_vs_output(struct draw_context *draw,
uint semantic_name, uint semantic_index) uint semantic_name, uint semantic_index)
{ {
const struct pipe_shader_state *vs = &draw->vertex_shader->state;
uint i;
for (i = 0; i < vs->num_outputs; i++) {
if (vs->output_semantic_name[i] == semantic_name &&
vs->output_semantic_index[i] == semantic_index)
return i;
}
/* XXX there may be more than one extra vertex attrib. /* XXX there may be more than one extra vertex attrib.
* For example, simulated gl_FragCoord and gl_PointCoord. * For example, simulated gl_FragCoord and gl_PointCoord.
*/ */