On 08/19/2011 05:56 PM, Eric Anholt wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_context.c        |    6 +++++
>  src/mesa/drivers/dri/i965/brw_context.h        |    2 -
>  src/mesa/drivers/dri/i965/brw_curbe.c          |    3 +-
>  src/mesa/drivers/dri/i965/brw_vec4_emit.cpp    |    1 -
>  src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp |   29 ++++-------------------
>  src/mesa/drivers/dri/i965/gen6_vs_state.c      |    3 +-
>  6 files changed, 13 insertions(+), 31 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_context.c 
> b/src/mesa/drivers/dri/i965/brw_context.c
> index 8c73408..67d3c54 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.c
> +++ b/src/mesa/drivers/dri/i965/brw_context.c
> @@ -250,6 +250,12 @@ GLboolean brwCreateContext( int api,
>  
>     brw->new_vs_backend = (getenv("INTEL_NEW_VS") != NULL);
>  
> +   /* If we're using the new shader backend, we require integer uniforms
> +    * stored as actual integers.
> +    */
> +   if (brw->new_vs_backend)
> +      ctx->Const.NativeIntegers = true;
> +
>     return GL_TRUE;
>  }

This hunk above looks good.  But the rest of the changes
below---removing convert_param---sure look like they're going to break
non-float uniforms when using the old VS.  Presumably you didn't mean to
include that...

> diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
> b/src/mesa/drivers/dri/i965/brw_context.h
> index e936a88..21068d9 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -321,9 +321,7 @@ struct brw_vs_prog_data {
>     GLuint urb_entry_size;
>  
>     const float *param[MAX_UNIFORMS * 4]; /* should be: BRW_MAX_CURBE */
> -   enum param_conversion param_convert[MAX_UNIFORMS * 4];
>     const float *pull_param[MAX_UNIFORMS * 4];
> -   enum param_conversion pull_param_convert[MAX_UNIFORMS * 4];
>  
>     bool uses_new_param_layout;
>  };
> diff --git a/src/mesa/drivers/dri/i965/brw_curbe.c 
> b/src/mesa/drivers/dri/i965/brw_curbe.c
> index 960be10..b9a4beb 100644
> --- a/src/mesa/drivers/dri/i965/brw_curbe.c
> +++ b/src/mesa/drivers/dri/i965/brw_curbe.c
> @@ -246,8 +246,7 @@ static void prepare_constant_buffer(struct brw_context 
> *brw)
>  
>        if (brw->vs.prog_data->uses_new_param_layout) {
>        for (i = 0; i < brw->vs.prog_data->nr_params; i++) {
> -         buf[offset + i] = convert_param(brw->vs.prog_data->param_convert[i],
> -                                         brw->vs.prog_data->param[i]);
> +         buf[offset + i] = *brw->vs.prog_data->param[i];
>        }
>        } else {
>        /* Load the subset of push constants that will get used when
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp 
> b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp
> index 65ac7d9..794f499 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp
> @@ -120,7 +120,6 @@ vec4_visitor::setup_uniforms(int reg)
>        unsigned int slot = this->uniforms * 4 + i;
>  
>        c->prog_data.param[slot] = NULL;
> -      c->prog_data.param_convert[slot] = PARAM_CONVERT_ZERO;
>        }
>  
>        this->uniforms++;
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp 
> b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index b3a07bd..46f826c 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -362,32 +362,14 @@ vec4_visitor::setup_uniform_values(int loc, const 
> glsl_type *type)
>     case GLSL_TYPE_INT:
>     case GLSL_TYPE_BOOL:
>        for (unsigned int i = 0; i < type->vector_elements; i++) {
> -      int slot = this->uniforms * 4 + i;
> -      switch (type->base_type) {
> -      case GLSL_TYPE_FLOAT:
> -         c->prog_data.param_convert[slot] = PARAM_NO_CONVERT;
> -         break;
> -      case GLSL_TYPE_UINT:
> -         c->prog_data.param_convert[slot] = PARAM_CONVERT_F2U;
> -         break;
> -      case GLSL_TYPE_INT:
> -         c->prog_data.param_convert[slot] = PARAM_CONVERT_F2I;
> -         break;
> -      case GLSL_TYPE_BOOL:
> -         c->prog_data.param_convert[slot] = PARAM_CONVERT_F2B;
> -         break;
> -      default:
> -         assert(!"not reached");
> -         c->prog_data.param_convert[slot] = PARAM_NO_CONVERT;
> -         break;
> -      }
> -      c->prog_data.param[slot] = &values[i];
> +      c->prog_data.param[this->uniforms * 4 + i] = &values[i];
>        }
>  
> +      /* Set up pad elements to get things aligned to a vec4 boundary. */
>        for (unsigned int i = type->vector_elements; i < 4; i++) {
> -      c->prog_data.param_convert[this->uniforms * 4 + i] =
> -         PARAM_CONVERT_ZERO;
> -      c->prog_data.param[this->uniforms * 4 + i] = NULL;
> +      static float zero = 0;
> +
> +      c->prog_data.param[this->uniforms * 4 + i] = &zero;
>        }
>  
>        this->uniform_size[this->uniforms] = type->vector_elements;
> @@ -448,7 +430,6 @@ vec4_visitor::setup_builtin_uniform_values(ir_variable 
> *ir)
>        last_swiz = swiz;
>  
>        c->prog_data.param[this->uniforms * 4 + j] = &values[swiz];
> -      c->prog_data.param_convert[this->uniforms * 4 + j] = PARAM_NO_CONVERT;
>        if (swiz <= last_swiz)
>           this->uniform_size[this->uniforms]++;
>        }
> diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c 
> b/src/mesa/drivers/dri/i965/gen6_vs_state.c
> index b94121e..f1123af 100644
> --- a/src/mesa/drivers/dri/i965/gen6_vs_state.c
> +++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c
> @@ -83,8 +83,7 @@ gen6_prepare_vs_push_constants(struct brw_context *brw)
>  
>        if (brw->vs.prog_data->uses_new_param_layout) {
>        for (i = 0; i < brw->vs.prog_data->nr_params; i++) {
> -         *param = convert_param(brw->vs.prog_data->param_convert[i],
> -                                brw->vs.prog_data->param[i]);
> +         *param = *brw->vs.prog_data->param[i];
>           param++;
>        }
>        params_uploaded += brw->vs.prog_data->nr_params / 4;
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to