Chromium Code Reviews| Index: gpu/command_buffer/service/framebuffer_manager_unittest.cc |
| diff --git a/gpu/command_buffer/service/framebuffer_manager_unittest.cc b/gpu/command_buffer/service/framebuffer_manager_unittest.cc |
| index cffebd857ec224650193c02768032cd4bcef8df7..1f556d921a6730bbee5d7fab93935ab6ab97ef8e 100644 |
| --- a/gpu/command_buffer/service/framebuffer_manager_unittest.cc |
| +++ b/gpu/command_buffer/service/framebuffer_manager_unittest.cc |
| @@ -205,6 +205,8 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| const GLuint kRenderbufferService3Id = 335; |
| const GLuint kRenderbufferClient4Id = 36; |
| const GLuint kRenderbufferService4Id = 336; |
| + const GLuint kRenderbufferClient5Id = 37; |
| + const GLuint kRenderbufferService5Id = 337; |
| const GLsizei kWidth1 = 16; |
| const GLsizei kHeight1 = 32; |
| const GLenum kFormat1 = GL_RGBA4; |
| @@ -220,9 +222,13 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| const GLsizei kSamples3 = 0; |
| const GLsizei kWidth4 = 16; |
| const GLsizei kHeight4 = 32; |
| - const GLenum kFormat4 = GL_STENCIL_INDEX8; |
| + const GLenum kFormat4 = GL_DEPTH24_STENCIL8; |
| const GLsizei kSamples4 = 0; |
| - const GLsizei kDifferentSamples4 = 1; |
| + const GLsizei kWidth5 = 16; |
| + const GLsizei kHeight5 = 32; |
| + const GLenum kFormat5 = GL_DEPTH24_STENCIL8; |
| + const GLsizei kSamples5 = 0; |
| + const GLsizei kDifferentSamples5 = 1; |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| @@ -236,7 +242,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id); |
| ASSERT_TRUE(renderbuffer1 != NULL); |
| - // check adding one attachment |
| + // Check adding one attachment. |
| framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| @@ -265,7 +271,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| - // check adding another |
| + // Check adding another. |
| renderbuffer_manager_->CreateRenderbuffer( |
| kRenderbufferClient2Id, kRenderbufferService2Id); |
| Renderbuffer* renderbuffer2 = |
| @@ -295,7 +301,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| - // check marking them as cleared. |
| + // Check marking them as cleared. |
| manager_.MarkAttachmentsAsCleared( |
| framebuffer_, renderbuffer_manager_.get(), texture_manager_.get()); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| @@ -304,7 +310,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| - // Check adding one that is already cleared. |
| + // Add another one to stencil attachment point. |
| renderbuffer_manager_->CreateRenderbuffer( |
| kRenderbufferClient3Id, kRenderbufferService3Id); |
| Renderbuffer* renderbuffer3 = |
| @@ -320,11 +326,36 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| framebuffer_->GetReadBufferInternalFormat()); |
| EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| EXPECT_TRUE(framebuffer_->HasStencilAttachment()); |
| + // Binding different images to depth and stencil attachment points should |
| + // return FRAMEBUFFER_UNSUPPORTED. |
| + EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_UNSUPPORTED), |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| + EXPECT_TRUE(framebuffer_->IsCleared()); |
|
qiankun
2016/07/21 09:29:21
We don't need to check isCleared for unsupported f
|
| + |
| + // Bind a renderbufer in format DEPTH_STENCIL to depth and stencil |
|
qiankun
2016/07/21 09:29:21
typo: renderbuffer
|
| + // attachment points. |
| + renderbuffer_manager_->CreateRenderbuffer( |
| + kRenderbufferClient4Id, kRenderbufferService4Id); |
| + Renderbuffer* renderbuffer4 = |
| + renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient4Id); |
| + ASSERT_TRUE(renderbuffer4 != NULL); |
| + renderbuffer_manager_->SetInfo( |
| + renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); |
| + renderbuffer_manager_->SetCleared(renderbuffer4, true); |
| + |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| + framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer4); |
| + framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4); |
| + EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| + framebuffer_->GetReadBufferInternalFormat()); |
| + EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| + EXPECT_TRUE(framebuffer_->HasStencilAttachment()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| - // Check marking the renderbuffer as unclared. |
| + // Check marking the renderbuffer as uncleared. |
| renderbuffer_manager_->SetInfo( |
| renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); |
| EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| @@ -352,25 +383,43 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| - // Check replacing an attachment |
| + // Check replacing one attachment when both depth and stencil attachments |
| + // are present. |
| renderbuffer_manager_->CreateRenderbuffer( |
| - kRenderbufferClient4Id, kRenderbufferService4Id); |
| - Renderbuffer* renderbuffer4 = |
| - renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient4Id); |
| - ASSERT_TRUE(renderbuffer4 != NULL); |
| + kRenderbufferClient5Id, kRenderbufferService5Id); |
| + Renderbuffer* renderbuffer5 = |
| + renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient5Id); |
| + ASSERT_TRUE(renderbuffer5 != NULL); |
| renderbuffer_manager_->SetInfo( |
| - renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); |
| + renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5); |
| - framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4); |
| + framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer5); |
| EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); |
| ASSERT_TRUE(attachment != NULL); |
| - EXPECT_EQ(kWidth4, attachment->width()); |
| - EXPECT_EQ(kHeight4, attachment->height()); |
| - EXPECT_EQ(kSamples4, attachment->samples()); |
| - EXPECT_EQ(kFormat4, attachment->internal_format()); |
| + EXPECT_EQ(kWidth5, attachment->width()); |
| + EXPECT_EQ(kHeight5, attachment->height()); |
| + EXPECT_EQ(kSamples5, attachment->samples()); |
| + EXPECT_EQ(kFormat5, attachment->internal_format()); |
| + EXPECT_FALSE(attachment->cleared()); |
| + // Binding different images to depth and stencil attachment points should |
| + // return FRAMEBUFFER_UNSUPPORTED. |
| + EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_UNSUPPORTED), |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| + |
| + // Check replacing both depth and stencil attachments. |
| + framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer5); |
| + EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| + EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| + EXPECT_FALSE(framebuffer_->IsCleared()); |
| + |
| + attachment = framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT); |
| + EXPECT_EQ(kWidth5, attachment->width()); |
| + EXPECT_EQ(kHeight5, attachment->height()); |
| + EXPECT_EQ(kSamples5, attachment->samples()); |
| + EXPECT_EQ(kFormat5, attachment->internal_format()); |
| EXPECT_FALSE(attachment->cleared()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| @@ -379,24 +428,24 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| ASSERT_FALSE( |
| feature_info_->feature_flags().chromium_framebuffer_mixed_samples); |
| renderbuffer_manager_->SetInfo( |
| - renderbuffer4, kDifferentSamples4, kFormat4, kWidth4, kHeight4); |
| + renderbuffer5, kDifferentSamples5, kFormat5, kWidth5, kHeight5); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE), |
| framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| renderbuffer_manager_->SetInfo( |
| - renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); |
| + renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Check changing an attachment. |
| renderbuffer_manager_->SetInfo( |
| - renderbuffer4, kSamples4, kFormat4, kWidth4 + 1, kHeight4); |
| + renderbuffer5, kSamples5, kFormat5, kWidth5 + 1, kHeight5); |
| attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); |
| ASSERT_TRUE(attachment != NULL); |
| - EXPECT_EQ(kWidth4 + 1, attachment->width()); |
| - EXPECT_EQ(kHeight4, attachment->height()); |
| - EXPECT_EQ(kSamples4, attachment->samples()); |
| - EXPECT_EQ(kFormat4, attachment->internal_format()); |
| + EXPECT_EQ(kWidth5 + 1, attachment->width()); |
| + EXPECT_EQ(kHeight5, attachment->height()); |
| + EXPECT_EQ(kSamples5, attachment->samples()); |
| + EXPECT_EQ(kFormat5, attachment->internal_format()); |
| EXPECT_FALSE(attachment->cleared()); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT), |
| @@ -409,9 +458,8 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| framebuffer_->GetReadBufferInternalFormat()); |
| EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| - |
| - EXPECT_TRUE(framebuffer_->IsCleared()); |
| - EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| + EXPECT_FALSE(framebuffer_->IsCleared()); |
| + 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
|
| framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Remove depth, Set color to 0 size. |