On 08/02/2013 12:28 AM, Zack Rusin wrote:
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 <za...@vmware.com>
---
  src/gallium/drivers/llvmpipe/lp_state_derived.c |   30 +++++++++++------------
  1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_state_derived.c 
b/src/gallium/drivers/llvmpipe/lp_state_derived.c
index 5a51b50..7b1e6f6 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,20 @@ 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_index[i] == 0 &&
+          lpfs->info.base.input_semantic_name[i] == TGSI_SEMANTIC_FACE) {

Do we really need to check if semantic_index == 0? I think if the semantic_name == FACE, the index doesn't matter.


+         llvmpipe->face_slot = vinfo->num_attribs;
+         draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_CONSTANT, vs_index);
+      } else if (lpfs->info.base.input_semantic_index[i] == 0 &&
+                 lpfs->info.base.input_semantic_name[i] == 
TGSI_SEMANTIC_PRIMID) {

Same thing here.


+         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 +148,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);
  }


Reviewed-by: Brian Paul <bri...@vmware.com>

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to