Commit 15c69021 authored by Kenneth Graunke's avatar Kenneth Graunke
Browse files

nir: Avoid splitting compact arrays into per-element variables.

Compact arrays are used for special variables like clip and cull
distances, or tessellation levels.  Drivers using compact arrays
assume that these values will always be actual arrays.  We don't
want to turn a float[1] gl_CullDistance into a single float; that
would confuse drivers.

Today, i965 uses compact arrays, and Gallium drivers use
nir_lower_io_arrays_to_elements, so we haven't had any overlap
that would demonstrate the issue.  Iris will use both.
Reviewed-by: Timothy Arceri's avatarTimothy Arceri <>
parent ba9dcc80
......@@ -291,6 +291,10 @@ lower_io_arrays_to_elements(nir_shader *shader, nir_variable_mode mask,
nir_variable *var = nir_deref_instr_get_variable(deref);
/* Drivers assume compact arrays are, in fact, arrays. */
if (var->data.compact)
/* Skip indirects */
uint64_t loc_mask = ((uint64_t)1) << var->data.location;
if (var->data.patch) {
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment