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 a9b4388eda6af1d07f8d336360a100433be79fc9..b20c628906ac472d5144b3bbc1728136e838f5a5 100644 |
| --- a/gpu/command_buffer/service/framebuffer_manager_unittest.cc |
| +++ b/gpu/command_buffer/service/framebuffer_manager_unittest.cc |
| @@ -33,7 +33,6 @@ class FramebufferManagerTest : public testing::Test { |
| NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize), |
| renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples, |
| kDepth24Supported) { |
| - |
| } |
| virtual ~FramebufferManagerTest() { |
| manager_.Destroy(false); |
| @@ -110,21 +109,29 @@ class FramebufferInfoTest : public testing::Test { |
| FramebufferInfoTest() |
| : manager_(1, 1), |
| - texture_manager_( |
| - NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize), |
| + feature_info_(new FeatureInfo()), |
| renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples, |
| kDepth24Supported) { |
| + texture_manager_.reset(new TextureManager(NULL, feature_info_.get(), |
| + kMaxTextureSize, kMaxCubemapSize)); |
| } |
| virtual ~FramebufferInfoTest() { |
| manager_.Destroy(false); |
| - texture_manager_.Destroy(false); |
| + texture_manager_->Destroy(false); |
| renderbuffer_manager_.Destroy(false); |
| } |
| protected: |
| virtual void SetUp() { |
| + InitializeContext("", ""); |
| + } |
| + |
| + void InitializeContext(const char* gl_version, const char* extensions) { |
| gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); |
| ::gfx::MockGLInterface::SetGLInterface(gl_.get()); |
| + TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(), |
| + extensions, "", gl_version); |
| + feature_info_->Initialize(); |
| manager_.CreateFramebuffer(kClient1Id, kService1Id); |
| error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
| framebuffer_ = manager_.GetFramebuffer(kClient1Id); |
| @@ -140,7 +147,8 @@ class FramebufferInfoTest : public testing::Test { |
| scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| FramebufferManager manager_; |
| Framebuffer* framebuffer_; |
| - TextureManager texture_manager_; |
| + scoped_refptr<FeatureInfo> feature_info_; |
| + scoped_ptr<TextureManager> texture_manager_; |
| RenderbufferManager renderbuffer_manager_; |
| scoped_ptr<MockErrorState> error_state_; |
| }; |
| @@ -162,7 +170,7 @@ TEST_F(FramebufferInfoTest, Basic) { |
| EXPECT_FALSE(framebuffer_->HasDepthAttachment()); |
| EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); |
| EXPECT_FALSE(manager_.IsComplete(framebuffer_)); |
| @@ -216,14 +224,14 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_FALSE(framebuffer_->HasDepthAttachment()); |
| EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| // Try a format that's not good for COLOR_ATTACHMENT0. |
| renderbuffer_manager_.SetInfo( |
| renderbuffer1, kSamples1, kBadFormat1, kWidth1, kHeight1); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Try a good format. |
| renderbuffer_manager_.SetInfo( |
| @@ -233,7 +241,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_FALSE(framebuffer_->HasDepthAttachment()); |
| EXPECT_FALSE(framebuffer_->HasStencilAttachment()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| // check adding another |
| @@ -253,7 +261,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| // of attachments it could either get INCOMPLETE_ATTACHMENT because it's 0,0 |
| // or INCOMPLETE_DIMENSIONS because it's not the same size as the other |
| // attachment. |
| - GLenum status = framebuffer_->IsPossiblyComplete(); |
| + GLenum status = framebuffer_->IsPossiblyComplete(feature_info_.get()); |
| EXPECT_TRUE( |
| status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT || |
| status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT); |
| @@ -262,17 +270,17 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| renderbuffer_manager_.SetInfo( |
| renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| // check marking them as cleared. |
| manager_.MarkAttachmentsAsCleared( |
| - framebuffer_, &renderbuffer_manager_, &texture_manager_); |
| + framebuffer_, &renderbuffer_manager_, texture_manager_.get()); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| // Check adding one that is already cleared. |
| @@ -292,7 +300,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| EXPECT_TRUE(framebuffer_->HasStencilAttachment()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| // Check marking the renderbuffer as unclared. |
| @@ -303,7 +311,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_TRUE(framebuffer_->HasDepthAttachment()); |
| EXPECT_TRUE(framebuffer_->HasStencilAttachment()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| const Framebuffer::Attachment* attachment = |
| @@ -319,7 +327,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| // Clear it. |
| manager_.MarkAttachmentsAsCleared( |
| - framebuffer_, &renderbuffer_manager_, &texture_manager_); |
| + framebuffer_, &renderbuffer_manager_, texture_manager_.get()); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| @@ -344,7 +352,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_EQ(kFormat4, attachment->internal_format()); |
| EXPECT_FALSE(attachment->cleared()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Check changing an attachment. |
| renderbuffer_manager_.SetInfo( |
| @@ -359,7 +367,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_FALSE(attachment->cleared()); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Check removing it. |
| framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL); |
| @@ -371,18 +379,18 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) { |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Remove depth, Set color to 0 size. |
| framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, NULL); |
| renderbuffer_manager_.SetInfo(renderbuffer1, kSamples1, kFormat1, 0, 0); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Remove color. |
| framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, NULL); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| } |
| TEST_F(FramebufferInfoTest, AttachTexture) { |
| @@ -417,11 +425,11 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| EXPECT_FALSE( |
| framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| - texture_manager_.CreateTexture(kTextureClient1Id, kTextureService1Id); |
| + texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id); |
| scoped_refptr<TextureRef> texture1( |
| - texture_manager_.GetTexture(kTextureClient1Id)); |
| + texture_manager_->GetTexture(kTextureClient1Id)); |
| ASSERT_TRUE(texture1.get() != NULL); |
| // check adding one attachment |
| @@ -429,13 +437,13 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| GL_COLOR_ATTACHMENT0, texture1.get(), kTarget1, kLevel1, kSamples1); |
| EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); |
| // Try format that doesn't work with COLOR_ATTACHMENT0 |
| - texture_manager_.SetTarget(texture1.get(), GL_TEXTURE_2D); |
| - texture_manager_.SetLevelInfo(texture1.get(), |
| + texture_manager_->SetTarget(texture1.get(), GL_TEXTURE_2D); |
| + texture_manager_->SetLevelInfo(texture1.get(), |
| GL_TEXTURE_2D, |
| kLevel1, |
| kBadFormat1, |
| @@ -447,10 +455,10 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| kType, |
| true); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Try a good format. |
| - texture_manager_.SetLevelInfo(texture1.get(), |
| + texture_manager_->SetLevelInfo(texture1.get(), |
| GL_TEXTURE_2D, |
| kLevel1, |
| kFormat1, |
| @@ -462,9 +470,9 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| kType, |
| false); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| - texture_manager_.SetLevelInfo(texture1.get(), |
| + texture_manager_->SetLevelInfo(texture1.get(), |
| GL_TEXTURE_2D, |
| kLevel1, |
| kFormat1, |
| @@ -476,7 +484,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| kType, |
| true); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| EXPECT_EQ(static_cast<GLenum>(kFormat1), |
| framebuffer_->GetColorAttachmentFormat()); |
| @@ -491,12 +499,12 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| EXPECT_TRUE(attachment->cleared()); |
| // Check replacing an attachment |
| - texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); |
| + texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id); |
| scoped_refptr<TextureRef> texture2( |
| - texture_manager_.GetTexture(kTextureClient2Id)); |
| + texture_manager_->GetTexture(kTextureClient2Id)); |
| ASSERT_TRUE(texture2.get() != NULL); |
| - texture_manager_.SetTarget(texture2.get(), GL_TEXTURE_2D); |
| - texture_manager_.SetLevelInfo(texture2.get(), |
| + texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D); |
| + texture_manager_->SetLevelInfo(texture2.get(), |
| GL_TEXTURE_2D, |
| kLevel2, |
| kFormat2, |
| @@ -513,7 +521,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| EXPECT_EQ(static_cast<GLenum>(kFormat2), |
| framebuffer_->GetColorAttachmentFormat()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| attachment = framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); |
| @@ -525,7 +533,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| EXPECT_TRUE(attachment->cleared()); |
| // Check changing attachment |
| - texture_manager_.SetLevelInfo(texture2.get(), |
| + texture_manager_->SetLevelInfo(texture2.get(), |
| GL_TEXTURE_2D, |
| kLevel3, |
| kFormat3, |
| @@ -546,11 +554,11 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| EXPECT_EQ(static_cast<GLenum>(kFormat3), |
| framebuffer_->GetColorAttachmentFormat()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_FALSE(framebuffer_->IsCleared()); |
| // Set to size 0 |
| - texture_manager_.SetLevelInfo(texture2.get(), |
| + texture_manager_->SetLevelInfo(texture2.get(), |
| GL_TEXTURE_2D, |
| kLevel3, |
| kFormat3, |
| @@ -562,7 +570,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| kType, |
| false); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| // Check removing it. |
| framebuffer_->AttachTexture(GL_COLOR_ATTACHMENT0, NULL, 0, 0, 0); |
| @@ -570,10 +578,155 @@ TEST_F(FramebufferInfoTest, AttachTexture) { |
| EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); |
| EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), |
| - framebuffer_->IsPossiblyComplete()); |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| EXPECT_TRUE(framebuffer_->IsCleared()); |
| } |
| +TEST_F(FramebufferInfoTest, AttachFloatTextureNotSupported) { |
| + const GLuint kTextureClientId = 33; |
| + const GLuint kTextureServiceId = 333; |
| + const GLint kDepth = 1; |
| + const GLint kBorder = 0; |
| + const GLenum kType = GL_FLOAT; |
| + const GLsizei kWidth = 16; |
| + const GLsizei kHeight = 32; |
| + const GLint kLevel = 0; |
| + const GLenum kFormat = GL_RGBA; |
| + const GLenum kInternalFormat = GL_RGBA32F; |
| + const GLenum kBadInternalFormat = GL_RGBA; |
| + const GLenum kTarget = GL_TEXTURE_2D; |
| + const GLsizei kSamples = 0; |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| + |
| + texture_manager_->CreateTexture(kTextureClientId, kTextureServiceId); |
| + scoped_refptr<TextureRef> texture( |
| + texture_manager_->GetTexture(kTextureClientId)); |
| + ASSERT_TRUE(texture.get() != NULL); |
| + |
| + // check adding one attachment |
| + framebuffer_->AttachTexture( |
| + GL_COLOR_ATTACHMENT0, texture.get(), kTarget, kLevel, kSamples); |
| + EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); |
| + |
| + // Try unsized internalformat. |
| + texture_manager_->SetTarget(texture.get(), GL_TEXTURE_2D); |
| + texture_manager_->SetLevelInfo(texture.get(), |
| + GL_TEXTURE_2D, |
| + kLevel, |
| + kBadInternalFormat, |
| + kWidth, |
| + kHeight, |
| + kDepth, |
| + kBorder, |
| + kFormat, |
| + kType, |
| + true); |
| + // Texture with an unsized internalformat is not allowed as an attachment |
| + // unless working around ANGLE's unspecified behavior, regardless of |
| + // whether float color attachments are allowed in general. |
| + EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| + |
| + // Try a sized internalformat. |
| + texture_manager_->SetLevelInfo(texture.get(), |
| + GL_TEXTURE_2D, |
| + kLevel, |
| + kInternalFormat, |
| + kWidth, |
| + kHeight, |
| + kDepth, |
| + kBorder, |
| + kFormat, |
| + kType, |
| + false); |
| + // Texture with a sized float internalformat is allowed as an attachment |
| + // only if float color attachment extension is present. |
| + EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| +} |
| + |
| +class FramebufferInfoFloatTest : public FramebufferInfoTest { |
| + public: |
| + FramebufferInfoFloatTest() |
| + : FramebufferInfoTest() { |
| + } |
| + virtual ~FramebufferInfoFloatTest() { |
| + } |
| + |
| + protected: |
| + virtual void SetUp() { |
| + InitializeContext("OpenGL ES 3.0", |
| + "GL_OES_texture_float GL_EXT_color_buffer_float"); |
| + } |
| +}; |
| + |
| +TEST_F(FramebufferInfoFloatTest, AttachFloatTextureSupported) { |
| + const GLuint kTextureClientId = 33; |
| + const GLuint kTextureServiceId = 333; |
| + const GLint kDepth = 1; |
| + const GLint kBorder = 0; |
| + const GLenum kType = GL_FLOAT; |
| + const GLsizei kWidth = 16; |
| + const GLsizei kHeight = 32; |
| + const GLint kLevel = 0; |
| + const GLenum kFormat = GL_RGBA; |
| + const GLenum kInternalFormat = GL_RGBA32F; |
| + const GLenum kBadInternalFormat = GL_RGBA; |
| + const GLenum kTarget = GL_TEXTURE_2D; |
| + const GLsizei kSamples = 0; |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| + EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| + |
| + texture_manager_->CreateTexture(kTextureClientId, kTextureServiceId); |
| + scoped_refptr<TextureRef> texture( |
| + texture_manager_->GetTexture(kTextureClientId)); |
| + ASSERT_TRUE(texture.get() != NULL); |
| + |
| + // check adding one attachment |
| + framebuffer_->AttachTexture( |
| + GL_COLOR_ATTACHMENT0, texture.get(), kTarget, kLevel, kSamples); |
| + EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); |
| + |
| + // Try unsized internalformat. |
| + texture_manager_->SetTarget(texture.get(), GL_TEXTURE_2D); |
| + texture_manager_->SetLevelInfo(texture.get(), |
| + GL_TEXTURE_2D, |
| + kLevel, |
| + kBadInternalFormat, |
| + kWidth, |
| + kHeight, |
| + kDepth, |
| + kBorder, |
| + kFormat, |
| + kType, |
| + true); |
| + // Texture with an unsized internalformat is not allowed as an attachment |
| + // unless working around ANGLE's unspecified behavior, regardless of |
| + // whether float color attachments are allowed in general. |
| + EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
| + |
| + // Try a sized internalformat. |
| + texture_manager_->SetLevelInfo(texture.get(), |
| + GL_TEXTURE_2D, |
| + kLevel, |
| + kInternalFormat, |
| + kWidth, |
| + kHeight, |
| + kDepth, |
| + kBorder, |
| + kFormat, |
| + kType, |
| + false); |
| + // Texture with a sized float internalformat is allowed as an attachment |
| + // since float color attachment extension is present. |
| + EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| + framebuffer_->IsPossiblyComplete(feature_info_.get())); |
|
Ken Russell (switch to Gerrit)
2014/02/12 00:11:01
The code duplication between these tests is unfort
|
| +} |
| + |
| TEST_F(FramebufferInfoTest, UnbindRenderbuffer) { |
| const GLuint kRenderbufferClient1Id = 33; |
| const GLuint kRenderbufferService1Id = 333; |
| @@ -618,13 +771,13 @@ TEST_F(FramebufferInfoTest, UnbindTexture) { |
| const GLint kLevel1 = 0; |
| const GLint kSamples1 = 0; |
| - texture_manager_.CreateTexture(kTextureClient1Id, kTextureService1Id); |
| + texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id); |
| scoped_refptr<TextureRef> texture1( |
| - texture_manager_.GetTexture(kTextureClient1Id)); |
| + texture_manager_->GetTexture(kTextureClient1Id)); |
| ASSERT_TRUE(texture1.get() != NULL); |
| - texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); |
| + texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id); |
| scoped_refptr<TextureRef> texture2( |
| - texture_manager_.GetTexture(kTextureClient2Id)); |
| + texture_manager_->GetTexture(kTextureClient2Id)); |
| ASSERT_TRUE(texture2.get() != NULL); |
| // Attach to 2 attachment points. |
| @@ -661,9 +814,9 @@ TEST_F(FramebufferInfoTest, IsCompleteMarkAsComplete) { |
| Renderbuffer* renderbuffer1 = |
| renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id); |
| ASSERT_TRUE(renderbuffer1 != NULL); |
| - texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); |
| + texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id); |
| scoped_refptr<TextureRef> texture2( |
| - texture_manager_.GetTexture(kTextureClient2Id)); |
| + texture_manager_->GetTexture(kTextureClient2Id)); |
| ASSERT_TRUE(texture2.get() != NULL); |
| // Check MarkAsComlete marks as complete. |
| @@ -681,7 +834,7 @@ TEST_F(FramebufferInfoTest, IsCompleteMarkAsComplete) { |
| // Check MarkAttachmentsAsCleared marks as complete. |
| manager_.MarkAttachmentsAsCleared( |
| - framebuffer_, &renderbuffer_manager_, &texture_manager_); |
| + framebuffer_, &renderbuffer_manager_, texture_manager_.get()); |
| EXPECT_TRUE(manager_.IsComplete(framebuffer_)); |
| // Check Unbind marks as not complete. |
| @@ -707,16 +860,16 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| Renderbuffer* renderbuffer1 = |
| renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id); |
| ASSERT_TRUE(renderbuffer1 != NULL); |
| - texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); |
| + texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id); |
| scoped_refptr<TextureRef> texture2( |
| - texture_manager_.GetTexture(kTextureClient2Id)); |
| + texture_manager_->GetTexture(kTextureClient2Id)); |
| ASSERT_TRUE(texture2.get() != NULL); |
| - texture_manager_.SetTarget(texture2.get(), GL_TEXTURE_2D); |
| + texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D); |
| EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| - framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); |
| // Check a second call for the same type does not call anything |
| if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { |
| @@ -724,14 +877,14 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| } |
| - framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); |
| // Check changing the attachments calls CheckFramebufferStatus. |
| framebuffer_->AttachTexture( |
| GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1); |
| EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)).RetiresOnSaturation(); |
| - framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); |
| // Check a second call for the same type does not call anything. |
| if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { |
| @@ -739,13 +892,13 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| } |
| - framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); |
| // Check a second call with a different target calls CheckFramebufferStatus. |
| EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| // Check a second call for the same type does not call anything. |
| if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { |
| @@ -753,14 +906,14 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| } |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| // Check adding another attachment calls CheckFramebufferStatus. |
| framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1); |
| EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| // Check a second call for the same type does not call anything. |
| if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { |
| @@ -768,12 +921,12 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| } |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| // Check changing the format calls CheckFramebuffferStatus. |
| TestHelper::SetTexParameterWithExpectations(gl_.get(), |
| error_state_.get(), |
| - &texture_manager_, |
| + texture_manager_.get(), |
| texture2.get(), |
| GL_TEXTURE_WRAP_S, |
| GL_CLAMP_TO_EDGE, |
| @@ -783,11 +936,11 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)) |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| // Check since it did not return FRAMEBUFFER_COMPLETE that it calls |
| // CheckFramebufferStatus |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| // Check putting it back does not call CheckFramebufferStatus. |
| if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { |
| @@ -797,12 +950,12 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| } |
| TestHelper::SetTexParameterWithExpectations(gl_.get(), |
| error_state_.get(), |
| - &texture_manager_, |
| + texture_manager_.get(), |
| texture2.get(), |
| GL_TEXTURE_WRAP_S, |
| GL_REPEAT, |
| GL_NO_ERROR); |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| // Check Unbinding does not call CheckFramebufferStatus |
| framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1); |
| @@ -811,7 +964,7 @@ TEST_F(FramebufferInfoTest, GetStatus) { |
| .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
| .RetiresOnSaturation(); |
| } |
| - framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); |
| + framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
| } |
| } // namespace gles2 |