[Mesa-dev] [PATCH 1/8] glsl: Change do_set_program_inouts' is_fragment_shader arg to shader_type.

Ian Romanick idr at freedesktop.org
Wed Jul 31 18:23:38 PDT 2013


Patches 1-7 (with some really minor comments) are

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

I need to finish cooking dinner, so I can't give patch 8 the attention 
that it deserves.

On 07/31/2013 02:17 PM, Paul Berry wrote:
> This will allow us to add geometry shader support without having to
> add another boolean argument.
> ---
>   src/glsl/ir.h                              |  2 +-
>   src/glsl/ir_set_program_inouts.cpp         | 24 ++++++++++++------------
>   src/mesa/drivers/dri/i965/brw_shader.cpp   |  3 +--
>   src/mesa/program/ir_to_mesa.cpp            |  2 +-
>   src/mesa/state_tracker/st_glsl_to_tgsi.cpp |  2 +-
>   5 files changed, 16 insertions(+), 17 deletions(-)
>
> diff --git a/src/glsl/ir.h b/src/glsl/ir.h
> index 7ac291c..f5b4468 100644
> --- a/src/glsl/ir.h
> +++ b/src/glsl/ir.h
> @@ -2061,7 +2061,7 @@ ir_has_call(ir_instruction *ir);
>
>   extern void
>   do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
> -                      bool is_fragment_shader);
> +                      GLenum shader_type);
>
>   extern char *
>   prototype_string(const glsl_type *return_type, const char *name,
> diff --git a/src/glsl/ir_set_program_inouts.cpp b/src/glsl/ir_set_program_inouts.cpp
> index 91a8b45..ef95cbe 100644
> --- a/src/glsl/ir_set_program_inouts.cpp
> +++ b/src/glsl/ir_set_program_inouts.cpp
> @@ -44,11 +44,10 @@
>
>   class ir_set_program_inouts_visitor : public ir_hierarchical_visitor {
>   public:
> -   ir_set_program_inouts_visitor(struct gl_program *prog,
> -                                 bool is_fragment_shader)
> +   ir_set_program_inouts_visitor(struct gl_program *prog, GLenum shader_type)
>      {
>         this->prog = prog;
> -      this->is_fragment_shader = is_fragment_shader;
> +      this->shader_type = shader_type;
>      }
>      ~ir_set_program_inouts_visitor()
>      {
> @@ -61,7 +60,7 @@ public:
>      virtual ir_visitor_status visit(ir_dereference_variable *);
>
>      struct gl_program *prog;
> -   bool is_fragment_shader;
> +   GLenum shader_type;
>   };
>
>   static inline bool
> @@ -114,10 +113,10 @@ ir_set_program_inouts_visitor::visit(ir_dereference_variable *ir)
>      if (ir->type->is_array()) {
>         mark(this->prog, ir->var, 0,
>   	   ir->type->length * ir->type->fields.array->matrix_columns,
> -           this->is_fragment_shader);
> +           this->shader_type == GL_FRAGMENT_SHADER);
>      } else {
>         mark(this->prog, ir->var, 0, ir->type->matrix_columns,
> -           this->is_fragment_shader);
> +           this->shader_type == GL_FRAGMENT_SHADER);
>      }
>
>      return visit_continue;
> @@ -144,7 +143,7 @@ ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir)
>         }
>
>         mark(this->prog, var, index->value.i[0] * width, width,
> -           this->is_fragment_shader);
> +           this->shader_type == GL_FRAGMENT_SHADER);
>         return visit_continue_with_parent;
>      }
>
> @@ -164,7 +163,8 @@ ir_set_program_inouts_visitor::visit_enter(ir_function_signature *ir)
>   ir_visitor_status
>   ir_set_program_inouts_visitor::visit_enter(ir_expression *ir)
>   {
> -   if (is_fragment_shader && ir->operation == ir_unop_dFdy) {
> +   if (this->shader_type == GL_FRAGMENT_SHADER &&
> +       ir->operation == ir_unop_dFdy) {
>         gl_fragment_program *fprog = (gl_fragment_program *) prog;
>         fprog->UsesDFdy = true;
>      }
> @@ -175,7 +175,7 @@ ir_visitor_status
>   ir_set_program_inouts_visitor::visit_enter(ir_discard *)
>   {
>      /* discards are only allowed in fragment shaders. */
> -   assert(is_fragment_shader);
> +   assert(this->shader_type == GL_FRAGMENT_SHADER);
>
>      gl_fragment_program *fprog = (gl_fragment_program *) prog;
>      fprog->UsesKill = true;
> @@ -185,14 +185,14 @@ ir_set_program_inouts_visitor::visit_enter(ir_discard *)
>
>   void
>   do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
> -                      bool is_fragment_shader)
> +                      GLenum shader_type)
>   {
> -   ir_set_program_inouts_visitor v(prog, is_fragment_shader);
> +   ir_set_program_inouts_visitor v(prog, shader_type);
>
>      prog->InputsRead = 0;
>      prog->OutputsWritten = 0;
>      prog->SystemValuesRead = 0;
> -   if (is_fragment_shader) {
> +   if (shader_type == GL_FRAGMENT_SHADER) {
>         gl_fragment_program *fprog = (gl_fragment_program *) prog;
>         memset(fprog->InterpQualifier, 0, sizeof(fprog->InterpQualifier));
>         fprog->IsCentroid = 0;
> diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp
> index 3322e80..418ea9b 100644
> --- a/src/mesa/drivers/dri/i965/brw_shader.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
> @@ -236,8 +236,7 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
>         reparent_ir(shader->ir, shader->ir);
>         ralloc_free(mem_ctx);
>
> -      do_set_program_inouts(shader->ir, prog,
> -			    shader->base.Type == GL_FRAGMENT_SHADER);
> +      do_set_program_inouts(shader->ir, prog, shader->base.Type);
>
>         prog->SamplersUsed = shader->base.active_samplers;
>         _mesa_update_shader_textures_used(shProg, prog);
> diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
> index f0fc1b9..14f43f6 100644
> --- a/src/mesa/program/ir_to_mesa.cpp
> +++ b/src/mesa/program/ir_to_mesa.cpp
> @@ -2961,7 +2961,7 @@ get_mesa_program(struct gl_context *ctx,
>       */
>      mesa_instructions = NULL;
>
> -   do_set_program_inouts(shader->ir, prog, shader->Type == GL_FRAGMENT_SHADER);
> +   do_set_program_inouts(shader->ir, prog, shader->Type);
>
>      prog->SamplersUsed = shader->active_samplers;
>      prog->ShadowSamplers = shader->shadow_samplers;
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index 3dfd5e5..69f860a 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -5121,7 +5121,7 @@ get_mesa_program(struct gl_context *ctx,
>      prog->Instructions = NULL;
>      prog->NumInstructions = 0;
>
> -   do_set_program_inouts(shader->ir, prog, shader->Type == GL_FRAGMENT_SHADER);
> +   do_set_program_inouts(shader->ir, prog, shader->Type);
>      count_resources(v, prog);
>
>      _mesa_reference_program(ctx, &shader->Program, prog);
>



More information about the mesa-dev mailing list