summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2013-08-02 01:53:15 -0400
committerZack Rusin <[email protected]>2013-08-02 20:12:53 -0400
commitbff0d87668538196a2d3ef1400382e4deb0e0435 (patch)
treea140bc8ca4ba8256da1927b8a6766a1457827038
parent8e77e5e543e917dcd172fcb0390f885ffa6fbc2a (diff)
llvmpipe: don't interpolate front face or prim id
The loop was iterating over all the fs inputs and setting them to perspective interpolation, then after the loop we were creating extra output slots with the correct interpolation. Instead of injecting bogus extra outputs, just set the interpolation on front face and prim id correctly when doing the initial scan of fs inputs. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]> Reviewed-by: Jose Fonseca <[email protected]> Reviewed-by: Brian Paul <[email protected]>
-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);
}