[Mesa-dev] [PATCH 6/9] i965/fs: Refactor fs_visitor::nir_setup_inputs().

Pohjolainen, Topi topi.pohjolainen at intel.com
Wed Mar 11 01:49:31 PDT 2015


On Mon, Mar 09, 2015 at 01:58:56AM -0700, Kenneth Graunke wrote:
> No functional change.  In preparation for supporting vertex shaders,
> this adds a switch statement on shader stage (since vertex attributes
> and fragment shader varyings will need different handling).  It also
> renames "varying" to "input", to be more general.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

> ---
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 29 +++++++++++++++++++----------
>  1 file changed, 19 insertions(+), 10 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index d700523..3baafc4 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -199,18 +199,27 @@ fs_visitor::nir_setup_inputs(nir_shader *shader)
>     struct hash_entry *entry;
>     hash_table_foreach(shader->inputs, entry) {
>        nir_variable *var = (nir_variable *) entry->data;
> -      fs_reg varying = offset(nir_inputs, var->data.driver_location);
> +      fs_reg input = offset(nir_inputs, var->data.driver_location);
>  
>        fs_reg reg;
> -      if (var->data.location == VARYING_SLOT_POS) {
> -         reg = *emit_fragcoord_interpolation(var->data.pixel_center_integer,
> -                                             var->data.origin_upper_left);
> -         emit_percomp(MOV(varying, reg), 0xF);
> -      } else {
> -         emit_general_interpolation(varying, var->name, var->type,
> -                                    (glsl_interp_qualifier) var->data.interpolation,
> -                                    var->data.location, var->data.centroid,
> -                                    var->data.sample);
> +      switch (stage) {
> +      case MESA_SHADER_VERTEX:
> +      case MESA_SHADER_GEOMETRY:
> +      case MESA_SHADER_COMPUTE:
> +         unreachable("fs_visitor not used for these stages yet.");
> +         break;
> +      case MESA_SHADER_FRAGMENT:
> +         if (var->data.location == VARYING_SLOT_POS) {
> +            reg = *emit_fragcoord_interpolation(var->data.pixel_center_integer,
> +                                                var->data.origin_upper_left);
> +            emit_percomp(MOV(input, reg), 0xF);
> +         } else {
> +            emit_general_interpolation(input, var->name, var->type,
> +                                       (glsl_interp_qualifier) var->data.interpolation,
> +                                       var->data.location, var->data.centroid,
> +                                       var->data.sample);
> +         }
> +         break;
>        }
>     }
>  }
> -- 
> 2.2.1
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list