glsl/lower_clip_distance: Update symbol table.
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>
This commit is contained in:
parent
d249159fe6
commit
18392443d4
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue