glsl: Implement a lowering pass for gl_ClipDistance.
authorPaul Berry <stereotype441@gmail.com>
Fri, 12 Aug 2011 03:58:21 +0000 (20:58 -0700)
committerPaul Berry <stereotype441@gmail.com>
Fri, 23 Sep 2011 20:28:43 +0000 (13:28 -0700)
commitc06e32596735074536b0e613cbddb1c5fd7b367a
treee062d9b19ebbab5dd27926260f67afb4bcb27390
parentcc81eb09b928389f926b3512c18b3298777d2928
glsl: Implement a lowering pass for gl_ClipDistance.

In i965 GEN6+ (and I suspect most other hardware), gl_ClipDistance
needs to be laid out as a pair of vec4's (the first containing clip
distances 0-3, and the second containing clip distances 4-7).
However, it is declared in GLSL as an array of 8 floats.

This lowering pass acts at the GLSL level, modifying the declaration
of gl_ClipDistance so that it is an array of vec4's rather than an
array of floats, and renaming it to gl_ClipDistanceMESA.  In addition,
it modifies all accesses to the array so that they access the
appropiate component of one of the vec4's.

Since some hardware may not internally represent gl_ClipDistance as a
pair of vec4's, this lowering pass is optional.  To enable it, set the
LowerClipDistance flag in gl_shader_compiler_options to true.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/Makefile
src/glsl/SConscript
src/glsl/ir_optimization.h
src/glsl/linker.cpp
src/glsl/lower_clip_distance.cpp [new file with mode: 0644]
src/mesa/main/mtypes.h