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

Reviewed-by: Ian Romanick <ian.d.roman...@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);


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

Reply via email to