Exemplo n.º 1
0
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));
}
Exemplo n.º 2
0
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));
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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);
}