summaryrefslogtreecommitdiffstats
path: root/chromium/gpu/command_buffer/service/test_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/gpu/command_buffer/service/test_helper.cc')
-rw-r--r--chromium/gpu/command_buffer/service/test_helper.cc139
1 files changed, 116 insertions, 23 deletions
diff --git a/chromium/gpu/command_buffer/service/test_helper.cc b/chromium/gpu/command_buffer/service/test_helper.cc
index 92c5ec456ef..c589be4326a 100644
--- a/chromium/gpu/command_buffer/service/test_helper.cc
+++ b/chromium/gpu/command_buffer/service/test_helper.cc
@@ -9,7 +9,6 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_tokenizer.h"
-#include "gpu/command_buffer/common/types.h"
#include "gpu/command_buffer/service/buffer_manager.h"
#include "gpu/command_buffer/service/error_state_mock.h"
#include "gpu/command_buffer/service/gl_utils.h"
@@ -61,7 +60,9 @@ const GLint TestHelper::kMaxVertexUniformComponents;
#endif
void TestHelper::SetupTextureInitializationExpectations(
- ::gfx::MockGLInterface* gl, GLenum target) {
+ ::gfx::MockGLInterface* gl,
+ GLenum target,
+ bool use_default_textures) {
InSequence sequence;
bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES);
@@ -98,7 +99,7 @@ void TestHelper::SetupTextureInitializationExpectations(
NOTREACHED();
}
- int array_size = 2;
+ int array_size = use_default_textures ? 2 : 1;
EXPECT_CALL(*gl, GenTextures(array_size, _))
.WillOnce(SetArrayArgument<1>(texture_ids,
@@ -139,11 +140,14 @@ void TestHelper::SetupTextureInitializationExpectations(
void TestHelper::SetupTextureManagerInitExpectations(
::gfx::MockGLInterface* gl,
- const char* extensions) {
+ const char* extensions,
+ bool use_default_textures) {
InSequence sequence;
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_2D);
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_CUBE_MAP);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_2D, use_default_textures);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_CUBE_MAP, use_default_textures);
bool ext_image_external = false;
bool arb_texture_rectangle = false;
@@ -160,15 +164,22 @@ void TestHelper::SetupTextureManagerInitExpectations(
}
if (ext_image_external) {
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_EXTERNAL_OES);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures);
}
if (arb_texture_rectangle) {
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_RECTANGLE_ARB);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures);
}
}
void TestHelper::SetupTextureDestructionExpectations(
- ::gfx::MockGLInterface* gl, GLenum target) {
+ ::gfx::MockGLInterface* gl,
+ GLenum target,
+ bool use_default_textures) {
+ if (!use_default_textures)
+ return;
+
GLuint texture_id = 0;
switch (target) {
case GL_TEXTURE_2D:
@@ -194,9 +205,11 @@ void TestHelper::SetupTextureDestructionExpectations(
void TestHelper::SetupTextureManagerDestructionExpectations(
::gfx::MockGLInterface* gl,
- const char* extensions) {
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D);
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_CUBE_MAP);
+ const char* extensions,
+ bool use_default_textures) {
+ SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures);
+ SetupTextureDestructionExpectations(
+ gl, GL_TEXTURE_CUBE_MAP, use_default_textures);
bool ext_image_external = false;
bool arb_texture_rectangle = false;
@@ -213,10 +226,12 @@ void TestHelper::SetupTextureManagerDestructionExpectations(
}
if (ext_image_external) {
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_EXTERNAL_OES);
+ SetupTextureDestructionExpectations(
+ gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures);
}
if (arb_texture_rectangle) {
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_RECTANGLE_ARB);
+ SetupTextureDestructionExpectations(
+ gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures);
}
EXPECT_CALL(*gl, DeleteTextures(4, _))
@@ -225,18 +240,23 @@ void TestHelper::SetupTextureManagerDestructionExpectations(
}
void TestHelper::SetupContextGroupInitExpectations(
- ::gfx::MockGLInterface* gl,
- const DisallowedFeatures& disallowed_features,
- const char* extensions) {
+ ::gfx::MockGLInterface* gl,
+ const DisallowedFeatures& disallowed_features,
+ const char* extensions,
+ const char* gl_version,
+ bool bind_generates_resource) {
InSequence sequence;
- SetupFeatureInfoInitExpectations(gl, extensions);
+ SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", gl_version);
+
+ std::string l_version(StringToLowerASCII(std::string(gl_version)));
+ bool is_es3 = (l_version.substr(0, 12) == "opengl es 3.");
EXPECT_CALL(*gl, GetIntegerv(GL_MAX_RENDERBUFFER_SIZE, _))
.WillOnce(SetArgumentPointee<1>(kMaxRenderbufferSize))
.RetiresOnSaturation();
if (strstr(extensions, "GL_EXT_framebuffer_multisample") ||
- strstr(extensions, "GL_EXT_multisampled_render_to_texture")) {
+ strstr(extensions, "GL_EXT_multisampled_render_to_texture") || is_es3) {
EXPECT_CALL(*gl, GetIntegerv(GL_MAX_SAMPLES, _))
.WillOnce(SetArgumentPointee<1>(kMaxSamples))
.RetiresOnSaturation();
@@ -273,7 +293,8 @@ void TestHelper::SetupContextGroupInitExpectations(
.WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents))
.RetiresOnSaturation();
- SetupTextureManagerInitExpectations(gl, extensions);
+ bool use_default_textures = bind_generates_resource;
+ SetupTextureManagerInitExpectations(gl, extensions, use_default_textures);
}
void TestHelper::SetupFeatureInfoInitExpectations(
@@ -297,6 +318,78 @@ void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(
EXPECT_CALL(*gl, GetString(GL_VERSION))
.WillOnce(Return(reinterpret_cast<const uint8*>(gl_version)))
.RetiresOnSaturation();
+
+ std::string l_version(StringToLowerASCII(std::string(gl_version)));
+ bool is_es3 = (l_version.substr(0, 12) == "opengl es 3.");
+
+ if (strstr(extensions, "GL_ARB_texture_float") ||
+ (is_es3 && strstr(extensions, "GL_EXT_color_buffer_float"))) {
+ static const GLuint gl_ids[] = {101, 102};
+ const GLsizei width = 16;
+ EXPECT_CALL(*gl, GetIntegerv(GL_FRAMEBUFFER_BINDING, _))
+ .WillOnce(SetArgumentPointee<1>(gl_ids[0]))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, GetIntegerv(GL_TEXTURE_BINDING_2D, _))
+ .WillOnce(SetArgumentPointee<1>(gl_ids[0]))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, GenTextures(1, _))
+ .WillOnce(SetArrayArgument<1>(gl_ids + 1, gl_ids + 2))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, GenFramebuffersEXT(1, _))
+ .WillOnce(SetArrayArgument<1>(gl_ids + 1, gl_ids + 2))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindTexture(GL_TEXTURE_2D, gl_ids[1]))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+ GL_NEAREST))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, width, 0,
+ GL_RGBA, GL_FLOAT, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindFramebufferEXT(GL_FRAMEBUFFER, gl_ids[1]))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, FramebufferTexture2DEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl_ids[1], 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, TexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, width, width, 0,
+ GL_RGB, GL_FLOAT, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ if (is_es3) {
+ EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT))
+ .RetiresOnSaturation();
+ } else {
+ EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+ }
+ EXPECT_CALL(*gl, DeleteFramebuffersEXT(1, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, DeleteTextures(1, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindFramebufferEXT(GL_FRAMEBUFFER, gl_ids[0]))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindTexture(GL_TEXTURE_2D, gl_ids[0]))
+ .Times(1)
+ .RetiresOnSaturation();
+#if DCHECK_IS_ON
+ EXPECT_CALL(*gl, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+#endif
+ }
}
void TestHelper::SetupExpectationsForClearingUniforms(
@@ -524,7 +617,7 @@ void TestHelper::DoBufferData(
manager->DoBufferData(error_state, buffer, size, usage, data);
}
-void TestHelper::SetTexParameterWithExpectations(
+void TestHelper::SetTexParameteriWithExpectations(
::gfx::MockGLInterface* gl, MockErrorState* error_state,
TextureManager* manager, TextureRef* texture_ref,
GLenum pname, GLint value, GLenum error) {
@@ -540,11 +633,11 @@ void TestHelper::SetTexParameterWithExpectations(
.Times(1)
.RetiresOnSaturation();
} else {
- EXPECT_CALL(*error_state, SetGLErrorInvalidParam(_, _, error, _, _, _))
+ EXPECT_CALL(*error_state, SetGLErrorInvalidParami(_, _, error, _, _, _))
.Times(1)
.RetiresOnSaturation();
}
- manager->SetParameter("", error_state, texture_ref, pname, value);
+ manager->SetParameteri("", error_state, texture_ref, pname, value);
}
ScopedGLImplementationSetter::ScopedGLImplementationSetter(