summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/ir_optimization.h
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-05-16 08:47:32 +1000
committerDave Airlie <airlied@redhat.com>2016-05-24 11:27:29 +1000
commita08c4ebbe841e22076c6d3929248876c60b3dfcd (patch)
treec358f0975adf886d53f0963fc07703863cf03bec /src/compiler/glsl/ir_optimization.h
parent8c628ab13e4fa86ee662dcddb0f5a89b2d30e1a4 (diff)
downloadexternal_mesa3d-a08c4ebbe841e22076c6d3929248876c60b3dfcd.zip
external_mesa3d-a08c4ebbe841e22076c6d3929248876c60b3dfcd.tar.gz
external_mesa3d-a08c4ebbe841e22076c6d3929248876c60b3dfcd.tar.bz2
glsl: rewrite clip/cull distance lowering pass
The last version of this broke clipping, and I had to spend sometime getting this working properly. I had to introduce a third pass to count the clip/cull totals, all due to one messy corner case. We have a piglit test tes-input-gl_ClipDistance.shader_test that doesn't actually output the clip distances, it just passes them like a varying from TCS->TES, the older lowering pass worked but to lower clip/cull we need to know the total number of clip+culls used to defined the new variable correctly, and to offset culls properly. This adds an extra pass that works out the sizes for clip/cull, then lowers gl_ClipDistance then gl_CullDistance into the new gl_ClipDistanceMESA. The pass checks using the fixed array sizes code if they array has been referenced, or is actually never used, and ignores it in the latter case. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'src/compiler/glsl/ir_optimization.h')
-rw-r--r--src/compiler/glsl/ir_optimization.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h
index 5fc2740..71b10e4 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -119,7 +119,7 @@ bool lower_variable_index_to_cond_assign(gl_shader_stage stage,
bool lower_temp, bool lower_uniform);
bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
bool lower_const_arrays_to_uniforms(exec_list *instructions);
-bool lower_clip_distance(gl_shader *shader);
+bool lower_clip_cull_distance(struct gl_shader_program *prog, gl_shader *shader);
void lower_output_reads(unsigned stage, exec_list *instructions);
bool lower_packing_builtins(exec_list *instructions, int op_mask);
void lower_shared_reference(struct gl_shader *shader, unsigned *shared_size);