Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/command_buffer/service/test_helper.h" | 5 #include "gpu/command_buffer/service/test_helper.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 51 var.mappedName = name; // No name hashing. | 51 var.mappedName = name; // No name hashing. |
| 52 return var; | 52 return var; |
| 53 } | 53 } |
| 54 | 54 |
| 55 } // namespace anonymous | 55 } // namespace anonymous |
| 56 | 56 |
| 57 // GCC requires these declarations, but MSVC requires they not be present | 57 // GCC requires these declarations, but MSVC requires they not be present |
| 58 #ifndef COMPILER_MSVC | 58 #ifndef COMPILER_MSVC |
| 59 const GLuint TestHelper::kServiceBlackTexture2dId; | 59 const GLuint TestHelper::kServiceBlackTexture2dId; |
| 60 const GLuint TestHelper::kServiceDefaultTexture2dId; | 60 const GLuint TestHelper::kServiceDefaultTexture2dId; |
| 61 const GLuint TestHelper::kServiceBlackTexture3dId; | |
| 62 const GLuint TestHelper::kServiceDefaultTexture3dId; | |
| 63 const GLuint TestHelper::kServiceBlackTexture2dArrayId; | |
| 64 const GLuint TestHelper::kServiceDefaultTexture2dArrayId; | |
| 61 const GLuint TestHelper::kServiceBlackTextureCubemapId; | 65 const GLuint TestHelper::kServiceBlackTextureCubemapId; |
| 62 const GLuint TestHelper::kServiceDefaultTextureCubemapId; | 66 const GLuint TestHelper::kServiceDefaultTextureCubemapId; |
| 63 const GLuint TestHelper::kServiceBlackExternalTextureId; | 67 const GLuint TestHelper::kServiceBlackExternalTextureId; |
| 64 const GLuint TestHelper::kServiceDefaultExternalTextureId; | 68 const GLuint TestHelper::kServiceDefaultExternalTextureId; |
| 65 const GLuint TestHelper::kServiceBlackRectangleTextureId; | 69 const GLuint TestHelper::kServiceBlackRectangleTextureId; |
| 66 const GLuint TestHelper::kServiceDefaultRectangleTextureId; | 70 const GLuint TestHelper::kServiceDefaultRectangleTextureId; |
| 67 | 71 |
| 68 const GLint TestHelper::kMaxSamples; | 72 const GLint TestHelper::kMaxSamples; |
| 69 const GLint TestHelper::kMaxRenderbufferSize; | 73 const GLint TestHelper::kMaxRenderbufferSize; |
| 70 const GLint TestHelper::kMaxTextureSize; | 74 const GLint TestHelper::kMaxTextureSize; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 86 std::vector<std::string> TestHelper::split_extensions_; | 90 std::vector<std::string> TestHelper::split_extensions_; |
| 87 | 91 |
| 88 void TestHelper::SetupTextureInitializationExpectations( | 92 void TestHelper::SetupTextureInitializationExpectations( |
| 89 ::gfx::MockGLInterface* gl, | 93 ::gfx::MockGLInterface* gl, |
| 90 GLenum target, | 94 GLenum target, |
| 91 bool use_default_textures) { | 95 bool use_default_textures) { |
| 92 InSequence sequence; | 96 InSequence sequence; |
| 93 | 97 |
| 94 bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES); | 98 bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES); |
| 95 bool needs_faces = (target == GL_TEXTURE_CUBE_MAP); | 99 bool needs_faces = (target == GL_TEXTURE_CUBE_MAP); |
| 100 bool is_3d_or_2d_array_target = (target == GL_TEXTURE_3D || | |
| 101 target == GL_TEXTURE_2D_ARRAY); | |
| 96 | 102 |
| 97 static GLuint texture_2d_ids[] = { | 103 static GLuint texture_2d_ids[] = { |
| 98 kServiceBlackTexture2dId, | 104 kServiceBlackTexture2dId, |
| 99 kServiceDefaultTexture2dId }; | 105 kServiceDefaultTexture2dId }; |
| 106 static GLuint texture_3d_ids[] = { | |
| 107 kServiceBlackTexture3dId, | |
| 108 kServiceDefaultTexture3dId }; | |
| 109 static GLuint texture_2d_array_ids[] = { | |
| 110 kServiceBlackTexture2dArrayId, | |
| 111 kServiceDefaultTexture2dArrayId }; | |
| 100 static GLuint texture_cube_map_ids[] = { | 112 static GLuint texture_cube_map_ids[] = { |
| 101 kServiceBlackTextureCubemapId, | 113 kServiceBlackTextureCubemapId, |
| 102 kServiceDefaultTextureCubemapId }; | 114 kServiceDefaultTextureCubemapId }; |
| 103 static GLuint texture_external_oes_ids[] = { | 115 static GLuint texture_external_oes_ids[] = { |
| 104 kServiceBlackExternalTextureId, | 116 kServiceBlackExternalTextureId, |
| 105 kServiceDefaultExternalTextureId }; | 117 kServiceDefaultExternalTextureId }; |
| 106 static GLuint texture_rectangle_arb_ids[] = { | 118 static GLuint texture_rectangle_arb_ids[] = { |
| 107 kServiceBlackRectangleTextureId, | 119 kServiceBlackRectangleTextureId, |
| 108 kServiceDefaultRectangleTextureId }; | 120 kServiceDefaultRectangleTextureId }; |
| 109 | 121 |
| 110 const GLuint* texture_ids = NULL; | 122 const GLuint* texture_ids = NULL; |
| 111 switch (target) { | 123 switch (target) { |
| 112 case GL_TEXTURE_2D: | 124 case GL_TEXTURE_2D: |
| 113 texture_ids = &texture_2d_ids[0]; | 125 texture_ids = &texture_2d_ids[0]; |
| 114 break; | 126 break; |
| 127 case GL_TEXTURE_3D: | |
| 128 texture_ids = &texture_3d_ids[0]; | |
| 129 break; | |
| 130 case GL_TEXTURE_2D_ARRAY: | |
| 131 texture_ids = &texture_2d_array_ids[0]; | |
| 132 break; | |
| 115 case GL_TEXTURE_CUBE_MAP: | 133 case GL_TEXTURE_CUBE_MAP: |
| 116 texture_ids = &texture_cube_map_ids[0]; | 134 texture_ids = &texture_cube_map_ids[0]; |
| 117 break; | 135 break; |
| 118 case GL_TEXTURE_EXTERNAL_OES: | 136 case GL_TEXTURE_EXTERNAL_OES: |
| 119 texture_ids = &texture_external_oes_ids[0]; | 137 texture_ids = &texture_external_oes_ids[0]; |
| 120 break; | 138 break; |
| 121 case GL_TEXTURE_RECTANGLE_ARB: | 139 case GL_TEXTURE_RECTANGLE_ARB: |
| 122 texture_ids = &texture_rectangle_arb_ids[0]; | 140 texture_ids = &texture_rectangle_arb_ids[0]; |
| 123 break; | 141 break; |
| 124 default: | 142 default: |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 145 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, | 163 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, |
| 146 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, | 164 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, |
| 147 }; | 165 }; |
| 148 for (size_t ii = 0; ii < arraysize(faces); ++ii) { | 166 for (size_t ii = 0; ii < arraysize(faces); ++ii) { |
| 149 EXPECT_CALL(*gl, TexImage2D(faces[ii], 0, GL_RGBA, 1, 1, 0, GL_RGBA, | 167 EXPECT_CALL(*gl, TexImage2D(faces[ii], 0, GL_RGBA, 1, 1, 0, GL_RGBA, |
| 150 GL_UNSIGNED_BYTE, _)) | 168 GL_UNSIGNED_BYTE, _)) |
| 151 .Times(1) | 169 .Times(1) |
| 152 .RetiresOnSaturation(); | 170 .RetiresOnSaturation(); |
| 153 } | 171 } |
| 154 } else { | 172 } else { |
| 155 EXPECT_CALL(*gl, TexImage2D(target, 0, GL_RGBA, 1, 1, 0, GL_RGBA, | 173 if (is_3d_or_2d_array_target) { |
| 156 GL_UNSIGNED_BYTE, _)) | 174 EXPECT_CALL(*gl, TexImage3D(target, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, |
| 157 .Times(1) | 175 GL_UNSIGNED_BYTE, _)) |
| 158 .RetiresOnSaturation(); | 176 .Times(1) |
| 177 .RetiresOnSaturation(); | |
| 178 } else { | |
| 179 EXPECT_CALL(*gl, TexImage2D(target, 0, GL_RGBA, 1, 1, 0, GL_RGBA, | |
| 180 GL_UNSIGNED_BYTE, _)) | |
| 181 .Times(1) | |
| 182 .RetiresOnSaturation(); | |
| 183 } | |
| 159 } | 184 } |
| 160 } | 185 } |
| 161 } | 186 } |
| 162 EXPECT_CALL(*gl, BindTexture(target, 0)) | 187 EXPECT_CALL(*gl, BindTexture(target, 0)) |
| 163 .Times(1) | 188 .Times(1) |
| 164 .RetiresOnSaturation(); | 189 .RetiresOnSaturation(); |
| 165 } | 190 } |
| 166 | 191 |
| 167 void TestHelper::SetupTextureManagerInitExpectations( | 192 void TestHelper::SetupTextureManagerInitExpectations( |
| 168 ::gfx::MockGLInterface* gl, | 193 ::gfx::MockGLInterface* gl, |
| 194 const char* gl_version, | |
| 169 const char* extensions, | 195 const char* extensions, |
| 170 bool use_default_textures) { | 196 bool use_default_textures) { |
| 171 InSequence sequence; | 197 InSequence sequence; |
| 172 | 198 |
| 199 gfx::GLVersionInfo gl_info(gl_version, "", extensions); | |
| 200 | |
| 173 SetupTextureInitializationExpectations( | 201 SetupTextureInitializationExpectations( |
| 174 gl, GL_TEXTURE_2D, use_default_textures); | 202 gl, GL_TEXTURE_2D, use_default_textures); |
| 175 SetupTextureInitializationExpectations( | 203 SetupTextureInitializationExpectations( |
| 176 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); | 204 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); |
| 177 | 205 |
| 206 if (gl_info.is_es3) { | |
|
Zhenyao Mo
2015/09/14 21:12:06
This is also incorrect. I assume you want to setu
qiankun
2015/09/15 09:14:59
Done.
| |
| 207 SetupTextureInitializationExpectations( | |
| 208 gl, GL_TEXTURE_3D, use_default_textures); | |
| 209 SetupTextureInitializationExpectations( | |
| 210 gl, GL_TEXTURE_2D_ARRAY, use_default_textures); | |
| 211 } | |
| 212 | |
| 178 bool ext_image_external = false; | 213 bool ext_image_external = false; |
| 179 bool arb_texture_rectangle = false; | 214 bool arb_texture_rectangle = false; |
| 180 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); | 215 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); |
| 181 while (t.GetNext()) { | 216 while (t.GetNext()) { |
| 182 if (t.token() == "GL_OES_EGL_image_external") { | 217 if (t.token() == "GL_OES_EGL_image_external") { |
| 183 ext_image_external = true; | 218 ext_image_external = true; |
| 184 break; | 219 break; |
| 185 } | 220 } |
| 186 if (t.token() == "GL_ARB_texture_rectangle") { | 221 if (t.token() == "GL_ARB_texture_rectangle") { |
| 187 arb_texture_rectangle = true; | 222 arb_texture_rectangle = true; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 204 GLenum target, | 239 GLenum target, |
| 205 bool use_default_textures) { | 240 bool use_default_textures) { |
| 206 if (!use_default_textures) | 241 if (!use_default_textures) |
| 207 return; | 242 return; |
| 208 | 243 |
| 209 GLuint texture_id = 0; | 244 GLuint texture_id = 0; |
| 210 switch (target) { | 245 switch (target) { |
| 211 case GL_TEXTURE_2D: | 246 case GL_TEXTURE_2D: |
| 212 texture_id = kServiceDefaultTexture2dId; | 247 texture_id = kServiceDefaultTexture2dId; |
| 213 break; | 248 break; |
| 249 case GL_TEXTURE_3D: | |
| 250 texture_id = kServiceDefaultTexture3dId; | |
| 251 break; | |
| 252 case GL_TEXTURE_2D_ARRAY: | |
| 253 texture_id = kServiceDefaultTexture2dArrayId; | |
| 254 break; | |
| 214 case GL_TEXTURE_CUBE_MAP: | 255 case GL_TEXTURE_CUBE_MAP: |
| 215 texture_id = kServiceDefaultTextureCubemapId; | 256 texture_id = kServiceDefaultTextureCubemapId; |
| 216 break; | 257 break; |
| 217 case GL_TEXTURE_EXTERNAL_OES: | 258 case GL_TEXTURE_EXTERNAL_OES: |
| 218 texture_id = kServiceDefaultExternalTextureId; | 259 texture_id = kServiceDefaultExternalTextureId; |
| 219 break; | 260 break; |
| 220 case GL_TEXTURE_RECTANGLE_ARB: | 261 case GL_TEXTURE_RECTANGLE_ARB: |
| 221 texture_id = kServiceDefaultRectangleTextureId; | 262 texture_id = kServiceDefaultRectangleTextureId; |
| 222 break; | 263 break; |
| 223 default: | 264 default: |
| 224 NOTREACHED(); | 265 NOTREACHED(); |
| 225 } | 266 } |
| 226 | 267 |
| 227 EXPECT_CALL(*gl, DeleteTextures(1, Pointee(texture_id))) | 268 EXPECT_CALL(*gl, DeleteTextures(1, Pointee(texture_id))) |
| 228 .Times(1) | 269 .Times(1) |
| 229 .RetiresOnSaturation(); | 270 .RetiresOnSaturation(); |
| 230 } | 271 } |
| 231 | 272 |
| 232 void TestHelper::SetupTextureManagerDestructionExpectations( | 273 void TestHelper::SetupTextureManagerDestructionExpectations( |
| 233 ::gfx::MockGLInterface* gl, | 274 ::gfx::MockGLInterface* gl, |
| 275 const char* gl_version, | |
|
Zhenyao Mo
2015/09/14 21:12:06
same here.
qiankun
2015/09/15 09:14:58
Done.
| |
| 234 const char* extensions, | 276 const char* extensions, |
| 235 bool use_default_textures) { | 277 bool use_default_textures) { |
| 236 SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures); | 278 SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures); |
| 237 SetupTextureDestructionExpectations( | 279 SetupTextureDestructionExpectations( |
| 238 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); | 280 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); |
| 239 | 281 |
| 282 gfx::GLVersionInfo gl_info(gl_version, "", extensions); | |
| 283 | |
| 284 if (gl_info.is_es3) { | |
| 285 SetupTextureDestructionExpectations( | |
| 286 gl, GL_TEXTURE_3D, use_default_textures); | |
| 287 SetupTextureDestructionExpectations( | |
| 288 gl, GL_TEXTURE_2D_ARRAY,use_default_textures); | |
| 289 } | |
| 290 | |
| 240 bool ext_image_external = false; | 291 bool ext_image_external = false; |
| 241 bool arb_texture_rectangle = false; | 292 bool arb_texture_rectangle = false; |
| 242 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); | 293 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); |
| 243 while (t.GetNext()) { | 294 while (t.GetNext()) { |
| 244 if (t.token() == "GL_OES_EGL_image_external") { | 295 if (t.token() == "GL_OES_EGL_image_external") { |
| 245 ext_image_external = true; | 296 ext_image_external = true; |
| 246 break; | 297 break; |
| 247 } | 298 } |
| 248 if (t.token() == "GL_ARB_texture_rectangle") { | 299 if (t.token() == "GL_ARB_texture_rectangle") { |
| 249 arb_texture_rectangle = true; | 300 arb_texture_rectangle = true; |
| 250 break; | 301 break; |
| 251 } | 302 } |
| 252 } | 303 } |
| 253 | 304 |
| 254 if (ext_image_external) { | 305 if (ext_image_external) { |
| 255 SetupTextureDestructionExpectations( | 306 SetupTextureDestructionExpectations( |
| 256 gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures); | 307 gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures); |
| 257 } | 308 } |
| 258 if (arb_texture_rectangle) { | 309 if (arb_texture_rectangle) { |
| 259 SetupTextureDestructionExpectations( | 310 SetupTextureDestructionExpectations( |
| 260 gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures); | 311 gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures); |
| 261 } | 312 } |
| 262 | 313 |
| 263 EXPECT_CALL(*gl, DeleteTextures(4, _)) | 314 EXPECT_CALL(*gl, DeleteTextures(6, _)) |
| 264 .Times(1) | 315 .Times(1) |
| 265 .RetiresOnSaturation(); | 316 .RetiresOnSaturation(); |
| 266 } | 317 } |
| 267 | 318 |
| 268 void TestHelper::SetupContextGroupInitExpectations( | 319 void TestHelper::SetupContextGroupInitExpectations( |
| 269 ::gfx::MockGLInterface* gl, | 320 ::gfx::MockGLInterface* gl, |
| 270 const DisallowedFeatures& disallowed_features, | 321 const DisallowedFeatures& disallowed_features, |
| 271 const char* extensions, | 322 const char* extensions, |
| 272 const char* gl_version, | 323 const char* gl_version, |
| 273 bool bind_generates_resource) { | 324 bool bind_generates_resource) { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 336 .RetiresOnSaturation(); | 387 .RetiresOnSaturation(); |
| 337 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VARYING_FLOATS, _)) | 388 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VARYING_FLOATS, _)) |
| 338 .WillOnce(SetArgumentPointee<1>(kMaxVaryingFloats)) | 389 .WillOnce(SetArgumentPointee<1>(kMaxVaryingFloats)) |
| 339 .RetiresOnSaturation(); | 390 .RetiresOnSaturation(); |
| 340 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, _)) | 391 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, _)) |
| 341 .WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents)) | 392 .WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents)) |
| 342 .RetiresOnSaturation(); | 393 .RetiresOnSaturation(); |
| 343 } | 394 } |
| 344 | 395 |
| 345 bool use_default_textures = bind_generates_resource; | 396 bool use_default_textures = bind_generates_resource; |
| 346 SetupTextureManagerInitExpectations(gl, extensions, use_default_textures); | 397 SetupTextureManagerInitExpectations( |
| 398 gl, gl_version, extensions, use_default_textures); | |
| 347 } | 399 } |
| 348 | 400 |
| 349 void TestHelper::SetupFeatureInfoInitExpectations( | 401 void TestHelper::SetupFeatureInfoInitExpectations( |
| 350 ::gfx::MockGLInterface* gl, const char* extensions) { | 402 ::gfx::MockGLInterface* gl, const char* extensions) { |
| 351 SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", ""); | 403 SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", ""); |
| 352 } | 404 } |
| 353 | 405 |
| 354 void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( | 406 void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( |
| 355 ::gfx::MockGLInterface* gl, | 407 ::gfx::MockGLInterface* gl, |
| 356 const char* extensions, | 408 const char* extensions, |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 877 gfx::SetGLImplementation(implementation); | 929 gfx::SetGLImplementation(implementation); |
| 878 } | 930 } |
| 879 | 931 |
| 880 ScopedGLImplementationSetter::~ScopedGLImplementationSetter() { | 932 ScopedGLImplementationSetter::~ScopedGLImplementationSetter() { |
| 881 gfx::SetGLImplementation(old_implementation_); | 933 gfx::SetGLImplementation(old_implementation_); |
| 882 } | 934 } |
| 883 | 935 |
| 884 } // namespace gles2 | 936 } // namespace gles2 |
| 885 } // namespace gpu | 937 } // namespace gpu |
| 886 | 938 |
| OLD | NEW |