1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_
6#define GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_
7
8#include "ui/gl/gl_implementation.h"
9#include "ui/gl/gl_mock.h"
10
11namespace gpu {
12namespace gles2 {
13
14struct DisallowedFeatures;
15class Buffer;
16class BufferManager;
17class MockErrorState;
18class TextureRef;
19class TextureManager;
20
21class TestHelper {
22 public:
23  static const GLuint kServiceBlackTexture2dId = 701;
24  static const GLuint kServiceDefaultTexture2dId = 702;
25  static const GLuint kServiceBlackTextureCubemapId = 703;
26  static const GLuint kServiceDefaultTextureCubemapId = 704;
27  static const GLuint kServiceBlackExternalTextureId = 705;
28  static const GLuint kServiceDefaultExternalTextureId = 706;
29  static const GLuint kServiceBlackRectangleTextureId = 707;
30  static const GLuint kServiceDefaultRectangleTextureId = 708;
31
32  static const GLint kMaxSamples = 4;
33  static const GLint kMaxRenderbufferSize = 1024;
34  static const GLint kMaxTextureSize = 2048;
35  static const GLint kMaxCubeMapTextureSize = 256;
36  static const GLint kNumVertexAttribs = 16;
37  static const GLint kNumTextureUnits = 8;
38  static const GLint kMaxTextureImageUnits = 8;
39  static const GLint kMaxVertexTextureImageUnits = 2;
40  static const GLint kMaxFragmentUniformVectors = 16;
41  static const GLint kMaxFragmentUniformComponents =
42      kMaxFragmentUniformVectors * 4;
43  static const GLint kMaxVaryingVectors = 8;
44  static const GLint kMaxVaryingFloats = kMaxVaryingVectors * 4;
45  static const GLint kMaxVertexUniformVectors = 128;
46  static const GLint kMaxVertexUniformComponents = kMaxVertexUniformVectors * 4;
47
48  struct AttribInfo {
49    const char* name;
50    GLint size;
51    GLenum type;
52    GLint location;
53  };
54
55  struct UniformInfo {
56    const char* name;
57    GLint size;
58    GLenum type;
59    GLint fake_location;
60    GLint real_location;
61    GLint desired_location;
62    const char* good_name;
63  };
64
65  static void SetupContextGroupInitExpectations(
66      ::gfx::MockGLInterface* gl,
67      const DisallowedFeatures& disallowed_features,
68      const char* extensions);
69  static void SetupFeatureInfoInitExpectations(
70      ::gfx::MockGLInterface* gl, const char* extensions);
71  static void SetupFeatureInfoInitExpectationsWithGLVersion(
72      ::gfx::MockGLInterface* gl,
73      const char* extensions,
74      const char* version);
75  static void SetupTextureManagerInitExpectations(
76      ::gfx::MockGLInterface* gl, const char* extensions);
77  static void SetupTextureManagerDestructionExpectations(
78      ::gfx::MockGLInterface* gl, const char* extensions);
79
80  static void SetupExpectationsForClearingUniforms(
81      ::gfx::MockGLInterface* gl, UniformInfo* uniforms, size_t num_uniforms);
82
83  static void SetupShader(
84      ::gfx::MockGLInterface* gl,
85      AttribInfo* attribs, size_t num_attribs,
86      UniformInfo* uniforms, size_t num_uniforms,
87      GLuint service_id);
88
89  static void SetupProgramSuccessExpectations(::gfx::MockGLInterface* gl,
90      AttribInfo* attribs, size_t num_attribs,
91      UniformInfo* uniforms, size_t num_uniforms,
92      GLuint service_id);
93
94  static void DoBufferData(
95      ::gfx::MockGLInterface* gl, MockErrorState* error_state,
96      BufferManager* manager, Buffer* buffer, GLsizeiptr size, GLenum usage,
97      const GLvoid* data, GLenum error);
98
99  static void SetTexParameterWithExpectations(
100      ::gfx::MockGLInterface* gl, MockErrorState* error_state,
101      TextureManager* manager, TextureRef* texture_ref,
102      GLenum pname, GLint value, GLenum error);
103
104 private:
105  static void SetupTextureInitializationExpectations(
106       ::gfx::MockGLInterface* gl, GLenum target);
107  static void SetupTextureDestructionExpectations(
108       ::gfx::MockGLInterface* gl, GLenum target);
109};
110
111// This object temporaritly Sets what gfx::GetGLImplementation returns. During
112// testing the GLImplementation is set to kGLImplemenationMockGL but lots of
113// code branches based on what gfx::GetGLImplementation returns.
114class ScopedGLImplementationSetter {
115 public:
116  explicit ScopedGLImplementationSetter(gfx::GLImplementation implementation);
117  ~ScopedGLImplementationSetter();
118
119 private:
120  gfx::GLImplementation old_implementation_;
121};
122
123}  // namespace gles2
124}  // namespace gpu
125
126#endif  // GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_
127
128