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..45e7e75597d71c07d50215e530795436292da076 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,35 @@ 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())); |
+ |
+ // Bind a renderbufer in format DEPTH_STENCIL to depth and stencil |
+ // attachment points. |
+ renderbuffer_manager_->CreateRenderbuffer( |
+ kRenderbufferClient4Id, kRenderbufferService4Id); |
+ Renderbuffer* renderbuffer4 = |
+ renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient4Id); |
+ ASSERT_TRUE(renderbuffer4 != NULL); |
qiankun
2016/07/22 08:31:37
Use nullptr here and other place.
|
+ 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 +382,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()); |
qiankun
2016/07/22 08:31:37
Can you mark renderbuffer5 as cleared and check fr
|
+ |
+ 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,38 +427,41 @@ 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), |
framebuffer_->IsPossiblyComplete(feature_info_.get())); |
// Check removing it. |
+ // Restore the width of renderbuffer5 to avoid INCOMPLETE_DIMENSIONS_EXT |
qiankun
2016/07/22 08:31:37
Miss . at the end of line.
|
+ renderbuffer_manager_->SetInfo( |
+ renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5); |
+ |
framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL); |
EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
EXPECT_EQ(static_cast<GLenum>(kFormat1), |
framebuffer_->GetReadBufferInternalFormat()); |
EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
- |
- EXPECT_TRUE(framebuffer_->IsCleared()); |
+ EXPECT_FALSE(framebuffer_->IsCleared()); |
EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
framebuffer_->IsPossiblyComplete(feature_info_.get())); |