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

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

Issue 139013008: Implement support for rendering to 32-bit float textures on ES3 (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase Created 6 years, 10 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 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

Powered by Google App Engine
This is Rietveld 408576698