summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/test_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/service/test_helper.cc')
-rw-r--r--gpu/command_buffer/service/test_helper.cc110
1 files changed, 82 insertions, 28 deletions
diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc
index 2c8fc25..40c285a 100644
--- a/gpu/command_buffer/service/test_helper.cc
+++ b/gpu/command_buffer/service/test_helper.cc
@@ -339,6 +339,16 @@ void TestHelper::SetupContextGroupInitExpectations(
.WillOnce(SetArgumentPointee<1>(kMaxSamples))
.RetiresOnSaturation();
}
+
+ if (gl_info.IsAtLeastGL(3, 3) ||
+ (gl_info.IsAtLeastGL(3, 2) &&
+ strstr(extensions, "GL_ARB_blend_func_extended")) ||
+ (gl_info.is_es && strstr(extensions, "GL_EXT_blend_func_extended"))) {
+ EXPECT_CALL(*gl, GetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ }
+
EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VERTEX_ATTRIBS, _))
.WillOnce(SetArgumentPointee<1>(kNumVertexAttribs))
.RetiresOnSaturation();
@@ -689,6 +699,8 @@ void TestHelper::SetupProgramSuccessExpectations(
size_t num_uniforms,
VaryingInfo* varyings,
size_t num_varyings,
+ ProgramOutputInfo* program_outputs,
+ size_t num_program_outputs,
GLuint service_id) {
EXPECT_CALL(*gl,
GetProgramiv(service_id, GL_LINK_STATUS, _))
@@ -724,7 +736,7 @@ void TestHelper::SetupProgramSuccessExpectations(
SetArrayArgument<6>(info.name,
info.name + strlen(info.name) + 1)))
.RetiresOnSaturation();
- if (!ProgramManager::IsInvalidPrefix(info.name, strlen(info.name))) {
+ if (!ProgramManager::HasBuiltInPrefix(info.name)) {
EXPECT_CALL(*gl, GetAttribLocation(service_id, StrEq(info.name)))
.WillOnce(Return(info.location))
.RetiresOnSaturation();
@@ -799,7 +811,9 @@ void TestHelper::SetupProgramSuccessExpectations(
SetArrayArgument<5>(
info.name, info.name + strlen(info.name) + 1)))
.RetiresOnSaturation();
- if (!ProgramManager::IsInvalidPrefix(info.name, strlen(info.name))) {
+ if (ProgramManager::HasBuiltInPrefix(info.name))
+ continue;
+
static const GLenum kPropsArray[] = {GL_LOCATION, GL_TYPE,
GL_ARRAY_SIZE};
static const size_t kPropsSize = arraysize(kPropsArray);
@@ -818,6 +832,26 @@ void TestHelper::SetupProgramSuccessExpectations(
}))
.RetiresOnSaturation();
}
+ }
+ if (feature_info->gl_version_info().IsES3Capable() &&
+ !feature_info->disable_shader_translator()) {
+ for (size_t ii = 0; ii < num_program_outputs; ++ii) {
+ ProgramOutputInfo& info = program_outputs[ii];
+ if (ProgramManager::HasBuiltInPrefix(info.name))
+ continue;
+
+ EXPECT_CALL(*gl, GetFragDataLocation(service_id, StrEq(info.name)))
+ .WillOnce(Return(info.color_name))
+ .RetiresOnSaturation();
+ if (feature_info->feature_flags().ext_blend_func_extended) {
+ EXPECT_CALL(*gl, GetFragDataIndex(service_id, StrEq(info.name)))
+ .WillOnce(Return(info.index))
+ .RetiresOnSaturation();
+ } else {
+ // Test case must not use indices, or the context of the testcase has to
+ // support the dual source blending.
+ DCHECK(info.index == 0);
+ }
}
}
}
@@ -834,8 +868,8 @@ void TestHelper::SetupShaderExpectations(::gfx::MockGLInterface* gl,
EXPECT_CALL(*gl, LinkProgram(service_id)).Times(1).RetiresOnSaturation();
SetupProgramSuccessExpectations(gl, feature_info, attribs, num_attribs,
- uniforms, num_uniforms, nullptr, 0,
- service_id);
+ uniforms, num_uniforms, nullptr, 0, nullptr,
+ 0, service_id);
}
void TestHelper::SetupShaderExpectationsWithVaryings(
@@ -847,6 +881,8 @@ void TestHelper::SetupShaderExpectationsWithVaryings(
size_t num_uniforms,
VaryingInfo* varyings,
size_t num_varyings,
+ ProgramOutputInfo* program_outputs,
+ size_t num_program_outputs,
GLuint service_id) {
InSequence s;
@@ -855,9 +891,9 @@ void TestHelper::SetupShaderExpectationsWithVaryings(
.Times(1)
.RetiresOnSaturation();
- SetupProgramSuccessExpectations(gl, feature_info, attribs, num_attribs,
- uniforms, num_uniforms, varyings,
- num_varyings, service_id);
+ SetupProgramSuccessExpectations(
+ gl, feature_info, attribs, num_attribs, uniforms, num_uniforms, varyings,
+ num_varyings, program_outputs, num_program_outputs, service_id);
}
void TestHelper::DoBufferData(
@@ -905,16 +941,18 @@ void TestHelper::SetTexParameteriWithExpectations(
// static
void TestHelper::SetShaderStates(
- ::gfx::MockGLInterface* gl, Shader* shader,
- bool expected_valid,
- const std::string* const expected_log_info,
- const std::string* const expected_translated_source,
- const int* const expected_shader_version,
- const AttributeMap* const expected_attrib_map,
- const UniformMap* const expected_uniform_map,
- const VaryingMap* const expected_varying_map,
- const InterfaceBlockMap* const expected_interface_block_map,
- const NameMap* const expected_name_map) {
+ ::gfx::MockGLInterface* gl,
+ Shader* shader,
+ bool expected_valid,
+ const std::string* const expected_log_info,
+ const std::string* const expected_translated_source,
+ const int* const expected_shader_version,
+ const AttributeMap* const expected_attrib_map,
+ const UniformMap* const expected_uniform_map,
+ const VaryingMap* const expected_varying_map,
+ const InterfaceBlockMap* const expected_interface_block_map,
+ const OutputVariableList* const expected_output_variable_list,
+ const NameMap* const expected_name_map) {
const std::string empty_log_info;
const std::string* log_info = (expected_log_info && !expected_valid) ?
expected_log_info : &empty_log_info;
@@ -938,6 +976,11 @@ void TestHelper::SetShaderStates(
const InterfaceBlockMap* interface_block_map =
(expected_interface_block_map && expected_valid) ?
expected_interface_block_map : &empty_interface_block_map;
+ const OutputVariableList empty_output_variable_list;
+ const OutputVariableList* output_variable_list =
+ (expected_output_variable_list && expected_valid)
+ ? expected_output_variable_list
+ : &empty_output_variable_list;
const NameMap empty_name_map;
const NameMap* name_map = (expected_name_map && expected_valid) ?
expected_name_map : &empty_name_map;
@@ -945,13 +988,14 @@ void TestHelper::SetShaderStates(
MockShaderTranslator* mock_translator = new MockShaderTranslator;
scoped_refptr<ShaderTranslatorInterface> translator(mock_translator);
EXPECT_CALL(*mock_translator, Translate(_,
- NotNull(), // log_info
- NotNull(), // translated_source
- NotNull(), // shader_version
- NotNull(), // attrib_map
- NotNull(), // uniform_map
- NotNull(), // varying_map
- NotNull(), // interface_block_map
+ NotNull(), // log_info
+ NotNull(), // translated_source
+ NotNull(), // shader_version
+ NotNull(), // attrib_map
+ NotNull(), // uniform_map
+ NotNull(), // varying_map
+ NotNull(), // interface_block_map
+ NotNull(), // output_variable_list
NotNull())) // name_map
.WillOnce(DoAll(SetArgumentPointee<1>(*log_info),
SetArgumentPointee<2>(*translated_source),
@@ -960,8 +1004,8 @@ void TestHelper::SetShaderStates(
SetArgumentPointee<5>(*uniform_map),
SetArgumentPointee<6>(*varying_map),
SetArgumentPointee<7>(*interface_block_map),
- SetArgumentPointee<8>(*name_map),
- Return(expected_valid)))
+ SetArgumentPointee<8>(*output_variable_list),
+ SetArgumentPointee<9>(*name_map), Return(expected_valid)))
.RetiresOnSaturation();
if (expected_valid) {
EXPECT_CALL(*gl, ShaderSource(shader->service_id(), 1, _, NULL))
@@ -983,8 +1027,8 @@ void TestHelper::SetShaderStates(
// static
void TestHelper::SetShaderStates(
::gfx::MockGLInterface* gl, Shader* shader, bool valid) {
- SetShaderStates(
- gl, shader, valid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ SetShaderStates(gl, shader, valid, nullptr, nullptr, nullptr, nullptr,
+ nullptr, nullptr, nullptr, nullptr, nullptr);
}
// static
@@ -1011,6 +1055,16 @@ sh::Varying TestHelper::ConstructVarying(
type, array_size, precision, static_use, name);
}
+sh::OutputVariable TestHelper::ConstructOutputVariable(
+ GLenum type,
+ GLint array_size,
+ GLenum precision,
+ bool static_use,
+ const std::string& name) {
+ return ConstructShaderVariable<sh::OutputVariable>(
+ type, array_size, precision, static_use, name);
+}
+
ScopedGLImplementationSetter::ScopedGLImplementationSetter(
gfx::GLImplementation implementation)
: old_implementation_(gfx::GetGLImplementation()) {