| 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 bool is_es3_enabled, |
| 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 |
| 173 SetupTextureInitializationExpectations( | 199 SetupTextureInitializationExpectations( |
| 174 gl, GL_TEXTURE_2D, use_default_textures); | 200 gl, GL_TEXTURE_2D, use_default_textures); |
| 175 SetupTextureInitializationExpectations( | 201 SetupTextureInitializationExpectations( |
| 176 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); | 202 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); |
| 177 | 203 |
| 204 if (is_es3_enabled) { |
| 205 SetupTextureInitializationExpectations( |
| 206 gl, GL_TEXTURE_3D, use_default_textures); |
| 207 SetupTextureInitializationExpectations( |
| 208 gl, GL_TEXTURE_2D_ARRAY, use_default_textures); |
| 209 } |
| 210 |
| 178 bool ext_image_external = false; | 211 bool ext_image_external = false; |
| 179 bool arb_texture_rectangle = false; | 212 bool arb_texture_rectangle = false; |
| 180 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); | 213 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); |
| 181 while (t.GetNext()) { | 214 while (t.GetNext()) { |
| 182 if (t.token() == "GL_OES_EGL_image_external") { | 215 if (t.token() == "GL_OES_EGL_image_external") { |
| 183 ext_image_external = true; | 216 ext_image_external = true; |
| 184 break; | 217 break; |
| 185 } | 218 } |
| 186 if (t.token() == "GL_ARB_texture_rectangle") { | 219 if (t.token() == "GL_ARB_texture_rectangle") { |
| 187 arb_texture_rectangle = true; | 220 arb_texture_rectangle = true; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 204 GLenum target, | 237 GLenum target, |
| 205 bool use_default_textures) { | 238 bool use_default_textures) { |
| 206 if (!use_default_textures) | 239 if (!use_default_textures) |
| 207 return; | 240 return; |
| 208 | 241 |
| 209 GLuint texture_id = 0; | 242 GLuint texture_id = 0; |
| 210 switch (target) { | 243 switch (target) { |
| 211 case GL_TEXTURE_2D: | 244 case GL_TEXTURE_2D: |
| 212 texture_id = kServiceDefaultTexture2dId; | 245 texture_id = kServiceDefaultTexture2dId; |
| 213 break; | 246 break; |
| 247 case GL_TEXTURE_3D: |
| 248 texture_id = kServiceDefaultTexture3dId; |
| 249 break; |
| 250 case GL_TEXTURE_2D_ARRAY: |
| 251 texture_id = kServiceDefaultTexture2dArrayId; |
| 252 break; |
| 214 case GL_TEXTURE_CUBE_MAP: | 253 case GL_TEXTURE_CUBE_MAP: |
| 215 texture_id = kServiceDefaultTextureCubemapId; | 254 texture_id = kServiceDefaultTextureCubemapId; |
| 216 break; | 255 break; |
| 217 case GL_TEXTURE_EXTERNAL_OES: | 256 case GL_TEXTURE_EXTERNAL_OES: |
| 218 texture_id = kServiceDefaultExternalTextureId; | 257 texture_id = kServiceDefaultExternalTextureId; |
| 219 break; | 258 break; |
| 220 case GL_TEXTURE_RECTANGLE_ARB: | 259 case GL_TEXTURE_RECTANGLE_ARB: |
| 221 texture_id = kServiceDefaultRectangleTextureId; | 260 texture_id = kServiceDefaultRectangleTextureId; |
| 222 break; | 261 break; |
| 223 default: | 262 default: |
| 224 NOTREACHED(); | 263 NOTREACHED(); |
| 225 } | 264 } |
| 226 | 265 |
| 227 EXPECT_CALL(*gl, DeleteTextures(1, Pointee(texture_id))) | 266 EXPECT_CALL(*gl, DeleteTextures(1, Pointee(texture_id))) |
| 228 .Times(1) | 267 .Times(1) |
| 229 .RetiresOnSaturation(); | 268 .RetiresOnSaturation(); |
| 230 } | 269 } |
| 231 | 270 |
| 232 void TestHelper::SetupTextureManagerDestructionExpectations( | 271 void TestHelper::SetupTextureManagerDestructionExpectations( |
| 233 ::gfx::MockGLInterface* gl, | 272 ::gfx::MockGLInterface* gl, |
| 273 bool is_es3_enabled, |
| 234 const char* extensions, | 274 const char* extensions, |
| 235 bool use_default_textures) { | 275 bool use_default_textures) { |
| 236 SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures); | 276 SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures); |
| 237 SetupTextureDestructionExpectations( | 277 SetupTextureDestructionExpectations( |
| 238 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); | 278 gl, GL_TEXTURE_CUBE_MAP, use_default_textures); |
| 239 | 279 |
| 280 if (is_es3_enabled) { |
| 281 SetupTextureDestructionExpectations( |
| 282 gl, GL_TEXTURE_3D, use_default_textures); |
| 283 SetupTextureDestructionExpectations( |
| 284 gl, GL_TEXTURE_2D_ARRAY,use_default_textures); |
| 285 } |
| 286 |
| 240 bool ext_image_external = false; | 287 bool ext_image_external = false; |
| 241 bool arb_texture_rectangle = false; | 288 bool arb_texture_rectangle = false; |
| 242 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); | 289 base::CStringTokenizer t(extensions, extensions + strlen(extensions), " "); |
| 243 while (t.GetNext()) { | 290 while (t.GetNext()) { |
| 244 if (t.token() == "GL_OES_EGL_image_external") { | 291 if (t.token() == "GL_OES_EGL_image_external") { |
| 245 ext_image_external = true; | 292 ext_image_external = true; |
| 246 break; | 293 break; |
| 247 } | 294 } |
| 248 if (t.token() == "GL_ARB_texture_rectangle") { | 295 if (t.token() == "GL_ARB_texture_rectangle") { |
| 249 arb_texture_rectangle = true; | 296 arb_texture_rectangle = true; |
| 250 break; | 297 break; |
| 251 } | 298 } |
| 252 } | 299 } |
| 253 | 300 |
| 254 if (ext_image_external) { | 301 if (ext_image_external) { |
| 255 SetupTextureDestructionExpectations( | 302 SetupTextureDestructionExpectations( |
| 256 gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures); | 303 gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures); |
| 257 } | 304 } |
| 258 if (arb_texture_rectangle) { | 305 if (arb_texture_rectangle) { |
| 259 SetupTextureDestructionExpectations( | 306 SetupTextureDestructionExpectations( |
| 260 gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures); | 307 gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures); |
| 261 } | 308 } |
| 262 | 309 |
| 263 EXPECT_CALL(*gl, DeleteTextures(4, _)) | 310 EXPECT_CALL(*gl, DeleteTextures(TextureManager::kNumDefaultTextures, _)) |
| 264 .Times(1) | 311 .Times(1) |
| 265 .RetiresOnSaturation(); | 312 .RetiresOnSaturation(); |
| 266 } | 313 } |
| 267 | 314 |
| 268 void TestHelper::SetupContextGroupInitExpectations( | 315 void TestHelper::SetupContextGroupInitExpectations( |
| 269 ::gfx::MockGLInterface* gl, | 316 ::gfx::MockGLInterface* gl, |
| 270 const DisallowedFeatures& disallowed_features, | 317 const DisallowedFeatures& disallowed_features, |
| 271 const char* extensions, | 318 const char* extensions, |
| 272 const char* gl_version, | 319 const char* gl_version, |
| 273 bool bind_generates_resource) { | 320 bool bind_generates_resource) { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 .RetiresOnSaturation(); | 383 .RetiresOnSaturation(); |
| 337 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VARYING_FLOATS, _)) | 384 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VARYING_FLOATS, _)) |
| 338 .WillOnce(SetArgumentPointee<1>(kMaxVaryingFloats)) | 385 .WillOnce(SetArgumentPointee<1>(kMaxVaryingFloats)) |
| 339 .RetiresOnSaturation(); | 386 .RetiresOnSaturation(); |
| 340 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, _)) | 387 EXPECT_CALL(*gl, GetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, _)) |
| 341 .WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents)) | 388 .WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents)) |
| 342 .RetiresOnSaturation(); | 389 .RetiresOnSaturation(); |
| 343 } | 390 } |
| 344 | 391 |
| 345 bool use_default_textures = bind_generates_resource; | 392 bool use_default_textures = bind_generates_resource; |
| 346 SetupTextureManagerInitExpectations(gl, extensions, use_default_textures); | 393 SetupTextureManagerInitExpectations( |
| 394 gl, false, extensions, use_default_textures); |
| 347 } | 395 } |
| 348 | 396 |
| 349 void TestHelper::SetupFeatureInfoInitExpectations( | 397 void TestHelper::SetupFeatureInfoInitExpectations( |
| 350 ::gfx::MockGLInterface* gl, const char* extensions) { | 398 ::gfx::MockGLInterface* gl, const char* extensions) { |
| 351 SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", ""); | 399 SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", ""); |
| 352 } | 400 } |
| 353 | 401 |
| 354 void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( | 402 void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( |
| 355 ::gfx::MockGLInterface* gl, | 403 ::gfx::MockGLInterface* gl, |
| 356 const char* extensions, | 404 const char* extensions, |
| (...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 gfx::SetGLImplementation(implementation); | 946 gfx::SetGLImplementation(implementation); |
| 899 } | 947 } |
| 900 | 948 |
| 901 ScopedGLImplementationSetter::~ScopedGLImplementationSetter() { | 949 ScopedGLImplementationSetter::~ScopedGLImplementationSetter() { |
| 902 gfx::SetGLImplementation(old_implementation_); | 950 gfx::SetGLImplementation(old_implementation_); |
| 903 } | 951 } |
| 904 | 952 |
| 905 } // namespace gles2 | 953 } // namespace gles2 |
| 906 } // namespace gpu | 954 } // namespace gpu |
| 907 | 955 |
| OLD | NEW |