glsl: include per-patch varyings when generating reserved slot bitfield
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
00441829e7
commit
1d752823af
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue