Browse files

draw: use geometry shader info in clip_init_state if appropriate

  • Loading branch information...
1 parent 5a1fe28 commit 6503ea76e96c1c1ed17dccd6f4cd63e641cb090f @Plombo committed Aug 16, 2012
Showing with 9 additions and 6 deletions.
  1. +9 −6 src/gallium/auxiliary/draw/draw_pipe_clip.c
View
15 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"
#ifndef IS_NEGATIVE
@@ -572,8 +573,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
@@ -616,16 +619,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.
@@ -634,8 +637,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;
}

0 comments on commit 6503ea7

Please sign in to comment.