diff options
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_derived.c | 28 |
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); } |