Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Unified Diff: gpu/command_buffer/service/framebuffer_manager_unittest.cc

Issue 2161383002: Add check if depth and stencil attachments are same image (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use IsSameAttachment and update related unittests Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698