mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 19:20:12 +01:00
linker: Fix consumer_inputs_with_locations indexing
In an earlier incarnation of populate_consumer_input_sets and get_matching_input, the consumer_inputs_with_locations array was indexed using the user-specified location. In that version, only user-defined varyings were included in the array. In the current incarnation, the Mesa location is used to index the array, and built-in varyings are included. This change fixes the unit test to exepect gl_ClipDistance in the array, and it resizes the arrays to actually be big enough. It's just dumb luck that the existing piglit tests use small enough locations to not stomp the stack. :( Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=78258 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Cc: "10.2" <mesa-stable@lists.freedesktop.org> Cc: Vinson Lee <vlee@freedesktop.org>
This commit is contained in:
parent
98934f4aba
commit
f7bf37cb13
2 changed files with 9 additions and 10 deletions
|
|
@ -1092,11 +1092,11 @@ bool
|
|||
populate_consumer_input_sets(void *mem_ctx, exec_list *ir,
|
||||
hash_table *consumer_inputs,
|
||||
hash_table *consumer_interface_inputs,
|
||||
ir_variable *consumer_inputs_with_locations[MAX_VARYING])
|
||||
ir_variable *consumer_inputs_with_locations[VARYING_SLOT_MAX])
|
||||
{
|
||||
memset(consumer_inputs_with_locations,
|
||||
0,
|
||||
sizeof(consumer_inputs_with_locations[0]) * MAX_VARYING);
|
||||
sizeof(consumer_inputs_with_locations[0]) * VARYING_SLOT_MAX);
|
||||
|
||||
foreach_list(node, ir) {
|
||||
ir_variable *const input_var = ((ir_instruction *) node)->as_variable();
|
||||
|
|
@ -1152,7 +1152,7 @@ get_matching_input(void *mem_ctx,
|
|||
const ir_variable *output_var,
|
||||
hash_table *consumer_inputs,
|
||||
hash_table *consumer_interface_inputs,
|
||||
ir_variable *consumer_inputs_with_locations[MAX_VARYING])
|
||||
ir_variable *consumer_inputs_with_locations[VARYING_SLOT_MAX])
|
||||
{
|
||||
ir_variable *input_var;
|
||||
|
||||
|
|
@ -1277,7 +1277,7 @@ assign_varying_locations(struct gl_context *ctx,
|
|||
= hash_table_ctor(0, hash_table_string_hash, hash_table_string_compare);
|
||||
hash_table *consumer_interface_inputs
|
||||
= hash_table_ctor(0, hash_table_string_hash, hash_table_string_compare);
|
||||
ir_variable *consumer_inputs_with_locations[MAX_VARYING] = {
|
||||
ir_variable *consumer_inputs_with_locations[VARYING_SLOT_MAX] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -39,14 +39,14 @@ bool
|
|||
populate_consumer_input_sets(void *mem_ctx, exec_list *ir,
|
||||
hash_table *consumer_inputs,
|
||||
hash_table *consumer_interface_inputs,
|
||||
ir_variable *consumer_inputs_with_locations[MAX_VARYING]);
|
||||
ir_variable *consumer_inputs_with_locations[VARYING_SLOT_MAX]);
|
||||
|
||||
ir_variable *
|
||||
get_matching_input(void *mem_ctx,
|
||||
const ir_variable *output_var,
|
||||
hash_table *consumer_inputs,
|
||||
hash_table *consumer_interface_inputs,
|
||||
ir_variable *consumer_inputs_with_locations[MAX_VARYING]);
|
||||
ir_variable *consumer_inputs_with_locations[VARYING_SLOT_MAX]);
|
||||
}
|
||||
|
||||
class link_varyings : public ::testing::Test {
|
||||
|
|
@ -70,7 +70,7 @@ public:
|
|||
hash_table *consumer_interface_inputs;
|
||||
|
||||
const glsl_type *simple_interface;
|
||||
ir_variable *junk[MAX_VARYING];
|
||||
ir_variable *junk[VARYING_SLOT_MAX];
|
||||
};
|
||||
|
||||
link_varyings::link_varyings()
|
||||
|
|
@ -197,9 +197,8 @@ TEST_F(link_varyings, gl_ClipDistance)
|
|||
consumer_interface_inputs,
|
||||
junk));
|
||||
|
||||
EXPECT_EQ((void *) clipdistance,
|
||||
hash_table_find(consumer_inputs, "gl_ClipDistance"));
|
||||
EXPECT_EQ(1u, num_elements(consumer_inputs));
|
||||
EXPECT_EQ(clipdistance, junk[VARYING_SLOT_CLIP_DIST0]);
|
||||
EXPECT_TRUE(is_empty(consumer_inputs));
|
||||
EXPECT_TRUE(is_empty(consumer_interface_inputs));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue