diff options
author | Bryan Cain <[email protected]> | 2013-02-15 10:09:12 -0600 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2013-03-05 20:13:08 -0800 |
commit | 8c74380b2dd99c38fe813516d5d5aa023f92384d (patch) | |
tree | 5081752fd4f7287b328a5cc9967ae9595471c858 | |
parent | 30f246bf2c492b7809c0a556c89a9feb13c4c13e (diff) |
draw: use geometry shader info in clip_init_state if appropriate
Reviewed-by: Zack Rusin <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
Reviewed-by: José Fonseca <[email protected]>
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pipe_clip.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c index 3110809ce0e..eeaaf41f719 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_clip.c +++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c @@ -40,6 +40,7 @@ #include "draw_vs.h" #include "draw_pipe.h" #include "draw_fs.h" +#include "draw_gs.h" /** Set to 1 to enable printing of coords before/after clipping */ @@ -596,8 +597,10 @@ clip_init_state( struct draw_stage *stage ) { struct clip_stage *clipper = clip_stage( stage ); const struct draw_vertex_shader *vs = stage->draw->vs.vertex_shader; + const struct draw_geometry_shader *gs = stage->draw->gs.geometry_shader; const struct draw_fragment_shader *fs = stage->draw->fs.fragment_shader; uint i; + struct tgsi_shader_info *vs_info = gs ? &gs->info : &vs->info; /* We need to know for each attribute what kind of interpolation is * done on it (flat, smooth or noperspective). But the information @@ -640,16 +643,16 @@ clip_init_state( struct draw_stage *stage ) clipper->num_flat_attribs = 0; memset(clipper->noperspective_attribs, 0, sizeof(clipper->noperspective_attribs)); - for (i = 0; i < vs->info.num_outputs; i++) { + for (i = 0; i < vs_info->num_outputs; i++) { /* Find the interpolation mode for a specific attribute */ int interp; /* If it's gl_{Front,Back}{,Secondary}Color, pick up the mode * from the array we've filled before. */ - if (vs->info.output_semantic_name[i] == TGSI_SEMANTIC_COLOR || - vs->info.output_semantic_name[i] == TGSI_SEMANTIC_BCOLOR) { - interp = indexed_interp[vs->info.output_semantic_index[i]]; + if (vs_info->output_semantic_name[i] == TGSI_SEMANTIC_COLOR || + vs_info->output_semantic_name[i] == TGSI_SEMANTIC_BCOLOR) { + interp = indexed_interp[vs_info->output_semantic_index[i]]; } else { /* Otherwise, search in the FS inputs, with a decent default * if we don't find it. @@ -658,8 +661,8 @@ clip_init_state( struct draw_stage *stage ) interp = TGSI_INTERPOLATE_PERSPECTIVE; if (fs) { for (j = 0; j < fs->info.num_inputs; j++) { - if (vs->info.output_semantic_name[i] == fs->info.input_semantic_name[j] && - vs->info.output_semantic_index[i] == fs->info.input_semantic_index[j]) { + if (vs_info->output_semantic_name[i] == fs->info.input_semantic_name[j] && + vs_info->output_semantic_index[i] == fs->info.input_semantic_index[j]) { interp = fs->info.input_interpolate[j]; break; } |