TEST_F(link_varyings, one_interface_and_one_simple_input) { ir_variable *const v = new(mem_ctx) ir_variable(glsl_type::vec(4), "a", ir_var_shader_in); ir.push_tail(v); ir_variable *const iface = new(mem_ctx) ir_variable(simple_interface->fields.structure[0].type, simple_interface->fields.structure[0].name, ir_var_shader_in); iface->init_interface_type(simple_interface); ir.push_tail(iface); ASSERT_TRUE(linker::populate_consumer_input_sets(mem_ctx, &ir, consumer_inputs, consumer_interface_inputs, junk)); char *const iface_field_name = interface_field_name(simple_interface); EXPECT_EQ((void *) iface, hash_table_find(consumer_interface_inputs, iface_field_name)); EXPECT_EQ(1u, num_elements(consumer_interface_inputs)); EXPECT_EQ((void *) v, hash_table_find(consumer_inputs, "a")); EXPECT_EQ(1u, num_elements(consumer_inputs)); }
TEST_F(link_varyings, single_interface_input) { ir_variable *const v = new(mem_ctx) ir_variable(simple_interface->fields.structure[0].type, simple_interface->fields.structure[0].name, ir_var_shader_in); v->init_interface_type(simple_interface); ir.push_tail(v); ASSERT_TRUE(linker::populate_consumer_input_sets(mem_ctx, &ir, consumer_inputs, consumer_interface_inputs, junk)); char *const full_name = interface_field_name(simple_interface); EXPECT_EQ((void *) v, hash_table_find(consumer_interface_inputs, full_name)); EXPECT_EQ(1u, num_elements(consumer_interface_inputs)); EXPECT_TRUE(is_empty(consumer_inputs)); }
TEST_F(link_varyings, interface_field_doesnt_match_noninterface_vice_versa) { char *const iface_field_name = interface_field_name(simple_interface); /* In input shader has a single variable, "v", that is part of an interface * block named "a". */ ir_variable *const in_v = new(mem_ctx) ir_variable(simple_interface->fields.structure[0].type, simple_interface->fields.structure[0].name, ir_var_shader_in); in_v->init_interface_type(simple_interface); ir.push_tail(in_v); linker::populate_consumer_input_sets(mem_ctx, &ir, consumer_inputs, consumer_interface_inputs, junk); /* Create an output variable "a.v". They should not match. */ ir_variable *const out_v = new(mem_ctx) ir_variable(glsl_type::vec(4), iface_field_name, ir_var_shader_out); ir_variable *const match = linker::get_matching_input(mem_ctx, out_v, consumer_inputs, consumer_interface_inputs, junk); EXPECT_EQ(NULL, match); }
TEST_F(link_varyings, one_interface_and_one_simple_input) { ir_variable *const v = new(mem_ctx) ir_variable(glsl_type::vec(4), "a", ir_var_shader_in); ir.push_tail(v); ir_variable *const iface = new(mem_ctx) ir_variable(simple_interface->fields.structure[0].type, simple_interface->fields.structure[0].name, ir_var_shader_in); iface->init_interface_type(simple_interface); ir.push_tail(iface); linker::populate_consumer_input_sets(mem_ctx, &ir, consumer_inputs, consumer_interface_inputs, junk); char *const iface_field_name = interface_field_name(simple_interface); hash_entry *entry = _mesa_hash_table_search(consumer_interface_inputs, iface_field_name); EXPECT_EQ((void *) iface, entry->data); EXPECT_EQ(1u, consumer_interface_inputs->entries); entry = _mesa_hash_table_search(consumer_inputs, "a"); EXPECT_EQ((void *) v, entry->data); EXPECT_EQ(1u, consumer_inputs->entries); }
TEST_F(link_varyings, single_interface_input) { ir_variable *const v = new(mem_ctx) ir_variable(simple_interface->fields.structure[0].type, simple_interface->fields.structure[0].name, ir_var_shader_in); v->init_interface_type(simple_interface); ir.push_tail(v); linker::populate_consumer_input_sets(mem_ctx, &ir, consumer_inputs, consumer_interface_inputs, junk); char *const full_name = interface_field_name(simple_interface); hash_entry *entry = _mesa_hash_table_search(consumer_interface_inputs, full_name); EXPECT_EQ((void *) v, entry->data); EXPECT_EQ(1u, consumer_interface_inputs->entries); EXPECT_TRUE(consumer_inputs->entries == 0); }