blob: 267d623ed27189b5fa443e3dd3ebe41c4ab18930 [file] [log] [blame]
Avi Drissman05dfbc822022-09-13 21:25:341// Copyright 2012 The Chromium Authors
gman@chromium.org00f893d2010-08-24 18:55:492// 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
avif15d60a2015-12-21 17:06:338#include <stddef.h>
9
kbrc9f0e10c2015-03-31 19:49:1210#include <string>
11#include <vector>
12
Stephen Nuskof4e53402025-07-23 13:39:4413#include "base/containers/span.h"
Antoine Labourfeab2392017-12-21 20:28:3914#include "gpu/command_buffer/common/context_creation_attribs.h"
zmo576a0492014-09-13 01:12:3215#include "gpu/command_buffer/service/shader_translator.h"
gman@chromium.org8af4d5e2013-03-15 23:55:3316#include "ui/gl/gl_implementation.h"
gman@chromium.orge16b0252012-12-07 09:07:4917#include "ui/gl/gl_mock.h"
gman@chromium.org00f893d2010-08-24 18:55:4918
19namespace gpu {
20namespace gles2 {
21
zmo@google.come82fb792011-09-22 00:33:2922struct DisallowedFeatures;
gman@chromium.org17cfbe0e2013-03-07 01:26:0823class Buffer;
24class BufferManager;
kkinnunenc8b449e1582015-11-02 07:57:5125class FeatureInfo;
kloveless@chromium.orgd3eba342013-04-18 21:11:5026class MockErrorState;
zmo576a0492014-09-13 01:12:3227class Shader;
piman@chromium.org370eaf12013-05-18 09:19:4928class TextureRef;
gman@chromium.org02965c22013-03-09 02:40:0729class TextureManager;
jbauman@chromium.orgc410da802011-03-14 19:17:4130
gman@chromium.org00f893d2010-08-24 18:55:4931class TestHelper {
32 public:
33 static const GLuint kServiceBlackTexture2dId = 701;
kbr@chromium.orge51bdf32011-11-23 22:21:4634 static const GLuint kServiceDefaultTexture2dId = 702;
qiankun.miao4e2f0d02015-09-18 03:34:4835 static const GLuint kServiceBlackTexture3dId = 703;
36 static const GLuint kServiceDefaultTexture3dId = 704;
37 static const GLuint kServiceBlackTexture2dArrayId = 705;
38 static const GLuint kServiceDefaultTexture2dArrayId = 706;
39 static const GLuint kServiceBlackTextureCubemapId = 707;
40 static const GLuint kServiceDefaultTextureCubemapId = 708;
41 static const GLuint kServiceBlackExternalTextureId = 709;
42 static const GLuint kServiceDefaultExternalTextureId = 710;
43 static const GLuint kServiceBlackRectangleTextureId = 711;
44 static const GLuint kServiceDefaultRectangleTextureId = 712;
gman@chromium.org00f893d2010-08-24 18:55:4945
gman@chromium.org84afefa2011-10-19 21:45:5346 static const GLint kMaxSamples = 4;
gman@chromium.org5094b0f2010-11-09 19:45:2447 static const GLint kMaxRenderbufferSize = 1024;
gman@chromium.org00f893d2010-08-24 18:55:4948 static const GLint kMaxTextureSize = 2048;
cwalleze96e24b2016-03-15 00:18:4849 static const GLint kMaxCubeMapTextureSize = 2048;
zmoa2226e42016-02-24 04:29:0950 static const GLint kMax3DTextureSize = 1024;
zmo9bdab5d2016-05-05 04:35:2751 static const GLint kMaxArrayTextureLayers = 256;
sandersd9d0bb832014-12-17 01:24:5552 static const GLint kMaxRectangleTextureSize = 64;
gman@chromium.org00f893d2010-08-24 18:55:4953 static const GLint kNumVertexAttribs = 16;
54 static const GLint kNumTextureUnits = 8;
55 static const GLint kMaxTextureImageUnits = 8;
56 static const GLint kMaxVertexTextureImageUnits = 2;
57 static const GLint kMaxFragmentUniformVectors = 16;
gman@chromium.org915a59a12010-09-30 21:29:1158 static const GLint kMaxFragmentUniformComponents =
59 kMaxFragmentUniformVectors * 4;
gman@chromium.org00f893d2010-08-24 18:55:4960 static const GLint kMaxVaryingVectors = 8;
gman@chromium.org915a59a12010-09-30 21:29:1161 static const GLint kMaxVaryingFloats = kMaxVaryingVectors * 4;
gman@chromium.org00f893d2010-08-24 18:55:4962 static const GLint kMaxVertexUniformVectors = 128;
gman@chromium.org915a59a12010-09-30 21:29:1163 static const GLint kMaxVertexUniformComponents = kMaxVertexUniformVectors * 4;
cwalleze96e24b2016-03-15 00:18:4864 static const GLint kMaxVertexOutputComponents = 64;
65 static const GLint kMaxFragmentInputComponents = 60;
66 static const GLint kMaxProgramTexelOffset = 7;
67 static const GLint kMinProgramTexelOffset = -8;
gman@chromium.org00f893d2010-08-24 18:55:4968
zmo706399be2016-04-21 00:01:0869 static const GLint kMaxTransformFeedbackSeparateAttribs = 4;
70 static const GLint kMaxUniformBufferBindings = 24;
71 static const GLint kUniformBufferOffsetAlignment = 1;
72
gman@chromium.org0abf43e32012-05-10 23:36:2373 struct AttribInfo {
74 const char* name;
75 GLint size;
76 GLenum type;
77 GLint location;
78 };
79
80 struct UniformInfo {
81 const char* name;
82 GLint size;
83 GLenum type;
84 GLint fake_location;
85 GLint real_location;
gman@chromium.org2be6abf32012-06-26 00:28:3386 GLint desired_location;
gman@chromium.org0abf43e32012-05-10 23:36:2387 const char* good_name;
88 };
89
kkinnunenc8b449e1582015-11-02 07:57:5190 struct VaryingInfo {
91 const char* name;
92 GLint size;
93 GLenum type;
94 GLint fake_location;
95 GLint real_location;
96 GLint desired_location;
97 };
kkinnunen8cefb232015-12-04 09:36:3198 struct ProgramOutputInfo {
99 const char* name;
100 GLint size;
101 GLenum type;
102 GLint color_name;
103 GLuint index;
104 };
kkinnunenc8b449e1582015-11-02 07:57:51105
gman@chromium.org00f893d2010-08-24 18:55:49106 static void SetupContextGroupInitExpectations(
kylechar7a463842016-05-26 14:46:12107 ::gl::MockGLInterface* gl,
zmo@google.come82fb792011-09-22 00:33:29108 const DisallowedFeatures& disallowed_features,
oetuaho@nvidia.com17a961192014-02-14 15:20:52109 const char* extensions,
vmiura@chromium.org5ebf59f2014-04-08 03:51:57110 const char* gl_version,
kylechar933c6fc2025-09-04 17:29:47111 ContextType context_type);
kylechar7a463842016-05-26 14:46:12112 static void SetupFeatureInfoInitExpectations(::gl::MockGLInterface* gl,
113 const char* extensions);
zmo@chromium.org185de2a2013-04-04 22:57:11114 static void SetupFeatureInfoInitExpectationsWithGLVersion(
kylechar7a463842016-05-26 14:46:12115 ::gl::MockGLInterface* gl,
gman@chromium.orga9e23872012-05-17 21:50:02116 const char* extensions,
sievers@chromium.orgf42f05b2013-11-15 21:46:18117 const char* gl_renderer,
bajones2c9d7182016-03-11 18:16:28118 const char* gl_version,
kaininoe20d23ac2016-11-03 01:03:45119 ContextType context_type);
Antoine Labour20d16202017-09-05 23:05:29120 static void SetupTextureManagerInitExpectations(
121 ::gl::MockGLInterface* gl,
122 bool is_es3_enabled,
123 bool is_es3_capable,
Michael Spangbe9d9eb2018-06-21 20:02:04124 const gfx::ExtensionSet& extensions,
Antoine Labour20d16202017-09-05 23:05:29125 bool use_default_textures);
gman@chromium.org1075a532012-06-13 00:52:33126 static void SetupTextureManagerDestructionExpectations(
kylechar7a463842016-05-26 14:46:12127 ::gl::MockGLInterface* gl,
qiankun.miao4e2f0d02015-09-18 03:34:48128 bool is_es3_enabled,
Michael Spangbe9d9eb2018-06-21 20:02:04129 const gfx::ExtensionSet& extensions,
vmiura@chromium.org5ebf59f2014-04-08 03:51:57130 bool use_default_textures);
gman@chromium.org0abf43e32012-05-10 23:36:23131
kylechar7a463842016-05-26 14:46:12132 static void SetupShaderExpectations(::gl::MockGLInterface* gl,
kkinnunenc8b449e1582015-11-02 07:57:51133 const FeatureInfo* feature_info,
134 AttribInfo* attribs,
135 size_t num_attribs,
136 UniformInfo* uniforms,
137 size_t num_uniforms,
138 GLuint service_id);
139
140 static void SetupShaderExpectationsWithVaryings(
kylechar7a463842016-05-26 14:46:12141 ::gl::MockGLInterface* gl,
kkinnunenc8b449e1582015-11-02 07:57:51142 const FeatureInfo* feature_info,
143 AttribInfo* attribs,
144 size_t num_attribs,
145 UniformInfo* uniforms,
146 size_t num_uniforms,
147 VaryingInfo* varyings,
148 size_t num_varyings,
Stephen Nuskof4e53402025-07-23 13:39:44149 base::span<ProgramOutputInfo> program_outputs,
150 size_t spanification_suspected_redundant_num_program_outputs,
gman@chromium.org0abf43e32012-05-10 23:36:23151 GLuint service_id);
152
kkinnunen8cefb232015-12-04 09:36:31153 static void SetupProgramSuccessExpectations(
kylechar7a463842016-05-26 14:46:12154 ::gl::MockGLInterface* gl,
kkinnunen8cefb232015-12-04 09:36:31155 const FeatureInfo* feature_info,
156 AttribInfo* attribs,
157 size_t num_attribs,
158 UniformInfo* uniforms,
159 size_t num_uniforms,
160 VaryingInfo* varyings,
161 size_t num_varyings,
Stephen Nuskof4e53402025-07-23 13:39:44162 base::span<ProgramOutputInfo> program_outputs,
163 size_t spanification_suspected_redundant_num_program_outputs,
kkinnunen8cefb232015-12-04 09:36:31164 GLuint service_id);
dmurph@chromium.org65dfc602012-07-23 20:39:39165
kylechar7a463842016-05-26 14:46:12166 static void DoBufferData(::gl::MockGLInterface* gl,
167 MockErrorState* error_state,
168 BufferManager* manager,
169 Buffer* buffer,
170 GLenum target,
171 GLsizeiptr size,
172 GLenum usage,
173 const GLvoid* data,
174 GLenum error);
gman@chromium.org17cfbe0e2013-03-07 01:26:08175
kylechar7a463842016-05-26 14:46:12176 static void SetTexParameteriWithExpectations(::gl::MockGLInterface* gl,
177 MockErrorState* error_state,
178 TextureManager* manager,
179 TextureRef* texture_ref,
180 GLenum pname,
181 GLint value,
182 GLenum error);
gman@chromium.org02965c22013-03-09 02:40:07183
zmo576a0492014-09-13 01:12:32184 static void SetShaderStates(
kylechar7a463842016-05-26 14:46:12185 ::gl::MockGLInterface* gl,
kkinnunen8cefb232015-12-04 09:36:31186 Shader* shader,
zmo576a0492014-09-13 01:12:32187 bool expected_valid,
188 const std::string* const expected_log_info,
189 const std::string* const expected_translated_source,
oetuahoe6bdcf32015-05-07 16:45:25190 const int* const expected_shader_version,
zmo88043c082014-10-09 20:38:55191 const AttributeMap* const expected_attrib_map,
192 const UniformMap* const expected_uniform_map,
193 const VaryingMap* const expected_varying_map,
yunchao.hee4edccd2015-11-06 00:45:18194 const InterfaceBlockMap* const expected_interface_block_map,
Geoff Lang30efb7b2017-08-09 14:59:23195 const OutputVariableList* const expected_output_variable_list,
196 OptionsAffectingCompilationString* options_affecting_compilation);
zmo576a0492014-09-13 01:12:32197
kylechar7a463842016-05-26 14:46:12198 static void SetShaderStates(::gl::MockGLInterface* gl,
199 Shader* shader,
200 bool valid);
zmo576a0492014-09-13 01:12:32201
Geoff Lang30efb7b2017-08-09 14:59:23202 static void SetShaderStates(::gl::MockGLInterface* gl,
203 Shader* shader,
204 bool valid,
205 const std::string& options_affecting_compilation);
206
zmo88043c082014-10-09 20:38:55207 static sh::Attribute ConstructAttribute(
208 GLenum type, GLint array_size, GLenum precision,
209 bool static_use, const std::string& name);
210 static sh::Uniform ConstructUniform(
211 GLenum type, GLint array_size, GLenum precision,
212 bool static_use, const std::string& name);
213 static sh::Varying ConstructVarying(
214 GLenum type, GLint array_size, GLenum precision,
215 bool static_use, const std::string& name);
Kai Ninomiyae9cc6302017-05-19 21:49:13216 static sh::InterfaceBlockField ConstructInterfaceBlockField(
217 GLenum type,
218 GLint array_size,
219 GLenum precision,
220 bool static_use,
221 const std::string& name);
222 static sh::InterfaceBlock ConstructInterfaceBlock(
223 GLint array_size,
224 sh::BlockLayoutType layout,
225 bool is_row_major_layout,
226 bool static_use,
227 const std::string& name,
228 const std::string& instance_name,
229 const std::vector<sh::InterfaceBlockField>& fields);
kkinnunen8cefb232015-12-04 09:36:31230 static sh::OutputVariable ConstructOutputVariable(GLenum type,
231 GLint array_size,
232 GLenum precision,
233 bool static_use,
234 const std::string& name);
zmo88043c082014-10-09 20:38:55235
kbr@chromium.orge51bdf32011-11-23 22:21:46236 private:
kylechar7a463842016-05-26 14:46:12237 static void SetupTextureInitializationExpectations(::gl::MockGLInterface* gl,
vmiura@chromium.org5ebf59f2014-04-08 03:51:57238 GLenum target,
239 bool use_default_textures);
kylechar7a463842016-05-26 14:46:12240 static void SetupTextureDestructionExpectations(::gl::MockGLInterface* gl,
vmiura@chromium.org5ebf59f2014-04-08 03:51:57241 GLenum target,
242 bool use_default_textures);
kbrc9f0e10c2015-03-31 19:49:12243
244 static std::vector<std::string> split_extensions_;
gman@chromium.org00f893d2010-08-24 18:55:49245};
246
gman@chromium.org00f893d2010-08-24 18:55:49247} // namespace gles2
248} // namespace gpu
249
250#endif // GPU_COMMAND_BUFFER_SERVICE_TEST_HELPER_H_