// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_
#define GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_mock.h"
namespace gpu {
namespace gles2 {
struct DisallowedFeatures;
class Buffer;
class BufferManager;
class MockErrorState;
class TextureRef;
class TextureManager;
class TestHelper {
public:
static const GLuint kServiceBlackTexture2dId = 701;
static const GLuint kServiceDefaultTexture2dId = 702;
static const GLuint kServiceBlackTextureCubemapId = 703;
static const GLuint kServiceDefaultTextureCubemapId = 704;
static const GLuint kServiceBlackExternalTextureId = 705;
static const GLuint kServiceDefaultExternalTextureId = 706;
static const GLuint kServiceBlackRectangleTextureId = 707;
static const GLuint kServiceDefaultRectangleTextureId = 708;
static const GLint kMaxSamples = 4;
static const GLint kMaxRenderbufferSize = 1024;
static const GLint kMaxTextureSize = 2048;
static const GLint kMaxCubeMapTextureSize = 256;
static const GLint kNumVertexAttribs = 16;
static const GLint kNumTextureUnits = 8;
static const GLint kMaxTextureImageUnits = 8;
static const GLint kMaxVertexTextureImageUnits = 2;
static const GLint kMaxFragmentUniformVectors = 16;
static const GLint kMaxFragmentUniformComponents =
kMaxFragmentUniformVectors * 4;
static const GLint kMaxVaryingVectors = 8;
static const GLint kMaxVaryingFloats = kMaxVaryingVectors * 4;
static const GLint kMaxVertexUniformVectors = 128;
static const GLint kMaxVertexUniformComponents = kMaxVertexUniformVectors * 4;
struct AttribInfo {
const char* name;
GLint size;
GLenum type;
GLint location;
};
struct UniformInfo {
const char* name;
GLint size;
GLenum type;
GLint fake_location;
GLint real_location;
GLint desired_location;
const char* good_name;
};
static void SetupContextGroupInitExpectations(
::gfx::MockGLInterface* gl,
const DisallowedFeatures& disallowed_features,
const char* extensions,
const char* gl_version,
bool bind_generates_resource);
static void SetupFeatureInfoInitExpectations(
::gfx::MockGLInterface* gl, const char* extensions);
static void SetupFeatureInfoInitExpectationsWithGLVersion(
::gfx::MockGLInterface* gl,
const char* extensions,
const char* gl_renderer,
const char* gl_version);
static void SetupTextureManagerInitExpectations(::gfx::MockGLInterface* gl,
const char* extensions,
bool use_default_textures);
static void SetupTextureManagerDestructionExpectations(
::gfx::MockGLInterface* gl,
const char* extensions,
bool use_default_textures);
static void SetupExpectationsForClearingUniforms(
::gfx::MockGLInterface* gl, UniformInfo* uniforms, size_t num_uniforms);
static void SetupShader(
::gfx::MockGLInterface* gl,
AttribInfo* attribs, size_t num_attribs,
UniformInfo* uniforms, size_t num_uniforms,
GLuint service_id);
static void SetupProgramSuccessExpectations(::gfx::MockGLInterface* gl,
AttribInfo* attribs, size_t num_attribs,
UniformInfo* uniforms, size_t num_uniforms,
GLuint service_id);
static void DoBufferData(
::gfx::MockGLInterface* gl, MockErrorState* error_state,
BufferManager* manager, Buffer* buffer, GLsizeiptr size, GLenum usage,
const GLvoid* data, GLenum error);
static void SetTexParameteriWithExpectations(
::gfx::MockGLInterface* gl, MockErrorState* error_state,
TextureManager* manager, TextureRef* texture_ref,
GLenum pname, GLint value, GLenum error);
private:
static void SetupTextureInitializationExpectations(::gfx::MockGLInterface* gl,
GLenum target,
bool use_default_textures);
static void SetupTextureDestructionExpectations(::gfx::MockGLInterface* gl,
GLenum target,
bool use_default_textures);
};
// This object temporaritly Sets what gfx::GetGLImplementation returns. During
// testing the GLImplementation is set to kGLImplemenationMockGL but lots of
// code branches based on what gfx::GetGLImplementation returns.
class ScopedGLImplementationSetter {
public:
explicit ScopedGLImplementationSetter(gfx::GLImplementation implementation);
~ScopedGLImplementationSetter();
private:
gfx::GLImplementation old_implementation_;
};
} // namespace gles2
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_