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

Side by Side Diff: gpu/command_buffer/service/framebuffer_manager_unittest.cc

Issue 1231273002: Fix framebuffer completeness ES3 behavior. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add unittest Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/error_state_mock.h" 5 #include "gpu/command_buffer/service/error_state_mock.h"
6 #include "gpu/command_buffer/service/framebuffer_manager.h" 6 #include "gpu/command_buffer/service/framebuffer_manager.h"
7 #include "gpu/command_buffer/service/feature_info.h" 7 #include "gpu/command_buffer/service/feature_info.h"
8 #include "gpu/command_buffer/service/gpu_service_test.h" 8 #include "gpu/command_buffer/service/gpu_service_test.h"
9 #include "gpu/command_buffer/service/renderbuffer_manager.h" 9 #include "gpu/command_buffer/service/renderbuffer_manager.h"
10 #include "gpu/command_buffer/service/test_helper.h" 10 #include "gpu/command_buffer/service/test_helper.h"
(...skipping 16 matching lines...) Expand all
27 const GLint kMaxSamples = 4; 27 const GLint kMaxSamples = 4;
28 const uint32 kMaxDrawBuffers = 16; 28 const uint32 kMaxDrawBuffers = 16;
29 const uint32 kMaxColorAttachments = 16; 29 const uint32 kMaxColorAttachments = 16;
30 const bool kUseDefaultTextures = false; 30 const bool kUseDefaultTextures = false;
31 31
32 } // namespace 32 } // namespace
33 33
34 class FramebufferManagerTest : public GpuServiceTest { 34 class FramebufferManagerTest : public GpuServiceTest {
35 public: 35 public:
36 FramebufferManagerTest() 36 FramebufferManagerTest()
37 : manager_(1, 1), 37 : manager_(1, 1, ContextGroup::CONTEXT_TYPE_UNDEFINED),
38 feature_info_(new FeatureInfo()) { 38 feature_info_(new FeatureInfo()) {
39 texture_manager_.reset(new TextureManager(NULL, 39 texture_manager_.reset(new TextureManager(NULL,
40 feature_info_.get(), 40 feature_info_.get(),
41 kMaxTextureSize, 41 kMaxTextureSize,
42 kMaxCubemapSize, 42 kMaxCubemapSize,
43 kMaxRectangleTextureSize, 43 kMaxRectangleTextureSize,
44 kMax3DTextureSize, 44 kMax3DTextureSize,
45 kUseDefaultTextures)); 45 kUseDefaultTextures));
46 renderbuffer_manager_.reset(new RenderbufferManager(NULL, 46 renderbuffer_manager_.reset(new RenderbufferManager(NULL,
47 kMaxRenderbufferSize, 47 kMaxRenderbufferSize,
48 kMaxSamples, 48 kMaxSamples,
49 feature_info_.get())); 49 feature_info_.get()));
50 } 50 }
51 ~FramebufferManagerTest() override { 51 ~FramebufferManagerTest() override {
52 manager_.Destroy(false); 52 manager_.Destroy(false);
53 texture_manager_->Destroy(false); 53 texture_manager_->Destroy(false);
54 renderbuffer_manager_->Destroy(false); 54 renderbuffer_manager_->Destroy(false);
55 } 55 }
56 56
57 protected: 57 protected:
58
59 FramebufferManager manager_; 58 FramebufferManager manager_;
60 scoped_refptr<FeatureInfo> feature_info_; 59 scoped_refptr<FeatureInfo> feature_info_;
61 scoped_ptr<TextureManager> texture_manager_; 60 scoped_ptr<TextureManager> texture_manager_;
62 scoped_ptr<RenderbufferManager> renderbuffer_manager_; 61 scoped_ptr<RenderbufferManager> renderbuffer_manager_;
63 }; 62 };
64 63
65 TEST_F(FramebufferManagerTest, Basic) { 64 TEST_F(FramebufferManagerTest, Basic) {
66 const GLuint kClient1Id = 1; 65 const GLuint kClient1Id = 1;
67 const GLuint kService1Id = 11; 66 const GLuint kService1Id = 11;
68 const GLuint kClient2Id = 2; 67 const GLuint kClient2Id = 2;
(...skipping 30 matching lines...) Expand all
99 ASSERT_TRUE(framebuffer1 != NULL); 98 ASSERT_TRUE(framebuffer1 != NULL);
100 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, ::testing::Pointee(kService1Id))) 99 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, ::testing::Pointee(kService1Id)))
101 .Times(1) 100 .Times(1)
102 .RetiresOnSaturation(); 101 .RetiresOnSaturation();
103 manager_.Destroy(true); 102 manager_.Destroy(true);
104 // Check the resources were released. 103 // Check the resources were released.
105 framebuffer1 = manager_.GetFramebuffer(kClient1Id); 104 framebuffer1 = manager_.GetFramebuffer(kClient1Id);
106 ASSERT_TRUE(framebuffer1 == NULL); 105 ASSERT_TRUE(framebuffer1 == NULL);
107 } 106 }
108 107
109 class FramebufferInfoTest : public GpuServiceTest { 108 class FramebufferInfoTestBase : public GpuServiceTest {
110 public: 109 public:
111 static const GLuint kClient1Id = 1; 110 static const GLuint kClient1Id = 1;
112 static const GLuint kService1Id = 11; 111 static const GLuint kService1Id = 11;
113 112
114 FramebufferInfoTest() 113 explicit FramebufferInfoTestBase(ContextGroup::ContextType context_type)
115 : manager_(kMaxDrawBuffers, kMaxColorAttachments), 114 : manager_(kMaxDrawBuffers, kMaxColorAttachments, context_type),
116 feature_info_(new FeatureInfo()) { 115 feature_info_(new FeatureInfo()) {
117 texture_manager_.reset(new TextureManager(NULL, 116 texture_manager_.reset(new TextureManager(NULL,
118 feature_info_.get(), 117 feature_info_.get(),
119 kMaxTextureSize, 118 kMaxTextureSize,
120 kMaxCubemapSize, 119 kMaxCubemapSize,
121 kMaxRectangleTextureSize, 120 kMaxRectangleTextureSize,
122 kMax3DTextureSize, 121 kMax3DTextureSize,
123 kUseDefaultTextures)); 122 kUseDefaultTextures));
124 renderbuffer_manager_.reset(new RenderbufferManager(NULL, 123 renderbuffer_manager_.reset(new RenderbufferManager(NULL,
125 kMaxRenderbufferSize, 124 kMaxRenderbufferSize,
126 kMaxSamples, 125 kMaxSamples,
127 feature_info_.get())); 126 feature_info_.get()));
128 } 127 }
129 ~FramebufferInfoTest() override { 128 ~FramebufferInfoTestBase() override {
130 manager_.Destroy(false); 129 manager_.Destroy(false);
131 texture_manager_->Destroy(false); 130 texture_manager_->Destroy(false);
132 renderbuffer_manager_->Destroy(false); 131 renderbuffer_manager_->Destroy(false);
133 } 132 }
134 133
135 protected: 134 protected:
136 void SetUp() override { 135 void SetUp() override {
137 InitializeContext("2.0", "GL_EXT_framebuffer_object"); 136 InitializeContext("2.0", "GL_EXT_framebuffer_object");
138 } 137 }
139 138
140 void InitializeContext(const char* gl_version, const char* extensions) { 139 void InitializeContext(const char* gl_version, const char* extensions) {
141 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions); 140 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions);
142 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(), 141 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(),
143 extensions, "", gl_version); 142 extensions, "", gl_version);
144 feature_info_->Initialize(); 143 feature_info_->Initialize();
145 manager_.CreateFramebuffer(kClient1Id, kService1Id); 144 manager_.CreateFramebuffer(kClient1Id, kService1Id);
146 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 145 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
147 framebuffer_ = manager_.GetFramebuffer(kClient1Id); 146 framebuffer_ = manager_.GetFramebuffer(kClient1Id);
148 ASSERT_TRUE(framebuffer_ != NULL); 147 ASSERT_TRUE(framebuffer_ != NULL);
149 } 148 }
150 149
151 FramebufferManager manager_; 150 FramebufferManager manager_;
152 Framebuffer* framebuffer_; 151 Framebuffer* framebuffer_;
153 scoped_refptr<FeatureInfo> feature_info_; 152 scoped_refptr<FeatureInfo> feature_info_;
154 scoped_ptr<TextureManager> texture_manager_; 153 scoped_ptr<TextureManager> texture_manager_;
155 scoped_ptr<RenderbufferManager> renderbuffer_manager_; 154 scoped_ptr<RenderbufferManager> renderbuffer_manager_;
156 scoped_ptr<MockErrorState> error_state_; 155 scoped_ptr<MockErrorState> error_state_;
157 }; 156 };
158 157
158 class FramebufferInfoTest : public FramebufferInfoTestBase {
159 public:
160 FramebufferInfoTest()
161 : FramebufferInfoTestBase(ContextGroup::CONTEXT_TYPE_UNDEFINED) {
162 }
163 };
164
159 // GCC requires these declarations, but MSVC requires they not be present 165 // GCC requires these declarations, but MSVC requires they not be present
160 #ifndef COMPILER_MSVC 166 #ifndef COMPILER_MSVC
161 const GLuint FramebufferInfoTest::kClient1Id; 167 const GLuint FramebufferInfoTestBase::kClient1Id;
162 const GLuint FramebufferInfoTest::kService1Id; 168 const GLuint FramebufferInfoTestBase::kService1Id;
163 #endif 169 #endif
164 170
165 TEST_F(FramebufferInfoTest, Basic) { 171 TEST_F(FramebufferInfoTest, Basic) {
166 EXPECT_EQ(kService1Id, framebuffer_->service_id()); 172 EXPECT_EQ(kService1Id, framebuffer_->service_id());
167 EXPECT_FALSE(framebuffer_->IsDeleted()); 173 EXPECT_FALSE(framebuffer_->IsDeleted());
168 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0)); 174 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0));
169 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT)); 175 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT));
170 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT)); 176 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT));
171 EXPECT_TRUE( 177 EXPECT_TRUE(
172 NULL == framebuffer_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); 178 NULL == framebuffer_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 // Check Unbinding does not call CheckFramebufferStatus 919 // Check Unbinding does not call CheckFramebufferStatus
914 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1); 920 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1);
915 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { 921 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
916 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 922 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
917 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 923 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
918 .RetiresOnSaturation(); 924 .RetiresOnSaturation();
919 } 925 }
920 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); 926 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
921 } 927 }
922 928
929 class FramebufferInfoES3Test : public FramebufferInfoTestBase {
930 public:
931 FramebufferInfoES3Test()
932 : FramebufferInfoTestBase(ContextGroup::CONTEXT_TYPE_WEBGL2) {
933 }
934 };
935
936 TEST_F(FramebufferInfoES3Test, DifferentDimensions) {
937 const GLuint kRenderbufferClient1Id = 33;
938 const GLuint kRenderbufferService1Id = 333;
939 const GLuint kRenderbufferClient2Id = 34;
940 const GLuint kRenderbufferService2Id = 334;
941 const GLsizei kWidth1 = 16;
942 const GLsizei kHeight1 = 32;
943 const GLenum kFormat1 = GL_RGBA4;
944 const GLsizei kSamples1 = 0;
945 const GLsizei kWidth2 = 32; // Different from kWidth1
946 const GLsizei kHeight2 = 32;
947 const GLenum kFormat2 = GL_DEPTH_COMPONENT16;
948 const GLsizei kSamples2 = 0;
949
950 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
951 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
952 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
953 EXPECT_FALSE(
954 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
955
956 renderbuffer_manager_->CreateRenderbuffer(
957 kRenderbufferClient1Id, kRenderbufferService1Id);
958 Renderbuffer* renderbuffer1 =
959 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id);
960 ASSERT_TRUE(renderbuffer1 != NULL);
961 renderbuffer_manager_->SetInfo(
962 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1);
963 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1);
964
965 renderbuffer_manager_->CreateRenderbuffer(
966 kRenderbufferClient2Id, kRenderbufferService2Id);
967 Renderbuffer* renderbuffer2 =
968 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient2Id);
969 ASSERT_TRUE(renderbuffer2 != NULL);
970 renderbuffer_manager_->SetInfo(
971 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2);
972 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2);
973
974 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
975 framebuffer_->IsPossiblyComplete());
976 }
977
923 } // namespace gles2 978 } // namespace gles2
924 } // namespace gpu 979 } // namespace gpu
925 980
926 981
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.cc ('k') | gpu/command_buffer/service/texture_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698