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

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

Issue 2389363002: Move special DEPTH_STENCIL attachment logic from command buffers to WebGL1 (Closed)
Patch Set: Created 4 years, 2 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "gpu/command_buffer/service/error_state_mock.h" 8 #include "gpu/command_buffer/service/error_state_mock.h"
9 #include "gpu/command_buffer/service/feature_info.h" 9 #include "gpu/command_buffer/service/feature_info.h"
10 #include "gpu/command_buffer/service/framebuffer_manager.h" 10 #include "gpu/command_buffer/service/framebuffer_manager.h"
(...skipping 21 matching lines...) Expand all
32 const GLint kMaxSamples = 4; 32 const GLint kMaxSamples = 4;
33 const uint32_t kMaxDrawBuffers = 16; 33 const uint32_t kMaxDrawBuffers = 16;
34 const uint32_t kMaxColorAttachments = 16; 34 const uint32_t kMaxColorAttachments = 16;
35 const bool kUseDefaultTextures = false; 35 const bool kUseDefaultTextures = false;
36 36
37 } // namespace 37 } // namespace
38 38
39 class FramebufferManagerTest : public GpuServiceTest { 39 class FramebufferManagerTest : public GpuServiceTest {
40 public: 40 public:
41 FramebufferManagerTest() 41 FramebufferManagerTest()
42 : manager_(1, 1, CONTEXT_TYPE_OPENGLES2, nullptr), 42 : manager_(1, 1, nullptr),
43 feature_info_(new FeatureInfo()) { 43 feature_info_(new FeatureInfo()) {
44 texture_manager_.reset(new TextureManager(nullptr, 44 texture_manager_.reset(new TextureManager(nullptr,
45 feature_info_.get(), 45 feature_info_.get(),
46 kMaxTextureSize, 46 kMaxTextureSize,
47 kMaxCubemapSize, 47 kMaxCubemapSize,
48 kMaxRectangleTextureSize, 48 kMaxRectangleTextureSize,
49 kMax3DTextureSize, 49 kMax3DTextureSize,
50 kMaxArrayTextureLayers, 50 kMaxArrayTextureLayers,
51 kUseDefaultTextures)); 51 kUseDefaultTextures));
52 renderbuffer_manager_.reset(new RenderbufferManager(nullptr, 52 renderbuffer_manager_.reset(new RenderbufferManager(nullptr,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 framebuffer1 = manager_.GetFramebuffer(kClient1Id); 110 framebuffer1 = manager_.GetFramebuffer(kClient1Id);
111 ASSERT_TRUE(framebuffer1 == nullptr); 111 ASSERT_TRUE(framebuffer1 == nullptr);
112 } 112 }
113 113
114 class FramebufferInfoTestBase : public GpuServiceTest { 114 class FramebufferInfoTestBase : public GpuServiceTest {
115 public: 115 public:
116 static const GLuint kClient1Id = 1; 116 static const GLuint kClient1Id = 1;
117 static const GLuint kService1Id = 11; 117 static const GLuint kService1Id = 11;
118 118
119 explicit FramebufferInfoTestBase(ContextType context_type) 119 explicit FramebufferInfoTestBase(ContextType context_type)
120 : manager_(kMaxDrawBuffers, 120 : context_type_(context_type),
121 manager_(kMaxDrawBuffers,
121 kMaxColorAttachments, 122 kMaxColorAttachments,
122 context_type,
123 new FramebufferCompletenessCache), 123 new FramebufferCompletenessCache),
124 feature_info_(new FeatureInfo()) { 124 feature_info_(new FeatureInfo()) {
125 texture_manager_.reset(new TextureManager(nullptr, 125 texture_manager_.reset(new TextureManager(nullptr,
126 feature_info_.get(), 126 feature_info_.get(),
127 kMaxTextureSize, 127 kMaxTextureSize,
128 kMaxCubemapSize, 128 kMaxCubemapSize,
129 kMaxRectangleTextureSize, 129 kMaxRectangleTextureSize,
130 kMax3DTextureSize, 130 kMax3DTextureSize,
131 kMaxArrayTextureLayers, 131 kMaxArrayTextureLayers,
132 kUseDefaultTextures)); 132 kUseDefaultTextures));
133 renderbuffer_manager_.reset(new RenderbufferManager(nullptr, 133 renderbuffer_manager_.reset(new RenderbufferManager(nullptr,
134 kMaxRenderbufferSize, 134 kMaxRenderbufferSize,
135 kMaxSamples, 135 kMaxSamples,
136 feature_info_.get())); 136 feature_info_.get()));
137 } 137 }
138 ~FramebufferInfoTestBase() override { 138 ~FramebufferInfoTestBase() override {
139 manager_.Destroy(false); 139 manager_.Destroy(false);
140 texture_manager_->Destroy(false); 140 texture_manager_->Destroy(false);
141 renderbuffer_manager_->Destroy(false); 141 renderbuffer_manager_->Destroy(false);
142 } 142 }
143 143
144 protected: 144 protected:
145 void SetUp() override { 145 void SetUp() override {
146 InitializeContext("2.0", "GL_EXT_framebuffer_object"); 146 InitializeContext("2.0", "GL_EXT_framebuffer_object");
147 } 147 }
148 148
149 void InitializeContext(const char* gl_version, const char* extensions) { 149 void InitializeContext(const char* gl_version, const char* extensions) {
150 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions); 150 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions);
151 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(), 151 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(),
152 extensions, "", gl_version, manager_.context_type()); 152 extensions, "", gl_version, context_type_);
153 feature_info_->InitializeForTesting(); 153 feature_info_->InitializeForTesting();
154 decoder_.reset(new MockGLES2Decoder()); 154 decoder_.reset(new MockGLES2Decoder());
155 manager_.CreateFramebuffer(kClient1Id, kService1Id); 155 manager_.CreateFramebuffer(kClient1Id, kService1Id);
156 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 156 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
157 framebuffer_ = manager_.GetFramebuffer(kClient1Id); 157 framebuffer_ = manager_.GetFramebuffer(kClient1Id);
158 ASSERT_TRUE(framebuffer_ != nullptr); 158 ASSERT_TRUE(framebuffer_ != nullptr);
159 } 159 }
160 160
161 ContextType context_type_;
161 FramebufferManager manager_; 162 FramebufferManager manager_;
162 Framebuffer* framebuffer_; 163 Framebuffer* framebuffer_;
163 scoped_refptr<FeatureInfo> feature_info_; 164 scoped_refptr<FeatureInfo> feature_info_;
164 std::unique_ptr<TextureManager> texture_manager_; 165 std::unique_ptr<TextureManager> texture_manager_;
165 std::unique_ptr<RenderbufferManager> renderbuffer_manager_; 166 std::unique_ptr<RenderbufferManager> renderbuffer_manager_;
166 std::unique_ptr<MockErrorState> error_state_; 167 std::unique_ptr<MockErrorState> error_state_;
167 std::unique_ptr<MockGLES2Decoder> decoder_; 168 std::unique_ptr<MockGLES2Decoder> decoder_;
168 }; 169 };
169 170
170 class FramebufferInfoTest : public FramebufferInfoTestBase { 171 class FramebufferInfoTest : public FramebufferInfoTestBase {
171 public: 172 public:
172 FramebufferInfoTest() : FramebufferInfoTestBase(CONTEXT_TYPE_OPENGLES2) {} 173 FramebufferInfoTest() : FramebufferInfoTestBase(CONTEXT_TYPE_OPENGLES2) {}
173 }; 174 };
174 175
175 // GCC requires these declarations, but MSVC requires they not be present 176 // GCC requires these declarations, but MSVC requires they not be present
176 #ifndef COMPILER_MSVC 177 #ifndef COMPILER_MSVC
177 const GLuint FramebufferInfoTestBase::kClient1Id; 178 const GLuint FramebufferInfoTestBase::kClient1Id;
178 const GLuint FramebufferInfoTestBase::kService1Id; 179 const GLuint FramebufferInfoTestBase::kService1Id;
179 #endif 180 #endif
180 181
181 TEST_F(FramebufferInfoTest, Basic) { 182 TEST_F(FramebufferInfoTest, Basic) {
182 EXPECT_EQ(kService1Id, framebuffer_->service_id()); 183 EXPECT_EQ(kService1Id, framebuffer_->service_id());
183 EXPECT_FALSE(framebuffer_->IsDeleted()); 184 EXPECT_FALSE(framebuffer_->IsDeleted());
184 EXPECT_TRUE(nullptr == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0)); 185 EXPECT_TRUE(nullptr == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0));
185 EXPECT_TRUE(nullptr == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT)); 186 EXPECT_TRUE(nullptr == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT));
186 EXPECT_TRUE(nullptr == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT)); 187 EXPECT_TRUE(nullptr == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT));
187 EXPECT_TRUE(
188 nullptr == framebuffer_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
189 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); 188 EXPECT_FALSE(framebuffer_->HasDepthAttachment());
190 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 189 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
191 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), 190 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT),
192 framebuffer_->IsPossiblyComplete(feature_info_.get())); 191 framebuffer_->IsPossiblyComplete(feature_info_.get()));
193 EXPECT_TRUE(framebuffer_->IsCleared()); 192 EXPECT_TRUE(framebuffer_->IsCleared());
194 EXPECT_EQ(static_cast<GLenum>(0), 193 EXPECT_EQ(static_cast<GLenum>(0),
195 framebuffer_->GetReadBufferInternalFormat()); 194 framebuffer_->GetReadBufferInternalFormat());
196 EXPECT_FALSE(manager_.IsComplete(framebuffer_)); 195 EXPECT_FALSE(manager_.IsComplete(framebuffer_));
197 } 196 }
198 197
(...skipping 27 matching lines...) Expand all
226 const GLsizei kSamples4 = 0; 225 const GLsizei kSamples4 = 0;
227 const GLsizei kWidth5 = 16; 226 const GLsizei kWidth5 = 16;
228 const GLsizei kHeight5 = 32; 227 const GLsizei kHeight5 = 32;
229 const GLenum kFormat5 = GL_DEPTH24_STENCIL8; 228 const GLenum kFormat5 = GL_DEPTH24_STENCIL8;
230 const GLsizei kSamples5 = 0; 229 const GLsizei kSamples5 = 0;
231 const GLsizei kDifferentSamples5 = 1; 230 const GLsizei kDifferentSamples5 = 1;
232 231
233 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 232 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
234 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 233 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
235 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 234 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
236 EXPECT_FALSE(
237 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
238 235
239 renderbuffer_manager_->CreateRenderbuffer( 236 renderbuffer_manager_->CreateRenderbuffer(
240 kRenderbufferClient1Id, kRenderbufferService1Id); 237 kRenderbufferClient1Id, kRenderbufferService1Id);
241 Renderbuffer* renderbuffer1 = 238 Renderbuffer* renderbuffer1 =
242 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id); 239 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id);
243 ASSERT_TRUE(renderbuffer1 != nullptr); 240 ASSERT_TRUE(renderbuffer1 != nullptr);
244 241
245 // Check adding one attachment. 242 // Check adding one attachment.
246 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); 243 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1);
247 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 244 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 const GLenum kTarget2 = GL_TEXTURE_2D; 496 const GLenum kTarget2 = GL_TEXTURE_2D;
500 const GLsizei kSamples2 = 0; 497 const GLsizei kSamples2 = 0;
501 const GLsizei kWidth3 = 75; 498 const GLsizei kWidth3 = 75;
502 const GLsizei kHeight3 = 123; 499 const GLsizei kHeight3 = 123;
503 const GLint kLevel3 = 0; 500 const GLint kLevel3 = 0;
504 const GLenum kFormat3 = GL_RGB565; 501 const GLenum kFormat3 = GL_RGB565;
505 const GLsizei kSamples3 = 0; 502 const GLsizei kSamples3 = 0;
506 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 503 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
507 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 504 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
508 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 505 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
509 EXPECT_FALSE(
510 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
511 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), 506 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT),
512 framebuffer_->IsPossiblyComplete(feature_info_.get())); 507 framebuffer_->IsPossiblyComplete(feature_info_.get()));
513 508
514 texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id); 509 texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id);
515 scoped_refptr<TextureRef> texture1( 510 scoped_refptr<TextureRef> texture1(
516 texture_manager_->GetTexture(kTextureClient1Id)); 511 texture_manager_->GetTexture(kTextureClient1Id));
517 ASSERT_TRUE(texture1.get() != nullptr); 512 ASSERT_TRUE(texture1.get() != nullptr);
518 513
519 // check adding one attachment 514 // check adding one attachment
520 framebuffer_->AttachTexture( 515 framebuffer_->AttachTexture(
(...skipping 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after
1557 FramebufferInfoES3Test() : FramebufferInfoTestBase(CONTEXT_TYPE_WEBGL2) {} 1552 FramebufferInfoES3Test() : FramebufferInfoTestBase(CONTEXT_TYPE_WEBGL2) {}
1558 1553
1559 protected: 1554 protected:
1560 void SetUp() override { 1555 void SetUp() override {
1561 InitializeContext("OpenGL ES 3.0", ""); 1556 InitializeContext("OpenGL ES 3.0", "");
1562 } 1557 }
1563 1558
1564 void InitializeContext(const char* gl_version, const char* extensions) { 1559 void InitializeContext(const char* gl_version, const char* extensions) {
1565 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions); 1560 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions);
1566 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(), 1561 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(),
1567 extensions, "", gl_version, manager_.context_type()); 1562 extensions, "", gl_version, context_type_);
1568 feature_info_->InitializeForTesting(CONTEXT_TYPE_OPENGLES3); 1563 feature_info_->InitializeForTesting(CONTEXT_TYPE_OPENGLES3);
1569 decoder_.reset(new MockGLES2Decoder()); 1564 decoder_.reset(new MockGLES2Decoder());
1570 manager_.CreateFramebuffer(kClient1Id, kService1Id); 1565 manager_.CreateFramebuffer(kClient1Id, kService1Id);
1571 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 1566 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
1572 framebuffer_ = manager_.GetFramebuffer(kClient1Id); 1567 framebuffer_ = manager_.GetFramebuffer(kClient1Id);
1573 ASSERT_TRUE(framebuffer_ != nullptr); 1568 ASSERT_TRUE(framebuffer_ != nullptr);
1574 } 1569 }
1575 }; 1570 };
1576 1571
1577 TEST_F(FramebufferInfoES3Test, DifferentDimensions) { 1572 TEST_F(FramebufferInfoES3Test, DifferentDimensions) {
1578 const GLuint kRenderbufferClient1Id = 33; 1573 const GLuint kRenderbufferClient1Id = 33;
1579 const GLuint kRenderbufferService1Id = 333; 1574 const GLuint kRenderbufferService1Id = 333;
1580 const GLuint kRenderbufferClient2Id = 34; 1575 const GLuint kRenderbufferClient2Id = 34;
1581 const GLuint kRenderbufferService2Id = 334; 1576 const GLuint kRenderbufferService2Id = 334;
1582 const GLsizei kWidth1 = 16; 1577 const GLsizei kWidth1 = 16;
1583 const GLsizei kHeight1 = 32; 1578 const GLsizei kHeight1 = 32;
1584 const GLenum kFormat1 = GL_RGBA4; 1579 const GLenum kFormat1 = GL_RGBA4;
1585 const GLsizei kSamples1 = 0; 1580 const GLsizei kSamples1 = 0;
1586 const GLsizei kWidth2 = 32; // Different from kWidth1 1581 const GLsizei kWidth2 = 32; // Different from kWidth1
1587 const GLsizei kHeight2 = 32; 1582 const GLsizei kHeight2 = 32;
1588 const GLenum kFormat2 = GL_DEPTH_COMPONENT16; 1583 const GLenum kFormat2 = GL_DEPTH_COMPONENT16;
1589 const GLsizei kSamples2 = 0; 1584 const GLsizei kSamples2 = 0;
1590 1585
1591 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 1586 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
1592 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 1587 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
1593 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 1588 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
1594 EXPECT_FALSE(
1595 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
1596 1589
1597 renderbuffer_manager_->CreateRenderbuffer( 1590 renderbuffer_manager_->CreateRenderbuffer(
1598 kRenderbufferClient1Id, kRenderbufferService1Id); 1591 kRenderbufferClient1Id, kRenderbufferService1Id);
1599 Renderbuffer* renderbuffer1 = 1592 Renderbuffer* renderbuffer1 =
1600 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id); 1593 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id);
1601 ASSERT_TRUE(renderbuffer1 != nullptr); 1594 ASSERT_TRUE(renderbuffer1 != nullptr);
1602 renderbuffer_manager_->SetInfo( 1595 renderbuffer_manager_->SetInfo(
1603 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); 1596 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1);
1604 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); 1597 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1);
1605 1598
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId); 1660 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId);
1668 ASSERT_TRUE(renderbuffer != nullptr); 1661 ASSERT_TRUE(renderbuffer != nullptr);
1669 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer); 1662 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer);
1670 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment()); 1663 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment());
1671 } 1664 }
1672 1665
1673 } // namespace gles2 1666 } // namespace gles2
1674 } // namespace gpu 1667 } // namespace gpu
1675 1668
1676 1669
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698