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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include "gpu/command_buffer/service/error_state_mock.h" | 8 #include "gpu/command_buffer/service/error_state_mock.h" |
| 9 #include "gpu/command_buffer/service/feature_info.h" | 9 #include "gpu/command_buffer/service/feature_info.h" |
| 10 #include "gpu/command_buffer/service/framebuffer_manager.h" | 10 #include "gpu/command_buffer/service/framebuffer_manager.h" |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 | 198 |
| 199 TEST_F(FramebufferInfoTest, AttachRenderbuffer) { | 199 TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| 200 const GLuint kRenderbufferClient1Id = 33; | 200 const GLuint kRenderbufferClient1Id = 33; |
| 201 const GLuint kRenderbufferService1Id = 333; | 201 const GLuint kRenderbufferService1Id = 333; |
| 202 const GLuint kRenderbufferClient2Id = 34; | 202 const GLuint kRenderbufferClient2Id = 34; |
| 203 const GLuint kRenderbufferService2Id = 334; | 203 const GLuint kRenderbufferService2Id = 334; |
| 204 const GLuint kRenderbufferClient3Id = 35; | 204 const GLuint kRenderbufferClient3Id = 35; |
| 205 const GLuint kRenderbufferService3Id = 335; | 205 const GLuint kRenderbufferService3Id = 335; |
| 206 const GLuint kRenderbufferClient4Id = 36; | 206 const GLuint kRenderbufferClient4Id = 36; |
| 207 const GLuint kRenderbufferService4Id = 336; | 207 const GLuint kRenderbufferService4Id = 336; |
| 208 const GLuint kRenderbufferClient5Id = 37; | |
| 209 const GLuint kRenderbufferService5Id = 337; | |
| 208 const GLsizei kWidth1 = 16; | 210 const GLsizei kWidth1 = 16; |
| 209 const GLsizei kHeight1 = 32; | 211 const GLsizei kHeight1 = 32; |
| 210 const GLenum kFormat1 = GL_RGBA4; | 212 const GLenum kFormat1 = GL_RGBA4; |
| 211 const GLenum kBadFormat1 = GL_DEPTH_COMPONENT16; | 213 const GLenum kBadFormat1 = GL_DEPTH_COMPONENT16; |
| 212 const GLsizei kSamples1 = 0; | 214 const GLsizei kSamples1 = 0; |
| 213 const GLsizei kWidth2 = 16; | 215 const GLsizei kWidth2 = 16; |
| 214 const GLsizei kHeight2 = 32; | 216 const GLsizei kHeight2 = 32; |
| 215 const GLenum kFormat2 = GL_DEPTH_COMPONENT16; | 217 const GLenum kFormat2 = GL_DEPTH_COMPONENT16; |
| 216 const GLsizei kSamples2 = 0; | 218 const GLsizei kSamples2 = 0; |
| 217 const GLsizei kWidth3 = 16; | 219 const GLsizei kWidth3 = 16; |
| 218 const GLsizei kHeight3 = 32; | 220 const GLsizei kHeight3 = 32; |
| 219 const GLenum kFormat3 = GL_STENCIL_INDEX8; | 221 const GLenum kFormat3 = GL_STENCIL_INDEX8; |
| 220 const GLsizei kSamples3 = 0; | 222 const GLsizei kSamples3 = 0; |
| 221 const GLsizei kWidth4 = 16; | 223 const GLsizei kWidth4 = 16; |
| 222 const GLsizei kHeight4 = 32; | 224 const GLsizei kHeight4 = 32; |
| 223 const GLenum kFormat4 = GL_STENCIL_INDEX8; | 225 const GLenum kFormat4 = GL_DEPTH24_STENCIL8; |
| 224 const GLsizei kSamples4 = 0; | 226 const GLsizei kSamples4 = 0; |
| 225 const GLsizei kDifferentSamples4 = 1; | 227 const GLsizei kWidth5 = 16; |
| 228 const GLsizei kHeight5 = 32; | |
| 229 const GLenum kFormat5 = GL_DEPTH24_STENCIL8; | |
| 230 const GLsizei kSamples5 = 0; | |
| 231 const GLsizei kDifferentSamples5 = 1; | |
| 226 | 232 |
| 227 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); | 233 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| 228 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); | 234 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| 229 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); | 235 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| 230 EXPECT_FALSE( | 236 EXPECT_FALSE( |
| 231 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); | 237 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); |
| 232 | 238 |
| 233 renderbuffer_manager_->CreateRenderbuffer( | 239 renderbuffer_manager_->CreateRenderbuffer( |
| 234 kRenderbufferClient1Id, kRenderbufferService1Id); | 240 kRenderbufferClient1Id, kRenderbufferService1Id); |
| 235 Renderbuffer* renderbuffer1 = | 241 Renderbuffer* renderbuffer1 = |
| 236 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id); | 242 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id); |
| 237 ASSERT_TRUE(renderbuffer1 != NULL); | 243 ASSERT_TRUE(renderbuffer1 != NULL); |
| 238 | 244 |
| 239 // check adding one attachment | 245 // Check adding one attachment. |
| 240 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); | 246 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); |
| 241 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); | 247 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| 242 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); | 248 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| 243 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4), | 249 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4), |
| 244 framebuffer_->GetReadBufferInternalFormat()); | 250 framebuffer_->GetReadBufferInternalFormat()); |
| 245 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); | 251 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); |
| 246 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); | 252 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| 247 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), | 253 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| 248 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 254 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 249 EXPECT_TRUE(framebuffer_->IsCleared()); | 255 EXPECT_TRUE(framebuffer_->IsCleared()); |
| 250 | 256 |
| 251 // Try a format that's not good for COLOR_ATTACHMENT0. | 257 // Try a format that's not good for COLOR_ATTACHMENT0. |
| 252 renderbuffer_manager_->SetInfo( | 258 renderbuffer_manager_->SetInfo( |
| 253 renderbuffer1, kSamples1, kBadFormat1, kWidth1, kHeight1); | 259 renderbuffer1, kSamples1, kBadFormat1, kWidth1, kHeight1); |
| 254 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), | 260 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| 255 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 261 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 256 | 262 |
| 257 // Try a good format. | 263 // Try a good format. |
| 258 renderbuffer_manager_->SetInfo( | 264 renderbuffer_manager_->SetInfo( |
| 259 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); | 265 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); |
| 260 EXPECT_EQ(static_cast<GLenum>(kFormat1), | 266 EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| 261 framebuffer_->GetReadBufferInternalFormat()); | 267 framebuffer_->GetReadBufferInternalFormat()); |
| 262 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); | 268 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); |
| 263 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); | 269 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| 264 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 270 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 265 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 271 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 266 EXPECT_FALSE(framebuffer_->IsCleared()); | 272 EXPECT_FALSE(framebuffer_->IsCleared()); |
| 267 | 273 |
| 268 // check adding another | 274 // Check adding another. |
| 269 renderbuffer_manager_->CreateRenderbuffer( | 275 renderbuffer_manager_->CreateRenderbuffer( |
| 270 kRenderbufferClient2Id, kRenderbufferService2Id); | 276 kRenderbufferClient2Id, kRenderbufferService2Id); |
| 271 Renderbuffer* renderbuffer2 = | 277 Renderbuffer* renderbuffer2 = |
| 272 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient2Id); | 278 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient2Id); |
| 273 ASSERT_TRUE(renderbuffer2 != NULL); | 279 ASSERT_TRUE(renderbuffer2 != NULL); |
| 274 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2); | 280 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2); |
| 275 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); | 281 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| 276 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); | 282 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| 277 EXPECT_EQ(static_cast<GLenum>(kFormat1), | 283 EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| 278 framebuffer_->GetReadBufferInternalFormat()); | 284 framebuffer_->GetReadBufferInternalFormat()); |
| 279 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); | 285 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| 280 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); | 286 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| 281 // The attachment has a size of 0,0 so depending on the order of the map | 287 // The attachment has a size of 0,0 so depending on the order of the map |
| 282 // of attachments it could either get INCOMPLETE_ATTACHMENT because it's 0,0 | 288 // of attachments it could either get INCOMPLETE_ATTACHMENT because it's 0,0 |
| 283 // or INCOMPLETE_DIMENSIONS because it's not the same size as the other | 289 // or INCOMPLETE_DIMENSIONS because it's not the same size as the other |
| 284 // attachment. | 290 // attachment. |
| 285 GLenum status = framebuffer_->IsPossiblyComplete(feature_info_.get()); | 291 GLenum status = framebuffer_->IsPossiblyComplete(feature_info_.get()); |
| 286 EXPECT_TRUE( | 292 EXPECT_TRUE( |
| 287 status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT || | 293 status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT || |
| 288 status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT); | 294 status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT); |
| 289 EXPECT_FALSE(framebuffer_->IsCleared()); | 295 EXPECT_FALSE(framebuffer_->IsCleared()); |
| 290 | 296 |
| 291 renderbuffer_manager_->SetInfo( | 297 renderbuffer_manager_->SetInfo( |
| 292 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2); | 298 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2); |
| 293 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 299 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 294 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 300 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 295 EXPECT_FALSE(framebuffer_->IsCleared()); | 301 EXPECT_FALSE(framebuffer_->IsCleared()); |
| 296 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); | 302 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| 297 | 303 |
| 298 // check marking them as cleared. | 304 // Check marking them as cleared. |
| 299 manager_.MarkAttachmentsAsCleared( | 305 manager_.MarkAttachmentsAsCleared( |
| 300 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get()); | 306 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get()); |
| 301 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); | 307 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| 302 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); | 308 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| 303 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 309 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 304 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 310 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 305 EXPECT_TRUE(framebuffer_->IsCleared()); | 311 EXPECT_TRUE(framebuffer_->IsCleared()); |
| 306 | 312 |
| 307 // Check adding one that is already cleared. | 313 // Add another one to stencil attachment point. |
| 308 renderbuffer_manager_->CreateRenderbuffer( | 314 renderbuffer_manager_->CreateRenderbuffer( |
| 309 kRenderbufferClient3Id, kRenderbufferService3Id); | 315 kRenderbufferClient3Id, kRenderbufferService3Id); |
| 310 Renderbuffer* renderbuffer3 = | 316 Renderbuffer* renderbuffer3 = |
| 311 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient3Id); | 317 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient3Id); |
| 312 ASSERT_TRUE(renderbuffer3 != NULL); | 318 ASSERT_TRUE(renderbuffer3 != NULL); |
| 313 renderbuffer_manager_->SetInfo( | 319 renderbuffer_manager_->SetInfo( |
| 314 renderbuffer3, kSamples3, kFormat3, kWidth3, kHeight3); | 320 renderbuffer3, kSamples3, kFormat3, kWidth3, kHeight3); |
| 315 renderbuffer_manager_->SetCleared(renderbuffer3, true); | 321 renderbuffer_manager_->SetCleared(renderbuffer3, true); |
| 316 | 322 |
| 317 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer3); | 323 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer3); |
| 318 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); | 324 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| 319 EXPECT_EQ(static_cast<GLenum>(kFormat1), | 325 EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| 320 framebuffer_->GetReadBufferInternalFormat()); | 326 framebuffer_->GetReadBufferInternalFormat()); |
| 321 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); | 327 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| 322 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); | 328 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); |
| 329 // Binding different images to depth and stencil attachment points should | |
| 330 // return FRAMEBUFFER_UNSUPPORTED. | |
| 331 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_UNSUPPORTED), | |
| 332 framebuffer_->IsPossiblyComplete(feature_info_.get())); | |
| 333 EXPECT_TRUE(framebuffer_->IsCleared()); | |
|
qiankun
2016/07/21 09:29:21
We don't need to check isCleared for unsupported f
| |
| 334 | |
| 335 // Bind a renderbufer in format DEPTH_STENCIL to depth and stencil | |
|
qiankun
2016/07/21 09:29:21
typo: renderbuffer
| |
| 336 // attachment points. | |
| 337 renderbuffer_manager_->CreateRenderbuffer( | |
| 338 kRenderbufferClient4Id, kRenderbufferService4Id); | |
| 339 Renderbuffer* renderbuffer4 = | |
| 340 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient4Id); | |
| 341 ASSERT_TRUE(renderbuffer4 != NULL); | |
| 342 renderbuffer_manager_->SetInfo( | |
| 343 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); | |
| 344 renderbuffer_manager_->SetCleared(renderbuffer4, true); | |
| 345 | |
| 346 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); | |
| 347 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); | |
| 348 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer4); | |
| 349 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4); | |
| 350 EXPECT_EQ(static_cast<GLenum>(kFormat1), | |
| 351 framebuffer_->GetReadBufferInternalFormat()); | |
| 352 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); | |
| 353 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); | |
| 323 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 354 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 324 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 355 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 325 EXPECT_TRUE(framebuffer_->IsCleared()); | 356 EXPECT_TRUE(framebuffer_->IsCleared()); |
| 326 | 357 |
| 327 // Check marking the renderbuffer as unclared. | 358 // Check marking the renderbuffer as uncleared. |
| 328 renderbuffer_manager_->SetInfo( | 359 renderbuffer_manager_->SetInfo( |
| 329 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); | 360 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); |
| 330 EXPECT_EQ(static_cast<GLenum>(kFormat1), | 361 EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| 331 framebuffer_->GetReadBufferInternalFormat()); | 362 framebuffer_->GetReadBufferInternalFormat()); |
| 332 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); | 363 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| 333 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); | 364 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); |
| 334 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 365 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 335 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 366 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 336 EXPECT_FALSE(framebuffer_->IsCleared()); | 367 EXPECT_FALSE(framebuffer_->IsCleared()); |
| 337 | 368 |
| 338 const Framebuffer::Attachment* attachment = | 369 const Framebuffer::Attachment* attachment = |
| 339 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); | 370 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); |
| 340 ASSERT_TRUE(attachment != NULL); | 371 ASSERT_TRUE(attachment != NULL); |
| 341 EXPECT_EQ(kWidth1, attachment->width()); | 372 EXPECT_EQ(kWidth1, attachment->width()); |
| 342 EXPECT_EQ(kHeight1, attachment->height()); | 373 EXPECT_EQ(kHeight1, attachment->height()); |
| 343 EXPECT_EQ(kSamples1, attachment->samples()); | 374 EXPECT_EQ(kSamples1, attachment->samples()); |
| 344 EXPECT_EQ(kFormat1, attachment->internal_format()); | 375 EXPECT_EQ(kFormat1, attachment->internal_format()); |
| 345 EXPECT_FALSE(attachment->cleared()); | 376 EXPECT_FALSE(attachment->cleared()); |
| 346 | 377 |
| 347 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); | 378 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| 348 | 379 |
| 349 // Clear it. | 380 // Clear it. |
| 350 manager_.MarkAttachmentsAsCleared( | 381 manager_.MarkAttachmentsAsCleared( |
| 351 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get()); | 382 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get()); |
| 352 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); | 383 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| 353 EXPECT_TRUE(framebuffer_->IsCleared()); | 384 EXPECT_TRUE(framebuffer_->IsCleared()); |
| 354 | 385 |
| 355 // Check replacing an attachment | 386 // Check replacing one attachment when both depth and stencil attachments |
| 387 // are present. | |
| 356 renderbuffer_manager_->CreateRenderbuffer( | 388 renderbuffer_manager_->CreateRenderbuffer( |
| 357 kRenderbufferClient4Id, kRenderbufferService4Id); | 389 kRenderbufferClient5Id, kRenderbufferService5Id); |
| 358 Renderbuffer* renderbuffer4 = | 390 Renderbuffer* renderbuffer5 = |
| 359 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient4Id); | 391 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient5Id); |
| 360 ASSERT_TRUE(renderbuffer4 != NULL); | 392 ASSERT_TRUE(renderbuffer5 != NULL); |
| 361 renderbuffer_manager_->SetInfo( | 393 renderbuffer_manager_->SetInfo( |
| 362 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); | 394 renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5); |
| 363 | 395 |
| 364 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4); | 396 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer5); |
| 365 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); | 397 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| 366 EXPECT_FALSE(framebuffer_->IsCleared()); | 398 EXPECT_FALSE(framebuffer_->IsCleared()); |
| 367 | 399 |
| 368 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); | 400 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); |
| 369 ASSERT_TRUE(attachment != NULL); | 401 ASSERT_TRUE(attachment != NULL); |
| 370 EXPECT_EQ(kWidth4, attachment->width()); | 402 EXPECT_EQ(kWidth5, attachment->width()); |
| 371 EXPECT_EQ(kHeight4, attachment->height()); | 403 EXPECT_EQ(kHeight5, attachment->height()); |
| 372 EXPECT_EQ(kSamples4, attachment->samples()); | 404 EXPECT_EQ(kSamples5, attachment->samples()); |
| 373 EXPECT_EQ(kFormat4, attachment->internal_format()); | 405 EXPECT_EQ(kFormat5, attachment->internal_format()); |
| 406 EXPECT_FALSE(attachment->cleared()); | |
| 407 // Binding different images to depth and stencil attachment points should | |
| 408 // return FRAMEBUFFER_UNSUPPORTED. | |
| 409 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_UNSUPPORTED), | |
| 410 framebuffer_->IsPossiblyComplete(feature_info_.get())); | |
| 411 | |
| 412 // Check replacing both depth and stencil attachments. | |
| 413 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer5); | |
| 414 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); | |
| 415 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); | |
| 416 EXPECT_FALSE(framebuffer_->IsCleared()); | |
| 417 | |
| 418 attachment = framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT); | |
| 419 EXPECT_EQ(kWidth5, attachment->width()); | |
| 420 EXPECT_EQ(kHeight5, attachment->height()); | |
| 421 EXPECT_EQ(kSamples5, attachment->samples()); | |
| 422 EXPECT_EQ(kFormat5, attachment->internal_format()); | |
| 374 EXPECT_FALSE(attachment->cleared()); | 423 EXPECT_FALSE(attachment->cleared()); |
| 375 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 424 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 376 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 425 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 377 | 426 |
| 378 // Change samples. | 427 // Change samples. |
| 379 ASSERT_FALSE( | 428 ASSERT_FALSE( |
| 380 feature_info_->feature_flags().chromium_framebuffer_mixed_samples); | 429 feature_info_->feature_flags().chromium_framebuffer_mixed_samples); |
| 381 renderbuffer_manager_->SetInfo( | 430 renderbuffer_manager_->SetInfo( |
| 382 renderbuffer4, kDifferentSamples4, kFormat4, kWidth4, kHeight4); | 431 renderbuffer5, kDifferentSamples5, kFormat5, kWidth5, kHeight5); |
| 383 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE), | 432 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE), |
| 384 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 433 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 385 renderbuffer_manager_->SetInfo( | 434 renderbuffer_manager_->SetInfo( |
| 386 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); | 435 renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5); |
| 387 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 436 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 388 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 437 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 389 | 438 |
| 390 // Check changing an attachment. | 439 // Check changing an attachment. |
| 391 renderbuffer_manager_->SetInfo( | 440 renderbuffer_manager_->SetInfo( |
| 392 renderbuffer4, kSamples4, kFormat4, kWidth4 + 1, kHeight4); | 441 renderbuffer5, kSamples5, kFormat5, kWidth5 + 1, kHeight5); |
| 393 | 442 |
| 394 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); | 443 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); |
| 395 ASSERT_TRUE(attachment != NULL); | 444 ASSERT_TRUE(attachment != NULL); |
| 396 EXPECT_EQ(kWidth4 + 1, attachment->width()); | 445 EXPECT_EQ(kWidth5 + 1, attachment->width()); |
| 397 EXPECT_EQ(kHeight4, attachment->height()); | 446 EXPECT_EQ(kHeight5, attachment->height()); |
| 398 EXPECT_EQ(kSamples4, attachment->samples()); | 447 EXPECT_EQ(kSamples5, attachment->samples()); |
| 399 EXPECT_EQ(kFormat4, attachment->internal_format()); | 448 EXPECT_EQ(kFormat5, attachment->internal_format()); |
| 400 EXPECT_FALSE(attachment->cleared()); | 449 EXPECT_FALSE(attachment->cleared()); |
| 401 EXPECT_FALSE(framebuffer_->IsCleared()); | 450 EXPECT_FALSE(framebuffer_->IsCleared()); |
| 402 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT), | 451 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT), |
| 403 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 452 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 404 | 453 |
| 405 // Check removing it. | 454 // Check removing it. |
| 406 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL); | 455 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL); |
| 407 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); | 456 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| 408 EXPECT_EQ(static_cast<GLenum>(kFormat1), | 457 EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| 409 framebuffer_->GetReadBufferInternalFormat()); | 458 framebuffer_->GetReadBufferInternalFormat()); |
| 410 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); | 459 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| 411 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); | 460 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| 412 | 461 EXPECT_FALSE(framebuffer_->IsCleared()); |
| 413 EXPECT_TRUE(framebuffer_->IsCleared()); | 462 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT), |
|
qiankun
2016/07/21 09:29:21
After STENCIL attachment is removed, depth attachm
qiankun
2016/07/21 15:21:39
You should reply in the review context.
So the va
Jiawei
2016/07/22 00:38:55
After stencil attachment is removed, only depth at
| |
| 414 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | |
| 415 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 463 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 416 | 464 |
| 417 // Remove depth, Set color to 0 size. | 465 // Remove depth, Set color to 0 size. |
| 418 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, NULL); | 466 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, NULL); |
| 419 renderbuffer_manager_->SetInfo(renderbuffer1, kSamples1, kFormat1, 0, 0); | 467 renderbuffer_manager_->SetInfo(renderbuffer1, kSamples1, kFormat1, 0, 0); |
| 420 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), | 468 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| 421 framebuffer_->IsPossiblyComplete(feature_info_.get())); | 469 framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| 422 | 470 |
| 423 // Remove color. | 471 // Remove color. |
| 424 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, NULL); | 472 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, NULL); |
| (...skipping 1181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1606 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId); | 1654 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId); |
| 1607 ASSERT_TRUE(renderbuffer != NULL); | 1655 ASSERT_TRUE(renderbuffer != NULL); |
| 1608 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer); | 1656 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer); |
| 1609 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment()); | 1657 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment()); |
| 1610 } | 1658 } |
| 1611 | 1659 |
| 1612 } // namespace gles2 | 1660 } // namespace gles2 |
| 1613 } // namespace gpu | 1661 } // namespace gpu |
| 1614 | 1662 |
| 1615 | 1663 |
| OLD | NEW |