glsl/lower_clip_distance: Update symbol table.
authorPaul Berry <stereotype441@gmail.com>
Tue, 4 Dec 2012 19:11:02 +0000 (11:11 -0800)
committerPaul Berry <stereotype441@gmail.com>
Fri, 14 Dec 2012 18:48:28 +0000 (10:48 -0800)
This patch modifies the clip distance lowering pass so that the new
symbol it generates (glClipDistanceMESA) is added to the shader's
symbol table.

This will allow a later patch to modify the linker so that it finds
transform feedback varyings using the symbol table rather than having
to iterate through all the declarations in the shader.

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/ir_optimization.h
src/glsl/linker.cpp
src/glsl/lower_clip_distance.cpp

index 2220d511e96cb5123f89ae5ad13eaa329b40ab4c..628096e7cd25f06f796397aeb5e0ef739c7a3d3c 100644 (file)
@@ -72,7 +72,7 @@ bool lower_noise(exec_list *instructions);
 bool lower_variable_index_to_cond_assign(exec_list *instructions,
     bool lower_input, bool lower_output, bool lower_temp, bool lower_uniform);
 bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
-bool lower_clip_distance(exec_list *instructions);
+bool lower_clip_distance(gl_shader *shader);
 void lower_output_reads(exec_list *instructions);
 void lower_ubo_reference(struct gl_shader *shader, exec_list *instructions);
 bool optimize_redundant_jumps(exec_list *instructions);
index 29fc5d841b948c80027438ef08fa0bf65690892e..802323e32f013bd6ecaf57c6b84a7bd7359d99a1 100644 (file)
@@ -2568,8 +2568,9 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
       if (!prog->LinkStatus)
         goto done;
 
-      if (ctx->ShaderCompilerOptions[i].LowerClipDistance)
-         lower_clip_distance(prog->_LinkedShaders[i]->ir);
+      if (ctx->ShaderCompilerOptions[i].LowerClipDistance) {
+         lower_clip_distance(prog->_LinkedShaders[i]);
+      }
 
       unsigned max_unroll = ctx->ShaderCompilerOptions[i].MaxUnrollIterations;
 
index 0316914714f2939f5b5522775bcd3bc6bac960d6..09bdc36e169c6afc949c2f6d39061886b78e3a61 100644 (file)
@@ -45,6 +45,7 @@
  * LowerClipDistance flag in gl_shader_compiler_options to true.
  */
 
+#include "glsl_symbol_table.h"
 #include "ir_hierarchical_visitor.h"
 #include "ir.h"
 
@@ -334,11 +335,14 @@ lower_clip_distance_visitor::visit_leave(ir_call *ir)
 
 
 bool
-lower_clip_distance(exec_list *instructions)
+lower_clip_distance(gl_shader *shader)
 {
    lower_clip_distance_visitor v;
 
-   visit_list_elements(&v, instructions);
+   visit_list_elements(&v, shader->ir);
+
+   if (v.new_clip_distance_var)
+      shader->symbols->add_variable(v.new_clip_distance_var);
 
    return v.progress;
 }