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
* (such as texcoords for AA lines). The driver can call this function
* to find those attributes.
* Ask the draw module for the location/slot of the given vertex attribute in
* a post-transformed vertex.
*
* 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
draw_find_vs_output(struct draw_context *draw,
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.
* For example, simulated gl_FragCoord and gl_PointCoord.
*/