From: Timothy Arceri Date: Sat, 27 Feb 2016 01:16:34 +0000 (+1100) Subject: glsl: include per-patch varyings when generating reserved slot bitfield X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1d752823afd53f3c8de8175aa9f40f130d15335f;p=mesa.git glsl: include per-patch varyings when generating reserved slot bitfield Reviewed-by: Dave Airlie --- diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index 5a99f0c9371..506b221f514 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -1894,13 +1894,16 @@ canonicalize_shader_io(exec_list *ir, enum ir_variable_mode io_mode) /** * Generate a bitfield map of the explicit locations for shader varyings. * - * In theory a 32 bits value will be enough but a 64 bits value is future proof. + * Note: For Tessellation shaders we are sitting right on the limits of the + * 64 bit map. Per-vertex and per-patch both have separate location domains + * with a max of MAX_VARYING. */ uint64_t reserved_varying_slot(struct gl_shader *stage, ir_variable_mode io_mode) { assert(io_mode == ir_var_shader_in || io_mode == ir_var_shader_out); - assert(MAX_VARYING <= 64); /* avoid an overflow of the returned value */ + /* Avoid an overflow of the returned value */ + assert(MAX_VARYINGS_INCL_PATCH <= 64); uint64_t slots = 0; int var_slot; @@ -1921,7 +1924,7 @@ reserved_varying_slot(struct gl_shader *stage, ir_variable_mode io_mode) unsigned num_elements = get_varying_type(var, stage->Stage) ->count_attribute_slots(stage->Stage == MESA_SHADER_VERTEX); for (unsigned i = 0; i < num_elements; i++) { - if (var_slot >= 0 && var_slot < MAX_VARYING) + if (var_slot >= 0 && var_slot < MAX_VARYINGS_INCL_PATCH) slots |= UINT64_C(1) << var_slot; var_slot += 1; }