[Mesa-dev] [PATCH 7/8] llvmpipe: don't interpolate front face or prim id

Brian Paul brianp at vmware.com
Fri Aug 2 07:30:32 PDT 2013


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 <zackr at 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 <brianp at vmware.com>



More information about the mesa-dev mailing list