glsl: break the gl_FragData array into separate gl_FragData[i] variables
authorMarek Olšák <marek.olsak@amd.com>
Sun, 20 Oct 2013 03:15:42 +0000 (05:15 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 29 Oct 2013 22:50:01 +0000 (23:50 +0100)
commit7e414b58640aee6e243d337e72cea290c354f632
tree6dbe1470a26f48f9ad00ec216ee80697a90958a3
parentaec20d66d9d13e0acd6a7199b63e1383e1e9900a
glsl: break the gl_FragData array into separate gl_FragData[i] variables

This avoids a defect in lower_output_reads.

The problem is lower_output_reads treats the gl_FragData array as a single
variable. It first redirects all output writes to a temporary variable (array)
and then writes the whole temporary variable to the output, generating
assignments to all elements of gl_FragData.

BTW this pass can be modified to lower all arrays, not just inputs and outputs.
The question is whether it is worth it.

Reviewed-by: Paul Berry <stereotype441@gmail.com>
v2: addressed Paul Berry's comments
src/glsl/opt_dead_builtin_varyings.cpp