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 "gpu/command_buffer/service/shader_translator.h"
9#include "ui/gl/gl_implementation.h"
10#include "ui/gl/gl_mock.h"
11
12namespace gpu {
13namespace gles2 {
14
15struct DisallowedFeatures;
16class Buffer;
17class BufferManager;
18class MockErrorState;
19class Shader;
20class TextureRef;
21class TextureManager;
22
23class TestHelper {
24 public:
25  static const GLuint kServiceBlackTexture2dId = 701;
26  static const GLuint kServiceDefaultTexture2dId = 702;
27  static const GLuint kServiceBlackTextureCubemapId = 703;
28  static const GLuint kServiceDefaultTextureCubemapId = 704;
29  static const GLuint kServiceBlackExternalTextureId = 705;
30  static const GLuint kServiceDefaultExternalTextureId = 706;
31  static const GLuint kServiceBlackRectangleTextureId = 707;
32  static const GLuint kServiceDefaultRectangleTextureId = 708;
33
34  static const GLint kMaxSamples = 4;
35  static const GLint kMaxRenderbufferSize = 1024;
36  static const GLint kMaxTextureSize = 2048;
37  static const GLint kMaxCubeMapTextureSize = 256;
38  static const GLint kNumVertexAttribs = 16;
39  static const GLint kNumTextureUnits = 8;
40  static const GLint kMaxTextureImageUnits = 8;
41  static const GLint kMaxVertexTextureImageUnits = 2;
42  static const GLint kMaxFragmentUniformVectors = 16;
43  static const GLint kMaxFragmentUniformComponents =
44      kMaxFragmentUniformVectors * 4;
45  static const GLint kMaxVaryingVectors = 8;
46  static const GLint kMaxVaryingFloats = kMaxVaryingVectors * 4;
47  static const GLint kMaxVertexUniformVectors = 128;
48  static const GLint kMaxVertexUniformComponents = kMaxVertexUniformVectors * 4;
49
50  struct AttribInfo {
51    const char* name;
52    GLint size;
53    GLenum type;
54    GLint location;
55  };
56
57  struct UniformInfo {
58    const char* name;
59    GLint size;
60    GLenum type;
61    GLint fake_location;
62    GLint real_location;
63    GLint desired_location;
64    const char* good_name;
65  };
66
67  static void SetupContextGroupInitExpectations(
68      ::gfx::MockGLInterface* gl,
69      const DisallowedFeatures& disallowed_features,
70      const char* extensions,
71      const char* gl_version,
72      bool bind_generates_resource);
73  static void SetupFeatureInfoInitExpectations(
74      ::gfx::MockGLInterface* gl, const char* extensions);
75  static void SetupFeatureInfoInitExpectationsWithGLVersion(
76      ::gfx::MockGLInterface* gl,
77      const char* extensions,
78      const char* gl_renderer,
79      const char* gl_version);
80  static void SetupTextureManagerInitExpectations(::gfx::MockGLInterface* gl,
81                                                  const char* extensions,
82                                                  bool use_default_textures);
83  static void SetupTextureManagerDestructionExpectations(
84      ::gfx::MockGLInterface* gl,
85      const char* extensions,
86      bool use_default_textures);
87
88  static void SetupExpectationsForClearingUniforms(
89      ::gfx::MockGLInterface* gl, UniformInfo* uniforms, size_t num_uniforms);
90
91  static void SetupShader(
92      ::gfx::MockGLInterface* gl,
93      AttribInfo* attribs, size_t num_attribs,
94      UniformInfo* uniforms, size_t num_uniforms,
95      GLuint service_id);
96
97  static void SetupProgramSuccessExpectations(::gfx::MockGLInterface* gl,
98      AttribInfo* attribs, size_t num_attribs,
99      UniformInfo* uniforms, size_t num_uniforms,
100      GLuint service_id);
101
102  static void DoBufferData(
103      ::gfx::MockGLInterface* gl, MockErrorState* error_state,
104      BufferManager* manager, Buffer* buffer, GLsizeiptr size, GLenum usage,
105      const GLvoid* data, GLenum error);
106
107  static void SetTexParameteriWithExpectations(
108      ::gfx::MockGLInterface* gl, MockErrorState* error_state,
109      TextureManager* manager, TextureRef* texture_ref,
110      GLenum pname, GLint value, GLenum error);
111
112  static void SetShaderStates(
113      ::gfx::MockGLInterface* gl, Shader* shader,
114      bool expected_valid,
115      const std::string* const expected_log_info,
116      const std::string* const expected_translated_source,
117      const ShaderTranslatorInterface::VariableMap* const expected_attrib_map,
118      const ShaderTranslatorInterface::VariableMap* const expected_uniform_map,
119      const ShaderTranslatorInterface::VariableMap* const expected_varying_map,
120      const ShaderTranslatorInterface::NameMap* const expected_name_map);
121
122  static void SetShaderStates(
123      ::gfx::MockGLInterface* gl, Shader* shader, bool valid);
124
125 private:
126  static void SetupTextureInitializationExpectations(::gfx::MockGLInterface* gl,
127                                                     GLenum target,
128                                                     bool use_default_textures);
129  static void SetupTextureDestructionExpectations(::gfx::MockGLInterface* gl,
130                                                  GLenum target,
131                                                  bool use_default_textures);
132};
133
134// This object temporaritly Sets what gfx::GetGLImplementation returns. During
135// testing the GLImplementation is set to kGLImplemenationMockGL but lots of
136// code branches based on what gfx::GetGLImplementation returns.
137class ScopedGLImplementationSetter {
138 public:
139  explicit ScopedGLImplementationSetter(gfx::GLImplementation implementation);
140  ~ScopedGLImplementationSetter();
141
142 private:
143  gfx::GLImplementation old_implementation_;
144};
145
146}  // namespace gles2
147}  // namespace gpu
148
149#endif  // GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_
150
151