diff options
author | kkinnunen <kkinnunen@nvidia.com> | 2015-12-04 01:36:31 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-04 09:37:12 +0000 |
commit | 8cefb231216c2777281f37a30e3fb8e67513ee2b (patch) | |
tree | 2d0163eed0729e5f7a8fb55fb03b034eddcb5305 /gpu/command_buffer/service/shader_translator_unittest.cc | |
parent | 91db68e8cb2080d1e9e07858efea3f7e198112a9 (diff) | |
download | chromium_src-8cefb231216c2777281f37a30e3fb8e67513ee2b.zip chromium_src-8cefb231216c2777281f37a30e3fb8e67513ee2b.tar.gz chromium_src-8cefb231216c2777281f37a30e3fb8e67513ee2b.tar.bz2 |
command_buffer: Implement EXT_blend_func_extended
Implement EXT_blend_func_extended for command buffer ES 2.0 and ES 3.0
contexts.
For the ES 2.0 context, the extension supports dual-source blending with
pre-defined gl_SecondaryFragColorEXT and gl_SecondaryFragDataEXT
variables.
Currently EXT_blend_func_extended is only exposed if the service context
supports program interface query. This means OpenGL context or OpenGL
ES 3.1 context. This is to simplify the unit test expectation conditions.
Theoretically also ES 2.0 and ES 3.0 service contexts could support
EXT_blend_func_extended, but probably there will never be such a driver.
BUG=506765
Review URL: https://codereview.chromium.org/1309743005
Cr-Commit-Position: refs/heads/master@{#363175}
Diffstat (limited to 'gpu/command_buffer/service/shader_translator_unittest.cc')
-rw-r--r-- | gpu/command_buffer/service/shader_translator_unittest.cc | 136 |
1 files changed, 54 insertions, 82 deletions
diff --git a/gpu/command_buffer/service/shader_translator_unittest.cc b/gpu/command_buffer/service/shader_translator_unittest.cc index eff11c1..e5b3f6b 100644 --- a/gpu/command_buffer/service/shader_translator_unittest.cc +++ b/gpu/command_buffer/service/shader_translator_unittest.cc @@ -98,16 +98,13 @@ TEST_F(ShaderTranslatorTest, ValidVertexShader) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; - EXPECT_TRUE(vertex_translator_->Translate(shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_TRUE(vertex_translator_->Translate( + shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); + // Info log must be NULL. EXPECT_TRUE(info_log.empty()); // Translated shader must be valid and non-empty. @@ -118,6 +115,7 @@ TEST_F(ShaderTranslatorTest, ValidVertexShader) { EXPECT_TRUE(uniform_map.empty()); EXPECT_TRUE(interface_block_map.empty()); EXPECT_EQ(1u, varying_map.size()); + EXPECT_TRUE(output_variable_list.empty()); // There should be no name mapping. EXPECT_TRUE(name_map.empty()); } @@ -136,16 +134,12 @@ TEST_F(ShaderTranslatorTest, InvalidVertexShader) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; - EXPECT_FALSE(vertex_translator_->Translate(bad_shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_FALSE(vertex_translator_->Translate( + bad_shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); // Info log must be valid and non-empty. ASSERT_FALSE(info_log.empty()); // Translated shader must be NULL. @@ -156,19 +150,15 @@ TEST_F(ShaderTranslatorTest, InvalidVertexShader) { EXPECT_TRUE(uniform_map.empty()); EXPECT_TRUE(varying_map.empty()); EXPECT_TRUE(interface_block_map.empty()); + EXPECT_TRUE(output_variable_list.empty()); EXPECT_TRUE(name_map.empty()); // Try a good shader after bad. info_log.clear(); - EXPECT_TRUE(vertex_translator_->Translate(good_shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_TRUE(vertex_translator_->Translate( + good_shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); EXPECT_TRUE(info_log.empty()); EXPECT_FALSE(translated_source.empty()); EXPECT_TRUE(interface_block_map.empty()); @@ -187,16 +177,12 @@ TEST_F(ShaderTranslatorTest, ValidFragmentShader) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; - EXPECT_TRUE(fragment_translator_->Translate(shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_TRUE(fragment_translator_->Translate( + shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); // Info log must be NULL. EXPECT_TRUE(info_log.empty()); // Translated shader must be valid and non-empty. @@ -208,6 +194,8 @@ TEST_F(ShaderTranslatorTest, ValidFragmentShader) { EXPECT_TRUE(varying_map.empty()); EXPECT_TRUE(interface_block_map.empty()); EXPECT_TRUE(name_map.empty()); + // gl_FragColor. + EXPECT_EQ(1u, output_variable_list.size()); } TEST_F(ShaderTranslatorTest, InvalidFragmentShader) { @@ -219,17 +207,13 @@ TEST_F(ShaderTranslatorTest, InvalidFragmentShader) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; // An invalid shader should fail. - EXPECT_FALSE(fragment_translator_->Translate(shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_FALSE(fragment_translator_->Translate( + shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); // Info log must be valid and non-empty. EXPECT_FALSE(info_log.empty()); // Translated shader must be NULL. @@ -239,6 +223,7 @@ TEST_F(ShaderTranslatorTest, InvalidFragmentShader) { EXPECT_TRUE(attrib_map.empty()); EXPECT_TRUE(uniform_map.empty()); EXPECT_TRUE(varying_map.empty()); + EXPECT_TRUE(output_variable_list.empty()); EXPECT_TRUE(name_map.empty()); } @@ -255,16 +240,12 @@ TEST_F(ShaderTranslatorTest, GetAttributes) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; - EXPECT_TRUE(vertex_translator_->Translate(shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_TRUE(vertex_translator_->Translate( + shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); // Info log must be NULL. EXPECT_TRUE(info_log.empty()); // Translated shader must be valid and non-empty. @@ -303,16 +284,12 @@ TEST_F(ShaderTranslatorTest, GetUniforms) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; - EXPECT_TRUE(fragment_translator_->Translate(shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_TRUE(fragment_translator_->Translate( + shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); // Info log must be NULL. EXPECT_TRUE(info_log.empty()); // Translated shader must be valid and non-empty. @@ -344,6 +321,9 @@ TEST_F(ShaderTranslatorTest, GetUniforms) { EXPECT_EQ(1u, info->arraySize); EXPECT_STREQ("color", info->name.c_str()); EXPECT_STREQ("bar[1].foo.color[0]", original_name.c_str()); + EXPECT_EQ(1u, output_variable_list.size()); + ASSERT_TRUE(output_variable_list.size() > 0); + EXPECT_EQ(output_variable_list[0].mappedName, "gl_FragColor"); } @@ -372,16 +352,12 @@ TEST_F(ES3ShaderTranslatorTest, InvalidInterfaceBlocks) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; - EXPECT_FALSE(fragment_translator_->Translate(shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_FALSE(fragment_translator_->Translate( + shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); // Info log must be valid and non-empty. ASSERT_FALSE(info_log.empty()); // Translated shader must be NULL. @@ -415,16 +391,12 @@ TEST_F(ES3ShaderTranslatorTest, GetInterfaceBlocks) { UniformMap uniform_map; VaryingMap varying_map; InterfaceBlockMap interface_block_map; + OutputVariableList output_variable_list; NameMap name_map; - EXPECT_TRUE(fragment_translator_->Translate(shader, - &info_log, - &translated_source, - &shader_version, - &attrib_map, - &uniform_map, - &varying_map, - &interface_block_map, - &name_map)); + EXPECT_TRUE(fragment_translator_->Translate( + shader, &info_log, &translated_source, &shader_version, &attrib_map, + &uniform_map, &varying_map, &interface_block_map, &output_variable_list, + &name_map)); // Info log must be NULL. EXPECT_TRUE(info_log.empty()); // Translated shader must be valid and non-empty. @@ -509,7 +481,7 @@ TEST_P(ShaderTranslatorOutputVersionTest, HasCorrectOutputGLSLVersion) { int shader_version; EXPECT_TRUE(translator->Translate(kShader, nullptr, &translated_source, &shader_version, nullptr, nullptr, nullptr, - nullptr, nullptr)); + nullptr, nullptr, nullptr)); std::string expected_version_directive = testing::get<1>(GetParam()); if (expected_version_directive.empty()) { |