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

Side by Side 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 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/renderbuffer_manager.h" 8 #include "gpu/command_buffer/service/renderbuffer_manager.h"
9 #include "gpu/command_buffer/service/test_helper.h" 9 #include "gpu/command_buffer/service/test_helper.h"
10 #include "gpu/command_buffer/service/texture_manager.h" 10 #include "gpu/command_buffer/service/texture_manager.h"
(...skipping 15 matching lines...) Expand all
26 } // namespace 26 } // namespace
27 27
28 class FramebufferManagerTest : public testing::Test { 28 class FramebufferManagerTest : public testing::Test {
29 public: 29 public:
30 FramebufferManagerTest() 30 FramebufferManagerTest()
31 : manager_(1, 1), 31 : manager_(1, 1),
32 texture_manager_( 32 texture_manager_(
33 NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize), 33 NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize),
34 renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples, 34 renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples,
35 kDepth24Supported) { 35 kDepth24Supported) {
36
37 } 36 }
38 virtual ~FramebufferManagerTest() { 37 virtual ~FramebufferManagerTest() {
39 manager_.Destroy(false); 38 manager_.Destroy(false);
40 texture_manager_.Destroy(false); 39 texture_manager_.Destroy(false);
41 renderbuffer_manager_.Destroy(false); 40 renderbuffer_manager_.Destroy(false);
42 } 41 }
43 42
44 protected: 43 protected:
45 virtual void SetUp() { 44 virtual void SetUp() {
46 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 45 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 ASSERT_TRUE(framebuffer1 == NULL); 102 ASSERT_TRUE(framebuffer1 == NULL);
104 } 103 }
105 104
106 class FramebufferInfoTest : public testing::Test { 105 class FramebufferInfoTest : public testing::Test {
107 public: 106 public:
108 static const GLuint kClient1Id = 1; 107 static const GLuint kClient1Id = 1;
109 static const GLuint kService1Id = 11; 108 static const GLuint kService1Id = 11;
110 109
111 FramebufferInfoTest() 110 FramebufferInfoTest()
112 : manager_(1, 1), 111 : manager_(1, 1),
113 texture_manager_( 112 feature_info_(new FeatureInfo()),
114 NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize),
115 renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples, 113 renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples,
116 kDepth24Supported) { 114 kDepth24Supported) {
115 texture_manager_.reset(new TextureManager(NULL, feature_info_.get(),
116 kMaxTextureSize, kMaxCubemapSize));
117 } 117 }
118 virtual ~FramebufferInfoTest() { 118 virtual ~FramebufferInfoTest() {
119 manager_.Destroy(false); 119 manager_.Destroy(false);
120 texture_manager_.Destroy(false); 120 texture_manager_->Destroy(false);
121 renderbuffer_manager_.Destroy(false); 121 renderbuffer_manager_.Destroy(false);
122 } 122 }
123 123
124 protected: 124 protected:
125 virtual void SetUp() { 125 virtual void SetUp() {
126 InitializeContext("", "");
127 }
128
129 void InitializeContext(const char* gl_version, const char* extensions) {
126 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 130 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
127 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); 131 ::gfx::MockGLInterface::SetGLInterface(gl_.get());
132 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(),
133 extensions, "", gl_version);
134 feature_info_->Initialize();
128 manager_.CreateFramebuffer(kClient1Id, kService1Id); 135 manager_.CreateFramebuffer(kClient1Id, kService1Id);
129 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 136 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
130 framebuffer_ = manager_.GetFramebuffer(kClient1Id); 137 framebuffer_ = manager_.GetFramebuffer(kClient1Id);
131 ASSERT_TRUE(framebuffer_ != NULL); 138 ASSERT_TRUE(framebuffer_ != NULL);
132 } 139 }
133 140
134 virtual void TearDown() { 141 virtual void TearDown() {
135 ::gfx::MockGLInterface::SetGLInterface(NULL); 142 ::gfx::MockGLInterface::SetGLInterface(NULL);
136 gl_.reset(); 143 gl_.reset();
137 } 144 }
138 145
139 // Use StrictMock to make 100% sure we know how GL will be called. 146 // Use StrictMock to make 100% sure we know how GL will be called.
140 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 147 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
141 FramebufferManager manager_; 148 FramebufferManager manager_;
142 Framebuffer* framebuffer_; 149 Framebuffer* framebuffer_;
143 TextureManager texture_manager_; 150 scoped_refptr<FeatureInfo> feature_info_;
151 scoped_ptr<TextureManager> texture_manager_;
144 RenderbufferManager renderbuffer_manager_; 152 RenderbufferManager renderbuffer_manager_;
145 scoped_ptr<MockErrorState> error_state_; 153 scoped_ptr<MockErrorState> error_state_;
146 }; 154 };
147 155
148 // GCC requires these declarations, but MSVC requires they not be present 156 // GCC requires these declarations, but MSVC requires they not be present
149 #ifndef COMPILER_MSVC 157 #ifndef COMPILER_MSVC
150 const GLuint FramebufferInfoTest::kClient1Id; 158 const GLuint FramebufferInfoTest::kClient1Id;
151 const GLuint FramebufferInfoTest::kService1Id; 159 const GLuint FramebufferInfoTest::kService1Id;
152 #endif 160 #endif
153 161
154 TEST_F(FramebufferInfoTest, Basic) { 162 TEST_F(FramebufferInfoTest, Basic) {
155 EXPECT_EQ(kService1Id, framebuffer_->service_id()); 163 EXPECT_EQ(kService1Id, framebuffer_->service_id());
156 EXPECT_FALSE(framebuffer_->IsDeleted()); 164 EXPECT_FALSE(framebuffer_->IsDeleted());
157 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0)); 165 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0));
158 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT)); 166 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT));
159 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT)); 167 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT));
160 EXPECT_TRUE( 168 EXPECT_TRUE(
161 NULL == framebuffer_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); 169 NULL == framebuffer_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
162 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); 170 EXPECT_FALSE(framebuffer_->HasDepthAttachment());
163 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 171 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
164 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), 172 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT),
165 framebuffer_->IsPossiblyComplete()); 173 framebuffer_->IsPossiblyComplete(feature_info_.get()));
166 EXPECT_TRUE(framebuffer_->IsCleared()); 174 EXPECT_TRUE(framebuffer_->IsCleared());
167 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); 175 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat());
168 EXPECT_FALSE(manager_.IsComplete(framebuffer_)); 176 EXPECT_FALSE(manager_.IsComplete(framebuffer_));
169 } 177 }
170 178
171 TEST_F(FramebufferInfoTest, AttachRenderbuffer) { 179 TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
172 const GLuint kRenderbufferClient1Id = 33; 180 const GLuint kRenderbufferClient1Id = 33;
173 const GLuint kRenderbufferService1Id = 333; 181 const GLuint kRenderbufferService1Id = 333;
174 const GLuint kRenderbufferClient2Id = 34; 182 const GLuint kRenderbufferClient2Id = 34;
175 const GLuint kRenderbufferService2Id = 334; 183 const GLuint kRenderbufferService2Id = 334;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 217
210 // check adding one attachment 218 // check adding one attachment
211 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); 219 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1);
212 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 220 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
213 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 221 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
214 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4), 222 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4),
215 framebuffer_->GetColorAttachmentFormat()); 223 framebuffer_->GetColorAttachmentFormat());
216 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); 224 EXPECT_FALSE(framebuffer_->HasDepthAttachment());
217 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 225 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
218 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 226 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
219 framebuffer_->IsPossiblyComplete()); 227 framebuffer_->IsPossiblyComplete(feature_info_.get()));
220 EXPECT_TRUE(framebuffer_->IsCleared()); 228 EXPECT_TRUE(framebuffer_->IsCleared());
221 229
222 // Try a format that's not good for COLOR_ATTACHMENT0. 230 // Try a format that's not good for COLOR_ATTACHMENT0.
223 renderbuffer_manager_.SetInfo( 231 renderbuffer_manager_.SetInfo(
224 renderbuffer1, kSamples1, kBadFormat1, kWidth1, kHeight1); 232 renderbuffer1, kSamples1, kBadFormat1, kWidth1, kHeight1);
225 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 233 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
226 framebuffer_->IsPossiblyComplete()); 234 framebuffer_->IsPossiblyComplete(feature_info_.get()));
227 235
228 // Try a good format. 236 // Try a good format.
229 renderbuffer_manager_.SetInfo( 237 renderbuffer_manager_.SetInfo(
230 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); 238 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1);
231 EXPECT_EQ(static_cast<GLenum>(kFormat1), 239 EXPECT_EQ(static_cast<GLenum>(kFormat1),
232 framebuffer_->GetColorAttachmentFormat()); 240 framebuffer_->GetColorAttachmentFormat());
233 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); 241 EXPECT_FALSE(framebuffer_->HasDepthAttachment());
234 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 242 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
235 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 243 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
236 framebuffer_->IsPossiblyComplete()); 244 framebuffer_->IsPossiblyComplete(feature_info_.get()));
237 EXPECT_FALSE(framebuffer_->IsCleared()); 245 EXPECT_FALSE(framebuffer_->IsCleared());
238 246
239 // check adding another 247 // check adding another
240 renderbuffer_manager_.CreateRenderbuffer( 248 renderbuffer_manager_.CreateRenderbuffer(
241 kRenderbufferClient2Id, kRenderbufferService2Id); 249 kRenderbufferClient2Id, kRenderbufferService2Id);
242 Renderbuffer* renderbuffer2 = 250 Renderbuffer* renderbuffer2 =
243 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient2Id); 251 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient2Id);
244 ASSERT_TRUE(renderbuffer2 != NULL); 252 ASSERT_TRUE(renderbuffer2 != NULL);
245 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2); 253 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2);
246 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 254 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
247 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 255 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
248 EXPECT_EQ(static_cast<GLenum>(kFormat1), 256 EXPECT_EQ(static_cast<GLenum>(kFormat1),
249 framebuffer_->GetColorAttachmentFormat()); 257 framebuffer_->GetColorAttachmentFormat());
250 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 258 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
251 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 259 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
252 // The attachment has a size of 0,0 so depending on the order of the map 260 // The attachment has a size of 0,0 so depending on the order of the map
253 // of attachments it could either get INCOMPLETE_ATTACHMENT because it's 0,0 261 // of attachments it could either get INCOMPLETE_ATTACHMENT because it's 0,0
254 // or INCOMPLETE_DIMENSIONS because it's not the same size as the other 262 // or INCOMPLETE_DIMENSIONS because it's not the same size as the other
255 // attachment. 263 // attachment.
256 GLenum status = framebuffer_->IsPossiblyComplete(); 264 GLenum status = framebuffer_->IsPossiblyComplete(feature_info_.get());
257 EXPECT_TRUE( 265 EXPECT_TRUE(
258 status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT || 266 status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT ||
259 status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT); 267 status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT);
260 EXPECT_FALSE(framebuffer_->IsCleared()); 268 EXPECT_FALSE(framebuffer_->IsCleared());
261 269
262 renderbuffer_manager_.SetInfo( 270 renderbuffer_manager_.SetInfo(
263 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2); 271 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2);
264 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 272 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
265 framebuffer_->IsPossiblyComplete()); 273 framebuffer_->IsPossiblyComplete(feature_info_.get()));
266 EXPECT_FALSE(framebuffer_->IsCleared()); 274 EXPECT_FALSE(framebuffer_->IsCleared());
267 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 275 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
268 276
269 // check marking them as cleared. 277 // check marking them as cleared.
270 manager_.MarkAttachmentsAsCleared( 278 manager_.MarkAttachmentsAsCleared(
271 framebuffer_, &renderbuffer_manager_, &texture_manager_); 279 framebuffer_, &renderbuffer_manager_, texture_manager_.get());
272 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 280 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
273 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 281 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
274 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 282 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
275 framebuffer_->IsPossiblyComplete()); 283 framebuffer_->IsPossiblyComplete(feature_info_.get()));
276 EXPECT_TRUE(framebuffer_->IsCleared()); 284 EXPECT_TRUE(framebuffer_->IsCleared());
277 285
278 // Check adding one that is already cleared. 286 // Check adding one that is already cleared.
279 renderbuffer_manager_.CreateRenderbuffer( 287 renderbuffer_manager_.CreateRenderbuffer(
280 kRenderbufferClient3Id, kRenderbufferService3Id); 288 kRenderbufferClient3Id, kRenderbufferService3Id);
281 Renderbuffer* renderbuffer3 = 289 Renderbuffer* renderbuffer3 =
282 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient3Id); 290 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient3Id);
283 ASSERT_TRUE(renderbuffer3 != NULL); 291 ASSERT_TRUE(renderbuffer3 != NULL);
284 renderbuffer_manager_.SetInfo( 292 renderbuffer_manager_.SetInfo(
285 renderbuffer3, kSamples3, kFormat3, kWidth3, kHeight3); 293 renderbuffer3, kSamples3, kFormat3, kWidth3, kHeight3);
286 renderbuffer_manager_.SetCleared(renderbuffer3, true); 294 renderbuffer_manager_.SetCleared(renderbuffer3, true);
287 295
288 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer3); 296 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer3);
289 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 297 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
290 EXPECT_EQ(static_cast<GLenum>(kFormat1), 298 EXPECT_EQ(static_cast<GLenum>(kFormat1),
291 framebuffer_->GetColorAttachmentFormat()); 299 framebuffer_->GetColorAttachmentFormat());
292 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 300 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
293 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); 301 EXPECT_TRUE(framebuffer_->HasStencilAttachment());
294 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 302 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
295 framebuffer_->IsPossiblyComplete()); 303 framebuffer_->IsPossiblyComplete(feature_info_.get()));
296 EXPECT_TRUE(framebuffer_->IsCleared()); 304 EXPECT_TRUE(framebuffer_->IsCleared());
297 305
298 // Check marking the renderbuffer as unclared. 306 // Check marking the renderbuffer as unclared.
299 renderbuffer_manager_.SetInfo( 307 renderbuffer_manager_.SetInfo(
300 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); 308 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1);
301 EXPECT_EQ(static_cast<GLenum>(kFormat1), 309 EXPECT_EQ(static_cast<GLenum>(kFormat1),
302 framebuffer_->GetColorAttachmentFormat()); 310 framebuffer_->GetColorAttachmentFormat());
303 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 311 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
304 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); 312 EXPECT_TRUE(framebuffer_->HasStencilAttachment());
305 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 313 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
306 framebuffer_->IsPossiblyComplete()); 314 framebuffer_->IsPossiblyComplete(feature_info_.get()));
307 EXPECT_FALSE(framebuffer_->IsCleared()); 315 EXPECT_FALSE(framebuffer_->IsCleared());
308 316
309 const Framebuffer::Attachment* attachment = 317 const Framebuffer::Attachment* attachment =
310 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); 318 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0);
311 ASSERT_TRUE(attachment != NULL); 319 ASSERT_TRUE(attachment != NULL);
312 EXPECT_EQ(kWidth1, attachment->width()); 320 EXPECT_EQ(kWidth1, attachment->width());
313 EXPECT_EQ(kHeight1, attachment->height()); 321 EXPECT_EQ(kHeight1, attachment->height());
314 EXPECT_EQ(kSamples1, attachment->samples()); 322 EXPECT_EQ(kSamples1, attachment->samples());
315 EXPECT_EQ(kFormat1, attachment->internal_format()); 323 EXPECT_EQ(kFormat1, attachment->internal_format());
316 EXPECT_FALSE(attachment->cleared()); 324 EXPECT_FALSE(attachment->cleared());
317 325
318 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 326 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
319 327
320 // Clear it. 328 // Clear it.
321 manager_.MarkAttachmentsAsCleared( 329 manager_.MarkAttachmentsAsCleared(
322 framebuffer_, &renderbuffer_manager_, &texture_manager_); 330 framebuffer_, &renderbuffer_manager_, texture_manager_.get());
323 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 331 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
324 EXPECT_TRUE(framebuffer_->IsCleared()); 332 EXPECT_TRUE(framebuffer_->IsCleared());
325 333
326 // Check replacing an attachment 334 // Check replacing an attachment
327 renderbuffer_manager_.CreateRenderbuffer( 335 renderbuffer_manager_.CreateRenderbuffer(
328 kRenderbufferClient4Id, kRenderbufferService4Id); 336 kRenderbufferClient4Id, kRenderbufferService4Id);
329 Renderbuffer* renderbuffer4 = 337 Renderbuffer* renderbuffer4 =
330 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient4Id); 338 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient4Id);
331 ASSERT_TRUE(renderbuffer4 != NULL); 339 ASSERT_TRUE(renderbuffer4 != NULL);
332 renderbuffer_manager_.SetInfo( 340 renderbuffer_manager_.SetInfo(
333 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); 341 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4);
334 342
335 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4); 343 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4);
336 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 344 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
337 EXPECT_FALSE(framebuffer_->IsCleared()); 345 EXPECT_FALSE(framebuffer_->IsCleared());
338 346
339 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); 347 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT);
340 ASSERT_TRUE(attachment != NULL); 348 ASSERT_TRUE(attachment != NULL);
341 EXPECT_EQ(kWidth4, attachment->width()); 349 EXPECT_EQ(kWidth4, attachment->width());
342 EXPECT_EQ(kHeight4, attachment->height()); 350 EXPECT_EQ(kHeight4, attachment->height());
343 EXPECT_EQ(kSamples4, attachment->samples()); 351 EXPECT_EQ(kSamples4, attachment->samples());
344 EXPECT_EQ(kFormat4, attachment->internal_format()); 352 EXPECT_EQ(kFormat4, attachment->internal_format());
345 EXPECT_FALSE(attachment->cleared()); 353 EXPECT_FALSE(attachment->cleared());
346 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 354 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
347 framebuffer_->IsPossiblyComplete()); 355 framebuffer_->IsPossiblyComplete(feature_info_.get()));
348 356
349 // Check changing an attachment. 357 // Check changing an attachment.
350 renderbuffer_manager_.SetInfo( 358 renderbuffer_manager_.SetInfo(
351 renderbuffer4, kSamples4, kFormat4, kWidth4 + 1, kHeight4); 359 renderbuffer4, kSamples4, kFormat4, kWidth4 + 1, kHeight4);
352 360
353 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); 361 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT);
354 ASSERT_TRUE(attachment != NULL); 362 ASSERT_TRUE(attachment != NULL);
355 EXPECT_EQ(kWidth4 + 1, attachment->width()); 363 EXPECT_EQ(kWidth4 + 1, attachment->width());
356 EXPECT_EQ(kHeight4, attachment->height()); 364 EXPECT_EQ(kHeight4, attachment->height());
357 EXPECT_EQ(kSamples4, attachment->samples()); 365 EXPECT_EQ(kSamples4, attachment->samples());
358 EXPECT_EQ(kFormat4, attachment->internal_format()); 366 EXPECT_EQ(kFormat4, attachment->internal_format());
359 EXPECT_FALSE(attachment->cleared()); 367 EXPECT_FALSE(attachment->cleared());
360 EXPECT_FALSE(framebuffer_->IsCleared()); 368 EXPECT_FALSE(framebuffer_->IsCleared());
361 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT), 369 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT),
362 framebuffer_->IsPossiblyComplete()); 370 framebuffer_->IsPossiblyComplete(feature_info_.get()));
363 371
364 // Check removing it. 372 // Check removing it.
365 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL); 373 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL);
366 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 374 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
367 EXPECT_EQ(static_cast<GLenum>(kFormat1), 375 EXPECT_EQ(static_cast<GLenum>(kFormat1),
368 framebuffer_->GetColorAttachmentFormat()); 376 framebuffer_->GetColorAttachmentFormat());
369 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 377 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
370 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 378 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
371 379
372 EXPECT_TRUE(framebuffer_->IsCleared()); 380 EXPECT_TRUE(framebuffer_->IsCleared());
373 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 381 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
374 framebuffer_->IsPossiblyComplete()); 382 framebuffer_->IsPossiblyComplete(feature_info_.get()));
375 383
376 // Remove depth, Set color to 0 size. 384 // Remove depth, Set color to 0 size.
377 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, NULL); 385 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, NULL);
378 renderbuffer_manager_.SetInfo(renderbuffer1, kSamples1, kFormat1, 0, 0); 386 renderbuffer_manager_.SetInfo(renderbuffer1, kSamples1, kFormat1, 0, 0);
379 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 387 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
380 framebuffer_->IsPossiblyComplete()); 388 framebuffer_->IsPossiblyComplete(feature_info_.get()));
381 389
382 // Remove color. 390 // Remove color.
383 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, NULL); 391 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, NULL);
384 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), 392 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT),
385 framebuffer_->IsPossiblyComplete()); 393 framebuffer_->IsPossiblyComplete(feature_info_.get()));
386 } 394 }
387 395
388 TEST_F(FramebufferInfoTest, AttachTexture) { 396 TEST_F(FramebufferInfoTest, AttachTexture) {
389 const GLuint kTextureClient1Id = 33; 397 const GLuint kTextureClient1Id = 33;
390 const GLuint kTextureService1Id = 333; 398 const GLuint kTextureService1Id = 333;
391 const GLuint kTextureClient2Id = 34; 399 const GLuint kTextureClient2Id = 34;
392 const GLuint kTextureService2Id = 334; 400 const GLuint kTextureService2Id = 334;
393 const GLint kDepth = 1; 401 const GLint kDepth = 1;
394 const GLint kBorder = 0; 402 const GLint kBorder = 0;
395 const GLenum kType = GL_UNSIGNED_BYTE; 403 const GLenum kType = GL_UNSIGNED_BYTE;
(...skipping 14 matching lines...) Expand all
410 const GLsizei kHeight3 = 123; 418 const GLsizei kHeight3 = 123;
411 const GLint kLevel3 = 0; 419 const GLint kLevel3 = 0;
412 const GLenum kFormat3 = GL_RGB565; 420 const GLenum kFormat3 = GL_RGB565;
413 const GLsizei kSamples3 = 0; 421 const GLsizei kSamples3 = 0;
414 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 422 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
415 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 423 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
416 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 424 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
417 EXPECT_FALSE( 425 EXPECT_FALSE(
418 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); 426 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
419 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), 427 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT),
420 framebuffer_->IsPossiblyComplete()); 428 framebuffer_->IsPossiblyComplete(feature_info_.get()));
421 429
422 texture_manager_.CreateTexture(kTextureClient1Id, kTextureService1Id); 430 texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id);
423 scoped_refptr<TextureRef> texture1( 431 scoped_refptr<TextureRef> texture1(
424 texture_manager_.GetTexture(kTextureClient1Id)); 432 texture_manager_->GetTexture(kTextureClient1Id));
425 ASSERT_TRUE(texture1.get() != NULL); 433 ASSERT_TRUE(texture1.get() != NULL);
426 434
427 // check adding one attachment 435 // check adding one attachment
428 framebuffer_->AttachTexture( 436 framebuffer_->AttachTexture(
429 GL_COLOR_ATTACHMENT0, texture1.get(), kTarget1, kLevel1, kSamples1); 437 GL_COLOR_ATTACHMENT0, texture1.get(), kTarget1, kLevel1, kSamples1);
430 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 438 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
431 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 439 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
432 framebuffer_->IsPossiblyComplete()); 440 framebuffer_->IsPossiblyComplete(feature_info_.get()));
433 EXPECT_TRUE(framebuffer_->IsCleared()); 441 EXPECT_TRUE(framebuffer_->IsCleared());
434 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); 442 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat());
435 443
436 // Try format that doesn't work with COLOR_ATTACHMENT0 444 // Try format that doesn't work with COLOR_ATTACHMENT0
437 texture_manager_.SetTarget(texture1.get(), GL_TEXTURE_2D); 445 texture_manager_->SetTarget(texture1.get(), GL_TEXTURE_2D);
438 texture_manager_.SetLevelInfo(texture1.get(), 446 texture_manager_->SetLevelInfo(texture1.get(),
439 GL_TEXTURE_2D, 447 GL_TEXTURE_2D,
440 kLevel1, 448 kLevel1,
441 kBadFormat1, 449 kBadFormat1,
442 kWidth1, 450 kWidth1,
443 kHeight1, 451 kHeight1,
444 kDepth, 452 kDepth,
445 kBorder, 453 kBorder,
446 kBadFormat1, 454 kBadFormat1,
447 kType, 455 kType,
448 true); 456 true);
449 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 457 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
450 framebuffer_->IsPossiblyComplete()); 458 framebuffer_->IsPossiblyComplete(feature_info_.get()));
451 459
452 // Try a good format. 460 // Try a good format.
453 texture_manager_.SetLevelInfo(texture1.get(), 461 texture_manager_->SetLevelInfo(texture1.get(),
454 GL_TEXTURE_2D, 462 GL_TEXTURE_2D,
455 kLevel1, 463 kLevel1,
456 kFormat1, 464 kFormat1,
457 kWidth1, 465 kWidth1,
458 kHeight1, 466 kHeight1,
459 kDepth, 467 kDepth,
460 kBorder, 468 kBorder,
461 kFormat1, 469 kFormat1,
462 kType, 470 kType,
463 false); 471 false);
464 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 472 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
465 framebuffer_->IsPossiblyComplete()); 473 framebuffer_->IsPossiblyComplete(feature_info_.get()));
466 EXPECT_FALSE(framebuffer_->IsCleared()); 474 EXPECT_FALSE(framebuffer_->IsCleared());
467 texture_manager_.SetLevelInfo(texture1.get(), 475 texture_manager_->SetLevelInfo(texture1.get(),
468 GL_TEXTURE_2D, 476 GL_TEXTURE_2D,
469 kLevel1, 477 kLevel1,
470 kFormat1, 478 kFormat1,
471 kWidth1, 479 kWidth1,
472 kHeight1, 480 kHeight1,
473 kDepth, 481 kDepth,
474 kBorder, 482 kBorder,
475 kFormat1, 483 kFormat1,
476 kType, 484 kType,
477 true); 485 true);
478 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 486 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
479 framebuffer_->IsPossiblyComplete()); 487 framebuffer_->IsPossiblyComplete(feature_info_.get()));
480 EXPECT_TRUE(framebuffer_->IsCleared()); 488 EXPECT_TRUE(framebuffer_->IsCleared());
481 EXPECT_EQ(static_cast<GLenum>(kFormat1), 489 EXPECT_EQ(static_cast<GLenum>(kFormat1),
482 framebuffer_->GetColorAttachmentFormat()); 490 framebuffer_->GetColorAttachmentFormat());
483 491
484 const Framebuffer::Attachment* attachment = 492 const Framebuffer::Attachment* attachment =
485 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); 493 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0);
486 ASSERT_TRUE(attachment != NULL); 494 ASSERT_TRUE(attachment != NULL);
487 EXPECT_EQ(kWidth1, attachment->width()); 495 EXPECT_EQ(kWidth1, attachment->width());
488 EXPECT_EQ(kHeight1, attachment->height()); 496 EXPECT_EQ(kHeight1, attachment->height());
489 EXPECT_EQ(kSamples1, attachment->samples()); 497 EXPECT_EQ(kSamples1, attachment->samples());
490 EXPECT_EQ(kFormat1, attachment->internal_format()); 498 EXPECT_EQ(kFormat1, attachment->internal_format());
491 EXPECT_TRUE(attachment->cleared()); 499 EXPECT_TRUE(attachment->cleared());
492 500
493 // Check replacing an attachment 501 // Check replacing an attachment
494 texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); 502 texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
495 scoped_refptr<TextureRef> texture2( 503 scoped_refptr<TextureRef> texture2(
496 texture_manager_.GetTexture(kTextureClient2Id)); 504 texture_manager_->GetTexture(kTextureClient2Id));
497 ASSERT_TRUE(texture2.get() != NULL); 505 ASSERT_TRUE(texture2.get() != NULL);
498 texture_manager_.SetTarget(texture2.get(), GL_TEXTURE_2D); 506 texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D);
499 texture_manager_.SetLevelInfo(texture2.get(), 507 texture_manager_->SetLevelInfo(texture2.get(),
500 GL_TEXTURE_2D, 508 GL_TEXTURE_2D,
501 kLevel2, 509 kLevel2,
502 kFormat2, 510 kFormat2,
503 kWidth2, 511 kWidth2,
504 kHeight2, 512 kHeight2,
505 kDepth, 513 kDepth,
506 kBorder, 514 kBorder,
507 kFormat2, 515 kFormat2,
508 kType, 516 kType,
509 true); 517 true);
510 518
511 framebuffer_->AttachTexture( 519 framebuffer_->AttachTexture(
512 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget2, kLevel2, kSamples2); 520 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget2, kLevel2, kSamples2);
513 EXPECT_EQ(static_cast<GLenum>(kFormat2), 521 EXPECT_EQ(static_cast<GLenum>(kFormat2),
514 framebuffer_->GetColorAttachmentFormat()); 522 framebuffer_->GetColorAttachmentFormat());
515 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 523 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
516 framebuffer_->IsPossiblyComplete()); 524 framebuffer_->IsPossiblyComplete(feature_info_.get()));
517 EXPECT_TRUE(framebuffer_->IsCleared()); 525 EXPECT_TRUE(framebuffer_->IsCleared());
518 526
519 attachment = framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); 527 attachment = framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0);
520 ASSERT_TRUE(attachment != NULL); 528 ASSERT_TRUE(attachment != NULL);
521 EXPECT_EQ(kWidth2, attachment->width()); 529 EXPECT_EQ(kWidth2, attachment->width());
522 EXPECT_EQ(kHeight2, attachment->height()); 530 EXPECT_EQ(kHeight2, attachment->height());
523 EXPECT_EQ(kSamples2, attachment->samples()); 531 EXPECT_EQ(kSamples2, attachment->samples());
524 EXPECT_EQ(kFormat2, attachment->internal_format()); 532 EXPECT_EQ(kFormat2, attachment->internal_format());
525 EXPECT_TRUE(attachment->cleared()); 533 EXPECT_TRUE(attachment->cleared());
526 534
527 // Check changing attachment 535 // Check changing attachment
528 texture_manager_.SetLevelInfo(texture2.get(), 536 texture_manager_->SetLevelInfo(texture2.get(),
529 GL_TEXTURE_2D, 537 GL_TEXTURE_2D,
530 kLevel3, 538 kLevel3,
531 kFormat3, 539 kFormat3,
532 kWidth3, 540 kWidth3,
533 kHeight3, 541 kHeight3,
534 kDepth, 542 kDepth,
535 kBorder, 543 kBorder,
536 kFormat3, 544 kFormat3,
537 kType, 545 kType,
538 false); 546 false);
539 attachment = framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); 547 attachment = framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0);
540 ASSERT_TRUE(attachment != NULL); 548 ASSERT_TRUE(attachment != NULL);
541 EXPECT_EQ(kWidth3, attachment->width()); 549 EXPECT_EQ(kWidth3, attachment->width());
542 EXPECT_EQ(kHeight3, attachment->height()); 550 EXPECT_EQ(kHeight3, attachment->height());
543 EXPECT_EQ(kSamples3, attachment->samples()); 551 EXPECT_EQ(kSamples3, attachment->samples());
544 EXPECT_EQ(kFormat3, attachment->internal_format()); 552 EXPECT_EQ(kFormat3, attachment->internal_format());
545 EXPECT_FALSE(attachment->cleared()); 553 EXPECT_FALSE(attachment->cleared());
546 EXPECT_EQ(static_cast<GLenum>(kFormat3), 554 EXPECT_EQ(static_cast<GLenum>(kFormat3),
547 framebuffer_->GetColorAttachmentFormat()); 555 framebuffer_->GetColorAttachmentFormat());
548 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 556 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
549 framebuffer_->IsPossiblyComplete()); 557 framebuffer_->IsPossiblyComplete(feature_info_.get()));
550 EXPECT_FALSE(framebuffer_->IsCleared()); 558 EXPECT_FALSE(framebuffer_->IsCleared());
551 559
552 // Set to size 0 560 // Set to size 0
553 texture_manager_.SetLevelInfo(texture2.get(), 561 texture_manager_->SetLevelInfo(texture2.get(),
554 GL_TEXTURE_2D, 562 GL_TEXTURE_2D,
555 kLevel3, 563 kLevel3,
556 kFormat3, 564 kFormat3,
557 0, 565 0,
558 0, 566 0,
559 kDepth, 567 kDepth,
560 kBorder, 568 kBorder,
561 kFormat3, 569 kFormat3,
562 kType, 570 kType,
563 false); 571 false);
564 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 572 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
565 framebuffer_->IsPossiblyComplete()); 573 framebuffer_->IsPossiblyComplete(feature_info_.get()));
566 574
567 // Check removing it. 575 // Check removing it.
568 framebuffer_->AttachTexture(GL_COLOR_ATTACHMENT0, NULL, 0, 0, 0); 576 framebuffer_->AttachTexture(GL_COLOR_ATTACHMENT0, NULL, 0, 0, 0);
569 EXPECT_TRUE(framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0) == NULL); 577 EXPECT_TRUE(framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0) == NULL);
570 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat()); 578 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat());
571 579
572 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), 580 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT),
573 framebuffer_->IsPossiblyComplete()); 581 framebuffer_->IsPossiblyComplete(feature_info_.get()));
574 EXPECT_TRUE(framebuffer_->IsCleared()); 582 EXPECT_TRUE(framebuffer_->IsCleared());
575 } 583 }
576 584
585 TEST_F(FramebufferInfoTest, AttachFloatTextureNotSupported) {
586 const GLuint kTextureClientId = 33;
587 const GLuint kTextureServiceId = 333;
588 const GLint kDepth = 1;
589 const GLint kBorder = 0;
590 const GLenum kType = GL_FLOAT;
591 const GLsizei kWidth = 16;
592 const GLsizei kHeight = 32;
593 const GLint kLevel = 0;
594 const GLenum kFormat = GL_RGBA;
595 const GLenum kInternalFormat = GL_RGBA32F;
596 const GLenum kBadInternalFormat = GL_RGBA;
597 const GLenum kTarget = GL_TEXTURE_2D;
598 const GLsizei kSamples = 0;
599 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
600 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
601 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
602
603 texture_manager_->CreateTexture(kTextureClientId, kTextureServiceId);
604 scoped_refptr<TextureRef> texture(
605 texture_manager_->GetTexture(kTextureClientId));
606 ASSERT_TRUE(texture.get() != NULL);
607
608 // check adding one attachment
609 framebuffer_->AttachTexture(
610 GL_COLOR_ATTACHMENT0, texture.get(), kTarget, kLevel, kSamples);
611 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat());
612
613 // Try unsized internalformat.
614 texture_manager_->SetTarget(texture.get(), GL_TEXTURE_2D);
615 texture_manager_->SetLevelInfo(texture.get(),
616 GL_TEXTURE_2D,
617 kLevel,
618 kBadInternalFormat,
619 kWidth,
620 kHeight,
621 kDepth,
622 kBorder,
623 kFormat,
624 kType,
625 true);
626 // Texture with an unsized internalformat is not allowed as an attachment
627 // unless working around ANGLE's unspecified behavior, regardless of
628 // whether float color attachments are allowed in general.
629 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
630 framebuffer_->IsPossiblyComplete(feature_info_.get()));
631
632 // Try a sized internalformat.
633 texture_manager_->SetLevelInfo(texture.get(),
634 GL_TEXTURE_2D,
635 kLevel,
636 kInternalFormat,
637 kWidth,
638 kHeight,
639 kDepth,
640 kBorder,
641 kFormat,
642 kType,
643 false);
644 // Texture with a sized float internalformat is allowed as an attachment
645 // only if float color attachment extension is present.
646 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
647 framebuffer_->IsPossiblyComplete(feature_info_.get()));
648 }
649
650 class FramebufferInfoFloatTest : public FramebufferInfoTest {
651 public:
652 FramebufferInfoFloatTest()
653 : FramebufferInfoTest() {
654 }
655 virtual ~FramebufferInfoFloatTest() {
656 }
657
658 protected:
659 virtual void SetUp() {
660 InitializeContext("OpenGL ES 3.0",
661 "GL_OES_texture_float GL_EXT_color_buffer_float");
662 }
663 };
664
665 TEST_F(FramebufferInfoFloatTest, AttachFloatTextureSupported) {
666 const GLuint kTextureClientId = 33;
667 const GLuint kTextureServiceId = 333;
668 const GLint kDepth = 1;
669 const GLint kBorder = 0;
670 const GLenum kType = GL_FLOAT;
671 const GLsizei kWidth = 16;
672 const GLsizei kHeight = 32;
673 const GLint kLevel = 0;
674 const GLenum kFormat = GL_RGBA;
675 const GLenum kInternalFormat = GL_RGBA32F;
676 const GLenum kBadInternalFormat = GL_RGBA;
677 const GLenum kTarget = GL_TEXTURE_2D;
678 const GLsizei kSamples = 0;
679 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
680 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
681 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
682
683 texture_manager_->CreateTexture(kTextureClientId, kTextureServiceId);
684 scoped_refptr<TextureRef> texture(
685 texture_manager_->GetTexture(kTextureClientId));
686 ASSERT_TRUE(texture.get() != NULL);
687
688 // check adding one attachment
689 framebuffer_->AttachTexture(
690 GL_COLOR_ATTACHMENT0, texture.get(), kTarget, kLevel, kSamples);
691 EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat());
692
693 // Try unsized internalformat.
694 texture_manager_->SetTarget(texture.get(), GL_TEXTURE_2D);
695 texture_manager_->SetLevelInfo(texture.get(),
696 GL_TEXTURE_2D,
697 kLevel,
698 kBadInternalFormat,
699 kWidth,
700 kHeight,
701 kDepth,
702 kBorder,
703 kFormat,
704 kType,
705 true);
706 // Texture with an unsized internalformat is not allowed as an attachment
707 // unless working around ANGLE's unspecified behavior, regardless of
708 // whether float color attachments are allowed in general.
709 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
710 framebuffer_->IsPossiblyComplete(feature_info_.get()));
711
712 // Try a sized internalformat.
713 texture_manager_->SetLevelInfo(texture.get(),
714 GL_TEXTURE_2D,
715 kLevel,
716 kInternalFormat,
717 kWidth,
718 kHeight,
719 kDepth,
720 kBorder,
721 kFormat,
722 kType,
723 false);
724 // Texture with a sized float internalformat is allowed as an attachment
725 // since float color attachment extension is present.
726 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
727 framebuffer_->IsPossiblyComplete(feature_info_.get()));
Ken Russell (switch to Gerrit) 2014/02/12 00:11:01 The code duplication between these tests is unfort
728 }
729
577 TEST_F(FramebufferInfoTest, UnbindRenderbuffer) { 730 TEST_F(FramebufferInfoTest, UnbindRenderbuffer) {
578 const GLuint kRenderbufferClient1Id = 33; 731 const GLuint kRenderbufferClient1Id = 33;
579 const GLuint kRenderbufferService1Id = 333; 732 const GLuint kRenderbufferService1Id = 333;
580 const GLuint kRenderbufferClient2Id = 34; 733 const GLuint kRenderbufferClient2Id = 34;
581 const GLuint kRenderbufferService2Id = 334; 734 const GLuint kRenderbufferService2Id = 334;
582 735
583 renderbuffer_manager_.CreateRenderbuffer( 736 renderbuffer_manager_.CreateRenderbuffer(
584 kRenderbufferClient1Id, kRenderbufferService1Id); 737 kRenderbufferClient1Id, kRenderbufferService1Id);
585 Renderbuffer* renderbuffer1 = 738 Renderbuffer* renderbuffer1 =
586 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id); 739 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id);
(...skipping 24 matching lines...) Expand all
611 764
612 TEST_F(FramebufferInfoTest, UnbindTexture) { 765 TEST_F(FramebufferInfoTest, UnbindTexture) {
613 const GLuint kTextureClient1Id = 33; 766 const GLuint kTextureClient1Id = 33;
614 const GLuint kTextureService1Id = 333; 767 const GLuint kTextureService1Id = 333;
615 const GLuint kTextureClient2Id = 34; 768 const GLuint kTextureClient2Id = 34;
616 const GLuint kTextureService2Id = 334; 769 const GLuint kTextureService2Id = 334;
617 const GLenum kTarget1 = GL_TEXTURE_2D; 770 const GLenum kTarget1 = GL_TEXTURE_2D;
618 const GLint kLevel1 = 0; 771 const GLint kLevel1 = 0;
619 const GLint kSamples1 = 0; 772 const GLint kSamples1 = 0;
620 773
621 texture_manager_.CreateTexture(kTextureClient1Id, kTextureService1Id); 774 texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id);
622 scoped_refptr<TextureRef> texture1( 775 scoped_refptr<TextureRef> texture1(
623 texture_manager_.GetTexture(kTextureClient1Id)); 776 texture_manager_->GetTexture(kTextureClient1Id));
624 ASSERT_TRUE(texture1.get() != NULL); 777 ASSERT_TRUE(texture1.get() != NULL);
625 texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); 778 texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
626 scoped_refptr<TextureRef> texture2( 779 scoped_refptr<TextureRef> texture2(
627 texture_manager_.GetTexture(kTextureClient2Id)); 780 texture_manager_->GetTexture(kTextureClient2Id));
628 ASSERT_TRUE(texture2.get() != NULL); 781 ASSERT_TRUE(texture2.get() != NULL);
629 782
630 // Attach to 2 attachment points. 783 // Attach to 2 attachment points.
631 framebuffer_->AttachTexture( 784 framebuffer_->AttachTexture(
632 GL_COLOR_ATTACHMENT0, texture1.get(), kTarget1, kLevel1, kSamples1); 785 GL_COLOR_ATTACHMENT0, texture1.get(), kTarget1, kLevel1, kSamples1);
633 framebuffer_->AttachTexture( 786 framebuffer_->AttachTexture(
634 GL_DEPTH_ATTACHMENT, texture1.get(), kTarget1, kLevel1, kSamples1); 787 GL_DEPTH_ATTACHMENT, texture1.get(), kTarget1, kLevel1, kSamples1);
635 // Check they were attached. 788 // Check they were attached.
636 EXPECT_TRUE(framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0) != NULL); 789 EXPECT_TRUE(framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0) != NULL);
637 EXPECT_TRUE(framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT) != NULL); 790 EXPECT_TRUE(framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT) != NULL);
(...skipping 16 matching lines...) Expand all
654 const GLuint kTextureService2Id = 334; 807 const GLuint kTextureService2Id = 334;
655 const GLenum kTarget1 = GL_TEXTURE_2D; 808 const GLenum kTarget1 = GL_TEXTURE_2D;
656 const GLint kLevel1 = 0; 809 const GLint kLevel1 = 0;
657 const GLint kSamples1 = 0; 810 const GLint kSamples1 = 0;
658 811
659 renderbuffer_manager_.CreateRenderbuffer( 812 renderbuffer_manager_.CreateRenderbuffer(
660 kRenderbufferClient1Id, kRenderbufferService1Id); 813 kRenderbufferClient1Id, kRenderbufferService1Id);
661 Renderbuffer* renderbuffer1 = 814 Renderbuffer* renderbuffer1 =
662 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id); 815 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id);
663 ASSERT_TRUE(renderbuffer1 != NULL); 816 ASSERT_TRUE(renderbuffer1 != NULL);
664 texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); 817 texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
665 scoped_refptr<TextureRef> texture2( 818 scoped_refptr<TextureRef> texture2(
666 texture_manager_.GetTexture(kTextureClient2Id)); 819 texture_manager_->GetTexture(kTextureClient2Id));
667 ASSERT_TRUE(texture2.get() != NULL); 820 ASSERT_TRUE(texture2.get() != NULL);
668 821
669 // Check MarkAsComlete marks as complete. 822 // Check MarkAsComlete marks as complete.
670 manager_.MarkAsComplete(framebuffer_); 823 manager_.MarkAsComplete(framebuffer_);
671 EXPECT_TRUE(manager_.IsComplete(framebuffer_)); 824 EXPECT_TRUE(manager_.IsComplete(framebuffer_));
672 825
673 // Check at attaching marks as not complete. 826 // Check at attaching marks as not complete.
674 framebuffer_->AttachTexture( 827 framebuffer_->AttachTexture(
675 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1); 828 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1);
676 EXPECT_FALSE(manager_.IsComplete(framebuffer_)); 829 EXPECT_FALSE(manager_.IsComplete(framebuffer_));
677 manager_.MarkAsComplete(framebuffer_); 830 manager_.MarkAsComplete(framebuffer_);
678 EXPECT_TRUE(manager_.IsComplete(framebuffer_)); 831 EXPECT_TRUE(manager_.IsComplete(framebuffer_));
679 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1); 832 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1);
680 EXPECT_FALSE(manager_.IsComplete(framebuffer_)); 833 EXPECT_FALSE(manager_.IsComplete(framebuffer_));
681 834
682 // Check MarkAttachmentsAsCleared marks as complete. 835 // Check MarkAttachmentsAsCleared marks as complete.
683 manager_.MarkAttachmentsAsCleared( 836 manager_.MarkAttachmentsAsCleared(
684 framebuffer_, &renderbuffer_manager_, &texture_manager_); 837 framebuffer_, &renderbuffer_manager_, texture_manager_.get());
685 EXPECT_TRUE(manager_.IsComplete(framebuffer_)); 838 EXPECT_TRUE(manager_.IsComplete(framebuffer_));
686 839
687 // Check Unbind marks as not complete. 840 // Check Unbind marks as not complete.
688 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1); 841 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1);
689 EXPECT_FALSE(manager_.IsComplete(framebuffer_)); 842 EXPECT_FALSE(manager_.IsComplete(framebuffer_));
690 manager_.MarkAsComplete(framebuffer_); 843 manager_.MarkAsComplete(framebuffer_);
691 EXPECT_TRUE(manager_.IsComplete(framebuffer_)); 844 EXPECT_TRUE(manager_.IsComplete(framebuffer_));
692 framebuffer_->UnbindTexture(kTarget1, texture2.get()); 845 framebuffer_->UnbindTexture(kTarget1, texture2.get());
693 EXPECT_FALSE(manager_.IsComplete(framebuffer_)); 846 EXPECT_FALSE(manager_.IsComplete(framebuffer_));
694 } 847 }
695 848
696 TEST_F(FramebufferInfoTest, GetStatus) { 849 TEST_F(FramebufferInfoTest, GetStatus) {
697 const GLuint kRenderbufferClient1Id = 33; 850 const GLuint kRenderbufferClient1Id = 33;
698 const GLuint kRenderbufferService1Id = 333; 851 const GLuint kRenderbufferService1Id = 333;
699 const GLuint kTextureClient2Id = 34; 852 const GLuint kTextureClient2Id = 34;
700 const GLuint kTextureService2Id = 334; 853 const GLuint kTextureService2Id = 334;
701 const GLenum kTarget1 = GL_TEXTURE_2D; 854 const GLenum kTarget1 = GL_TEXTURE_2D;
702 const GLint kLevel1 = 0; 855 const GLint kLevel1 = 0;
703 const GLint kSamples1 = 0; 856 const GLint kSamples1 = 0;
704 857
705 renderbuffer_manager_.CreateRenderbuffer( 858 renderbuffer_manager_.CreateRenderbuffer(
706 kRenderbufferClient1Id, kRenderbufferService1Id); 859 kRenderbufferClient1Id, kRenderbufferService1Id);
707 Renderbuffer* renderbuffer1 = 860 Renderbuffer* renderbuffer1 =
708 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id); 861 renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id);
709 ASSERT_TRUE(renderbuffer1 != NULL); 862 ASSERT_TRUE(renderbuffer1 != NULL);
710 texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id); 863 texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
711 scoped_refptr<TextureRef> texture2( 864 scoped_refptr<TextureRef> texture2(
712 texture_manager_.GetTexture(kTextureClient2Id)); 865 texture_manager_->GetTexture(kTextureClient2Id));
713 ASSERT_TRUE(texture2.get() != NULL); 866 ASSERT_TRUE(texture2.get() != NULL);
714 texture_manager_.SetTarget(texture2.get(), GL_TEXTURE_2D); 867 texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D);
715 868
716 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) 869 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
717 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 870 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
718 .RetiresOnSaturation(); 871 .RetiresOnSaturation();
719 framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); 872 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
720 873
721 // Check a second call for the same type does not call anything 874 // Check a second call for the same type does not call anything
722 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { 875 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
723 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) 876 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
724 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 877 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
725 .RetiresOnSaturation(); 878 .RetiresOnSaturation();
726 } 879 }
727 framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); 880 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
728 881
729 // Check changing the attachments calls CheckFramebufferStatus. 882 // Check changing the attachments calls CheckFramebufferStatus.
730 framebuffer_->AttachTexture( 883 framebuffer_->AttachTexture(
731 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1); 884 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1);
732 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) 885 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
733 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)).RetiresOnSaturation(); 886 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)).RetiresOnSaturation();
734 framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); 887 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
735 888
736 // Check a second call for the same type does not call anything. 889 // Check a second call for the same type does not call anything.
737 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { 890 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
738 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) 891 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
739 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 892 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
740 .RetiresOnSaturation(); 893 .RetiresOnSaturation();
741 } 894 }
742 framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER); 895 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
743 896
744 // Check a second call with a different target calls CheckFramebufferStatus. 897 // Check a second call with a different target calls CheckFramebufferStatus.
745 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 898 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
746 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 899 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
747 .RetiresOnSaturation(); 900 .RetiresOnSaturation();
748 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 901 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
749 902
750 // Check a second call for the same type does not call anything. 903 // Check a second call for the same type does not call anything.
751 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { 904 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
752 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 905 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
753 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 906 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
754 .RetiresOnSaturation(); 907 .RetiresOnSaturation();
755 } 908 }
756 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 909 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
757 910
758 // Check adding another attachment calls CheckFramebufferStatus. 911 // Check adding another attachment calls CheckFramebufferStatus.
759 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1); 912 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1);
760 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 913 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
761 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 914 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
762 .RetiresOnSaturation(); 915 .RetiresOnSaturation();
763 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 916 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
764 917
765 // Check a second call for the same type does not call anything. 918 // Check a second call for the same type does not call anything.
766 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { 919 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
767 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 920 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
768 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 921 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
769 .RetiresOnSaturation(); 922 .RetiresOnSaturation();
770 } 923 }
771 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 924 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
772 925
773 // Check changing the format calls CheckFramebuffferStatus. 926 // Check changing the format calls CheckFramebuffferStatus.
774 TestHelper::SetTexParameterWithExpectations(gl_.get(), 927 TestHelper::SetTexParameterWithExpectations(gl_.get(),
775 error_state_.get(), 928 error_state_.get(),
776 &texture_manager_, 929 texture_manager_.get(),
777 texture2.get(), 930 texture2.get(),
778 GL_TEXTURE_WRAP_S, 931 GL_TEXTURE_WRAP_S,
779 GL_CLAMP_TO_EDGE, 932 GL_CLAMP_TO_EDGE,
780 GL_NO_ERROR); 933 GL_NO_ERROR);
781 934
782 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 935 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
783 .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)) 936 .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT))
784 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 937 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
785 .RetiresOnSaturation(); 938 .RetiresOnSaturation();
786 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 939 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
787 940
788 // Check since it did not return FRAMEBUFFER_COMPLETE that it calls 941 // Check since it did not return FRAMEBUFFER_COMPLETE that it calls
789 // CheckFramebufferStatus 942 // CheckFramebufferStatus
790 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 943 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
791 944
792 // Check putting it back does not call CheckFramebufferStatus. 945 // Check putting it back does not call CheckFramebufferStatus.
793 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { 946 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
794 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 947 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
795 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 948 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
796 .RetiresOnSaturation(); 949 .RetiresOnSaturation();
797 } 950 }
798 TestHelper::SetTexParameterWithExpectations(gl_.get(), 951 TestHelper::SetTexParameterWithExpectations(gl_.get(),
799 error_state_.get(), 952 error_state_.get(),
800 &texture_manager_, 953 texture_manager_.get(),
801 texture2.get(), 954 texture2.get(),
802 GL_TEXTURE_WRAP_S, 955 GL_TEXTURE_WRAP_S,
803 GL_REPEAT, 956 GL_REPEAT,
804 GL_NO_ERROR); 957 GL_NO_ERROR);
805 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 958 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
806 959
807 // Check Unbinding does not call CheckFramebufferStatus 960 // Check Unbinding does not call CheckFramebufferStatus
808 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1); 961 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1);
809 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { 962 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
810 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 963 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
811 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 964 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
812 .RetiresOnSaturation(); 965 .RetiresOnSaturation();
813 } 966 }
814 framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER); 967 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
815 } 968 }
816 969
817 } // namespace gles2 970 } // namespace gles2
818 } // namespace gpu 971 } // namespace gpu
819 972
820 973
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698