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..6cb7df8a156c88a193e41235bea9fc9ba7493243 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,153 @@ 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 |
+ // 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 |
+ // 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())); |
+} |
+ |
TEST_F(FramebufferInfoTest, UnbindRenderbuffer) { |
const GLuint kRenderbufferClient1Id = 33; |
const GLuint kRenderbufferService1Id = 333; |
@@ -618,13 +769,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 +812,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 +832,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 +858,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 +875,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 +890,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 +904,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 +919,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 +934,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 +948,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 +962,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 |