OSDN Git Service

glsl: fix counting of vertex shader output slots used by explicit vars
authorIlia Mirkin <imirkin@alum.mit.edu>
Sun, 27 Aug 2017 04:09:31 +0000 (00:09 -0400)
committerAndres Gomez <agomez@igalia.com>
Wed, 6 Sep 2017 15:05:09 +0000 (18:05 +0300)
The argument to count_attribute_slots should only be set to true for
vertex inputs, not for all vertex shader varyings.

Fixes KHR-GL45.enhanced_layouts.varying_locations

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Cc: mesa-stable@lists.freedesktop.org
(cherry picked from commit eefeff09a784eb139cbf682b98926c0eaa00eb21)

src/compiler/glsl/link_varyings.cpp

index f0df3d6..883918c 100644 (file)
@@ -2017,7 +2017,8 @@ reserved_varying_slot(struct gl_linked_shader *stage,
       var_slot = var->data.location - VARYING_SLOT_VAR0;
 
       unsigned num_elements = get_varying_type(var, stage->Stage)
-         ->count_attribute_slots(stage->Stage == MESA_SHADER_VERTEX);
+         ->count_attribute_slots(io_mode == ir_var_shader_in &&
+                                 stage->Stage == MESA_SHADER_VERTEX);
       for (unsigned i = 0; i < num_elements; i++) {
          if (var_slot >= 0 && var_slot < MAX_VARYINGS_INCL_PATCH)
             slots |= UINT64_C(1) << var_slot;