gallium: added draw_num_vs_outputs() to query number of post-transform vertex attribs

This commit is contained in:
Brian 2008-02-27 18:46:54 -07:00
parent 627efcaa80
commit 1774b177b8
3 changed files with 19 additions and 2 deletions

View file

@ -281,6 +281,19 @@ draw_find_vs_output(struct draw_context *draw,
}
/**
* Return number of vertex shader outputs.
*/
uint
draw_num_vs_outputs(struct draw_context *draw)
{
uint count = draw->vertex_shader->info.num_outputs;
if (draw->extra_vp_outputs.slot >= 0)
count++;
return count;
}
/**
* Allocate space for temporary post-transform vertices, such as for clipping.
*/

View file

@ -112,6 +112,10 @@ int
draw_find_vs_output(struct draw_context *draw,
uint semantic_name, uint semantic_index);
uint
draw_num_vs_outputs(struct draw_context *draw);
/*
* Vertex shader functions

View file

@ -61,7 +61,6 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe)
if (vinfo->num_attribs == 0) {
/* compute vertex layout now */
const struct pipe_shader_state *vs = &softpipe->vs->shader;
const struct sp_fragment_shader *spfs = softpipe->fs;
const enum interp_mode colorInterp
= softpipe->rasterizer->flatshade ? INTERP_CONSTANT : INTERP_LINEAR;
@ -74,7 +73,8 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe)
struct vertex_info *vinfo_vbuf = &softpipe->vertex_info_vbuf;
vinfo_vbuf->num_attribs = 0;
draw_emit_vertex_attr(vinfo_vbuf, EMIT_ALL, INTERP_NONE, 0);
vinfo_vbuf->size = 4 * vs->num_outputs
/* size in dwords or floats */
vinfo_vbuf->size = 4 * draw_num_vs_outputs(softpipe->draw)
+ sizeof(struct vertex_header) / 4;
}