summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/llvmpipe/lp_state_derived.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state_derived.c b/src/gallium/drivers/llvmpipe/lp_state_derived.c
index 5a51b50821e..8aee92b1b96 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_derived.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_derived.c
@@ -69,8 +69,8 @@ compute_vertex_info(struct llvmpipe_context *llvmpipe)
vinfo->num_attribs = 0;
vs_index = draw_find_shader_output(llvmpipe->draw,
- TGSI_SEMANTIC_POSITION,
- 0);
+ TGSI_SEMANTIC_POSITION,
+ 0);
draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, vs_index);
@@ -89,12 +89,18 @@ compute_vertex_info(struct llvmpipe_context *llvmpipe)
llvmpipe->color_slot[idx] = (int)vinfo->num_attribs;
}
- /*
- * Emit the requested fs attribute for all but position.
- */
- draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, vs_index);
+ if (lpfs->info.base.input_semantic_name[i] == TGSI_SEMANTIC_FACE) {
+ llvmpipe->face_slot = vinfo->num_attribs;
+ draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_CONSTANT, vs_index);
+ } else if (lpfs->info.base.input_semantic_name[i] == TGSI_SEMANTIC_PRIMID) {
+ draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_CONSTANT, vs_index);
+ } else {
+ /*
+ * Emit the requested fs attribute for all but position.
+ */
+ draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, vs_index);
+ }
}
-
/* Figure out if we need bcolor as well.
*/
for (i = 0; i < 2; i++) {
@@ -140,14 +146,6 @@ compute_vertex_info(struct llvmpipe_context *llvmpipe)
llvmpipe->layer_slot = 0;
}
- /* Check for a fake front face for unfilled primitives*/
- vs_index = draw_find_shader_output(llvmpipe->draw,
- TGSI_SEMANTIC_FACE, 0);
- if (vs_index >= 0) {
- llvmpipe->face_slot = vinfo->num_attribs;
- draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_CONSTANT, vs_index);
- }
-
draw_compute_vertex_size(vinfo);
lp_setup_set_vertex_info(llvmpipe->setup, vinfo);
}