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

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

Issue 2161383002: Add check if depth and stencil attachments are same image (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add comments on unittest Created 4 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
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 198
199 TEST_F(FramebufferInfoTest, AttachRenderbuffer) { 199 TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
200 const GLuint kRenderbufferClient1Id = 33; 200 const GLuint kRenderbufferClient1Id = 33;
201 const GLuint kRenderbufferService1Id = 333; 201 const GLuint kRenderbufferService1Id = 333;
202 const GLuint kRenderbufferClient2Id = 34; 202 const GLuint kRenderbufferClient2Id = 34;
203 const GLuint kRenderbufferService2Id = 334; 203 const GLuint kRenderbufferService2Id = 334;
204 const GLuint kRenderbufferClient3Id = 35; 204 const GLuint kRenderbufferClient3Id = 35;
205 const GLuint kRenderbufferService3Id = 335; 205 const GLuint kRenderbufferService3Id = 335;
206 const GLuint kRenderbufferClient4Id = 36; 206 const GLuint kRenderbufferClient4Id = 36;
207 const GLuint kRenderbufferService4Id = 336; 207 const GLuint kRenderbufferService4Id = 336;
208 const GLuint kRenderbufferClient5Id = 37;
209 const GLuint kRenderbufferService5Id = 337;
208 const GLsizei kWidth1 = 16; 210 const GLsizei kWidth1 = 16;
209 const GLsizei kHeight1 = 32; 211 const GLsizei kHeight1 = 32;
210 const GLenum kFormat1 = GL_RGBA4; 212 const GLenum kFormat1 = GL_RGBA4;
211 const GLenum kBadFormat1 = GL_DEPTH_COMPONENT16; 213 const GLenum kBadFormat1 = GL_DEPTH_COMPONENT16;
212 const GLsizei kSamples1 = 0; 214 const GLsizei kSamples1 = 0;
213 const GLsizei kWidth2 = 16; 215 const GLsizei kWidth2 = 16;
214 const GLsizei kHeight2 = 32; 216 const GLsizei kHeight2 = 32;
215 const GLenum kFormat2 = GL_DEPTH_COMPONENT16; 217 const GLenum kFormat2 = GL_DEPTH_COMPONENT16;
216 const GLsizei kSamples2 = 0; 218 const GLsizei kSamples2 = 0;
217 const GLsizei kWidth3 = 16; 219 const GLsizei kWidth3 = 16;
218 const GLsizei kHeight3 = 32; 220 const GLsizei kHeight3 = 32;
219 const GLenum kFormat3 = GL_STENCIL_INDEX8; 221 const GLenum kFormat3 = GL_STENCIL_INDEX8;
220 const GLsizei kSamples3 = 0; 222 const GLsizei kSamples3 = 0;
221 const GLsizei kWidth4 = 16; 223 const GLsizei kWidth4 = 16;
222 const GLsizei kHeight4 = 32; 224 const GLsizei kHeight4 = 32;
223 const GLenum kFormat4 = GL_STENCIL_INDEX8; 225 const GLenum kFormat4 = GL_DEPTH24_STENCIL8;
224 const GLsizei kSamples4 = 0; 226 const GLsizei kSamples4 = 0;
225 const GLsizei kDifferentSamples4 = 1; 227 const GLsizei kWidth5 = 16;
228 const GLsizei kHeight5 = 32;
229 const GLenum kFormat5 = GL_DEPTH24_STENCIL8;
230 const GLsizei kSamples5 = 0;
231 const GLsizei kDifferentSamples5 = 1;
226 232
227 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 233 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
228 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 234 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
229 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 235 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
230 EXPECT_FALSE( 236 EXPECT_FALSE(
231 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); 237 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
232 238
233 renderbuffer_manager_->CreateRenderbuffer( 239 renderbuffer_manager_->CreateRenderbuffer(
234 kRenderbufferClient1Id, kRenderbufferService1Id); 240 kRenderbufferClient1Id, kRenderbufferService1Id);
235 Renderbuffer* renderbuffer1 = 241 Renderbuffer* renderbuffer1 =
236 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id); 242 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id);
237 ASSERT_TRUE(renderbuffer1 != NULL); 243 ASSERT_TRUE(renderbuffer1 != NULL);
238 244
239 // check adding one attachment 245 // Check adding one attachment.
240 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); 246 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1);
241 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 247 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
242 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 248 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
243 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4), 249 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4),
244 framebuffer_->GetReadBufferInternalFormat()); 250 framebuffer_->GetReadBufferInternalFormat());
245 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); 251 EXPECT_FALSE(framebuffer_->HasDepthAttachment());
246 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 252 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
247 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 253 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
248 framebuffer_->IsPossiblyComplete(feature_info_.get())); 254 framebuffer_->IsPossiblyComplete(feature_info_.get()));
249 EXPECT_TRUE(framebuffer_->IsCleared()); 255 EXPECT_TRUE(framebuffer_->IsCleared());
250 256
251 // Try a format that's not good for COLOR_ATTACHMENT0. 257 // Try a format that's not good for COLOR_ATTACHMENT0.
252 renderbuffer_manager_->SetInfo( 258 renderbuffer_manager_->SetInfo(
253 renderbuffer1, kSamples1, kBadFormat1, kWidth1, kHeight1); 259 renderbuffer1, kSamples1, kBadFormat1, kWidth1, kHeight1);
254 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 260 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
255 framebuffer_->IsPossiblyComplete(feature_info_.get())); 261 framebuffer_->IsPossiblyComplete(feature_info_.get()));
256 262
257 // Try a good format. 263 // Try a good format.
258 renderbuffer_manager_->SetInfo( 264 renderbuffer_manager_->SetInfo(
259 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); 265 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1);
260 EXPECT_EQ(static_cast<GLenum>(kFormat1), 266 EXPECT_EQ(static_cast<GLenum>(kFormat1),
261 framebuffer_->GetReadBufferInternalFormat()); 267 framebuffer_->GetReadBufferInternalFormat());
262 EXPECT_FALSE(framebuffer_->HasDepthAttachment()); 268 EXPECT_FALSE(framebuffer_->HasDepthAttachment());
263 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 269 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
264 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 270 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
265 framebuffer_->IsPossiblyComplete(feature_info_.get())); 271 framebuffer_->IsPossiblyComplete(feature_info_.get()));
266 EXPECT_FALSE(framebuffer_->IsCleared()); 272 EXPECT_FALSE(framebuffer_->IsCleared());
267 273
268 // check adding another 274 // Check adding another.
269 renderbuffer_manager_->CreateRenderbuffer( 275 renderbuffer_manager_->CreateRenderbuffer(
270 kRenderbufferClient2Id, kRenderbufferService2Id); 276 kRenderbufferClient2Id, kRenderbufferService2Id);
271 Renderbuffer* renderbuffer2 = 277 Renderbuffer* renderbuffer2 =
272 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient2Id); 278 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient2Id);
273 ASSERT_TRUE(renderbuffer2 != NULL); 279 ASSERT_TRUE(renderbuffer2 != NULL);
274 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2); 280 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2);
275 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 281 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
276 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 282 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
277 EXPECT_EQ(static_cast<GLenum>(kFormat1), 283 EXPECT_EQ(static_cast<GLenum>(kFormat1),
278 framebuffer_->GetReadBufferInternalFormat()); 284 framebuffer_->GetReadBufferInternalFormat());
279 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 285 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
280 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 286 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
281 // The attachment has a size of 0,0 so depending on the order of the map 287 // The attachment has a size of 0,0 so depending on the order of the map
282 // of attachments it could either get INCOMPLETE_ATTACHMENT because it's 0,0 288 // of attachments it could either get INCOMPLETE_ATTACHMENT because it's 0,0
283 // or INCOMPLETE_DIMENSIONS because it's not the same size as the other 289 // or INCOMPLETE_DIMENSIONS because it's not the same size as the other
284 // attachment. 290 // attachment.
285 GLenum status = framebuffer_->IsPossiblyComplete(feature_info_.get()); 291 GLenum status = framebuffer_->IsPossiblyComplete(feature_info_.get());
286 EXPECT_TRUE( 292 EXPECT_TRUE(
287 status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT || 293 status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT ||
288 status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT); 294 status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT);
289 EXPECT_FALSE(framebuffer_->IsCleared()); 295 EXPECT_FALSE(framebuffer_->IsCleared());
290 296
291 renderbuffer_manager_->SetInfo( 297 renderbuffer_manager_->SetInfo(
292 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2); 298 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2);
293 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 299 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
294 framebuffer_->IsPossiblyComplete(feature_info_.get())); 300 framebuffer_->IsPossiblyComplete(feature_info_.get()));
295 EXPECT_FALSE(framebuffer_->IsCleared()); 301 EXPECT_FALSE(framebuffer_->IsCleared());
296 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 302 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
297 303
298 // check marking them as cleared. 304 // Check marking them as cleared.
299 manager_.MarkAttachmentsAsCleared( 305 manager_.MarkAttachmentsAsCleared(
300 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get()); 306 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get());
301 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 307 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
302 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); 308 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
303 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 309 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
304 framebuffer_->IsPossiblyComplete(feature_info_.get())); 310 framebuffer_->IsPossiblyComplete(feature_info_.get()));
305 EXPECT_TRUE(framebuffer_->IsCleared()); 311 EXPECT_TRUE(framebuffer_->IsCleared());
306 312
307 // Check adding one that is already cleared. 313 // Add another one to stencil attachment point.
308 renderbuffer_manager_->CreateRenderbuffer( 314 renderbuffer_manager_->CreateRenderbuffer(
309 kRenderbufferClient3Id, kRenderbufferService3Id); 315 kRenderbufferClient3Id, kRenderbufferService3Id);
310 Renderbuffer* renderbuffer3 = 316 Renderbuffer* renderbuffer3 =
311 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient3Id); 317 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient3Id);
312 ASSERT_TRUE(renderbuffer3 != NULL); 318 ASSERT_TRUE(renderbuffer3 != NULL);
313 renderbuffer_manager_->SetInfo( 319 renderbuffer_manager_->SetInfo(
314 renderbuffer3, kSamples3, kFormat3, kWidth3, kHeight3); 320 renderbuffer3, kSamples3, kFormat3, kWidth3, kHeight3);
315 renderbuffer_manager_->SetCleared(renderbuffer3, true); 321 renderbuffer_manager_->SetCleared(renderbuffer3, true);
316 322
317 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer3); 323 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer3);
318 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 324 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
319 EXPECT_EQ(static_cast<GLenum>(kFormat1), 325 EXPECT_EQ(static_cast<GLenum>(kFormat1),
320 framebuffer_->GetReadBufferInternalFormat()); 326 framebuffer_->GetReadBufferInternalFormat());
321 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 327 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
322 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); 328 EXPECT_TRUE(framebuffer_->HasStencilAttachment());
329 // Binding different images to depth and stencil attachment points should
330 // return FRAMEBUFFER_UNSUPPORTED.
331 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_UNSUPPORTED),
332 framebuffer_->IsPossiblyComplete(feature_info_.get()));
333
334 // Bind a renderbufer in format DEPTH_STENCIL to depth and stencil
335 // attachment points.
336 renderbuffer_manager_->CreateRenderbuffer(
337 kRenderbufferClient4Id, kRenderbufferService4Id);
338 Renderbuffer* renderbuffer4 =
339 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient4Id);
340 ASSERT_TRUE(renderbuffer4 != NULL);
qiankun 2016/07/22 08:31:37 Use nullptr here and other place.
341 renderbuffer_manager_->SetInfo(
342 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4);
343 renderbuffer_manager_->SetCleared(renderbuffer4, true);
344
345 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
346 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
347 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer4);
348 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4);
349 EXPECT_EQ(static_cast<GLenum>(kFormat1),
350 framebuffer_->GetReadBufferInternalFormat());
351 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
352 EXPECT_TRUE(framebuffer_->HasStencilAttachment());
323 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 353 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
324 framebuffer_->IsPossiblyComplete(feature_info_.get())); 354 framebuffer_->IsPossiblyComplete(feature_info_.get()));
325 EXPECT_TRUE(framebuffer_->IsCleared()); 355 EXPECT_TRUE(framebuffer_->IsCleared());
326 356
327 // Check marking the renderbuffer as unclared. 357 // Check marking the renderbuffer as uncleared.
328 renderbuffer_manager_->SetInfo( 358 renderbuffer_manager_->SetInfo(
329 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); 359 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1);
330 EXPECT_EQ(static_cast<GLenum>(kFormat1), 360 EXPECT_EQ(static_cast<GLenum>(kFormat1),
331 framebuffer_->GetReadBufferInternalFormat()); 361 framebuffer_->GetReadBufferInternalFormat());
332 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 362 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
333 EXPECT_TRUE(framebuffer_->HasStencilAttachment()); 363 EXPECT_TRUE(framebuffer_->HasStencilAttachment());
334 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 364 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
335 framebuffer_->IsPossiblyComplete(feature_info_.get())); 365 framebuffer_->IsPossiblyComplete(feature_info_.get()));
336 EXPECT_FALSE(framebuffer_->IsCleared()); 366 EXPECT_FALSE(framebuffer_->IsCleared());
337 367
338 const Framebuffer::Attachment* attachment = 368 const Framebuffer::Attachment* attachment =
339 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0); 369 framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0);
340 ASSERT_TRUE(attachment != NULL); 370 ASSERT_TRUE(attachment != NULL);
341 EXPECT_EQ(kWidth1, attachment->width()); 371 EXPECT_EQ(kWidth1, attachment->width());
342 EXPECT_EQ(kHeight1, attachment->height()); 372 EXPECT_EQ(kHeight1, attachment->height());
343 EXPECT_EQ(kSamples1, attachment->samples()); 373 EXPECT_EQ(kSamples1, attachment->samples());
344 EXPECT_EQ(kFormat1, attachment->internal_format()); 374 EXPECT_EQ(kFormat1, attachment->internal_format());
345 EXPECT_FALSE(attachment->cleared()); 375 EXPECT_FALSE(attachment->cleared());
346 376
347 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 377 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
348 378
349 // Clear it. 379 // Clear it.
350 manager_.MarkAttachmentsAsCleared( 380 manager_.MarkAttachmentsAsCleared(
351 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get()); 381 framebuffer_, renderbuffer_manager_.get(), texture_manager_.get());
352 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); 382 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
353 EXPECT_TRUE(framebuffer_->IsCleared()); 383 EXPECT_TRUE(framebuffer_->IsCleared());
354 384
355 // Check replacing an attachment 385 // Check replacing one attachment when both depth and stencil attachments
386 // are present.
356 renderbuffer_manager_->CreateRenderbuffer( 387 renderbuffer_manager_->CreateRenderbuffer(
357 kRenderbufferClient4Id, kRenderbufferService4Id); 388 kRenderbufferClient5Id, kRenderbufferService5Id);
358 Renderbuffer* renderbuffer4 = 389 Renderbuffer* renderbuffer5 =
359 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient4Id); 390 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient5Id);
360 ASSERT_TRUE(renderbuffer4 != NULL); 391 ASSERT_TRUE(renderbuffer5 != NULL);
361 renderbuffer_manager_->SetInfo( 392 renderbuffer_manager_->SetInfo(
362 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); 393 renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5);
363 394
364 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer4); 395 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer5);
365 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 396 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
366 EXPECT_FALSE(framebuffer_->IsCleared()); 397 EXPECT_FALSE(framebuffer_->IsCleared());
367 398
368 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); 399 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT);
369 ASSERT_TRUE(attachment != NULL); 400 ASSERT_TRUE(attachment != NULL);
370 EXPECT_EQ(kWidth4, attachment->width()); 401 EXPECT_EQ(kWidth5, attachment->width());
371 EXPECT_EQ(kHeight4, attachment->height()); 402 EXPECT_EQ(kHeight5, attachment->height());
372 EXPECT_EQ(kSamples4, attachment->samples()); 403 EXPECT_EQ(kSamples5, attachment->samples());
373 EXPECT_EQ(kFormat4, attachment->internal_format()); 404 EXPECT_EQ(kFormat5, attachment->internal_format());
405 EXPECT_FALSE(attachment->cleared());
406 // Binding different images to depth and stencil attachment points should
407 // return FRAMEBUFFER_UNSUPPORTED.
408 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_UNSUPPORTED),
409 framebuffer_->IsPossiblyComplete(feature_info_.get()));
410
411 // Check replacing both depth and stencil attachments.
412 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer5);
413 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
414 EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
415 EXPECT_FALSE(framebuffer_->IsCleared());
qiankun 2016/07/22 08:31:37 Can you mark renderbuffer5 as cleared and check fr
416
417 attachment = framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT);
418 EXPECT_EQ(kWidth5, attachment->width());
419 EXPECT_EQ(kHeight5, attachment->height());
420 EXPECT_EQ(kSamples5, attachment->samples());
421 EXPECT_EQ(kFormat5, attachment->internal_format());
374 EXPECT_FALSE(attachment->cleared()); 422 EXPECT_FALSE(attachment->cleared());
375 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 423 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
376 framebuffer_->IsPossiblyComplete(feature_info_.get())); 424 framebuffer_->IsPossiblyComplete(feature_info_.get()));
377 425
378 // Change samples. 426 // Change samples.
379 ASSERT_FALSE( 427 ASSERT_FALSE(
380 feature_info_->feature_flags().chromium_framebuffer_mixed_samples); 428 feature_info_->feature_flags().chromium_framebuffer_mixed_samples);
381 renderbuffer_manager_->SetInfo( 429 renderbuffer_manager_->SetInfo(
382 renderbuffer4, kDifferentSamples4, kFormat4, kWidth4, kHeight4); 430 renderbuffer5, kDifferentSamples5, kFormat5, kWidth5, kHeight5);
383 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE), 431 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE),
384 framebuffer_->IsPossiblyComplete(feature_info_.get())); 432 framebuffer_->IsPossiblyComplete(feature_info_.get()));
385 renderbuffer_manager_->SetInfo( 433 renderbuffer_manager_->SetInfo(
386 renderbuffer4, kSamples4, kFormat4, kWidth4, kHeight4); 434 renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5);
387 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 435 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
388 framebuffer_->IsPossiblyComplete(feature_info_.get())); 436 framebuffer_->IsPossiblyComplete(feature_info_.get()));
389 437
390 // Check changing an attachment. 438 // Check changing an attachment.
391 renderbuffer_manager_->SetInfo( 439 renderbuffer_manager_->SetInfo(
392 renderbuffer4, kSamples4, kFormat4, kWidth4 + 1, kHeight4); 440 renderbuffer5, kSamples5, kFormat5, kWidth5 + 1, kHeight5);
393 441
394 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT); 442 attachment = framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT);
395 ASSERT_TRUE(attachment != NULL); 443 ASSERT_TRUE(attachment != NULL);
396 EXPECT_EQ(kWidth4 + 1, attachment->width()); 444 EXPECT_EQ(kWidth5 + 1, attachment->width());
397 EXPECT_EQ(kHeight4, attachment->height()); 445 EXPECT_EQ(kHeight5, attachment->height());
398 EXPECT_EQ(kSamples4, attachment->samples()); 446 EXPECT_EQ(kSamples5, attachment->samples());
399 EXPECT_EQ(kFormat4, attachment->internal_format()); 447 EXPECT_EQ(kFormat5, attachment->internal_format());
400 EXPECT_FALSE(attachment->cleared()); 448 EXPECT_FALSE(attachment->cleared());
401 EXPECT_FALSE(framebuffer_->IsCleared()); 449 EXPECT_FALSE(framebuffer_->IsCleared());
402 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT), 450 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT),
403 framebuffer_->IsPossiblyComplete(feature_info_.get())); 451 framebuffer_->IsPossiblyComplete(feature_info_.get()));
404 452
405 // Check removing it. 453 // Check removing it.
454 // Restore the width of renderbuffer5 to avoid INCOMPLETE_DIMENSIONS_EXT
qiankun 2016/07/22 08:31:37 Miss . at the end of line.
455 renderbuffer_manager_->SetInfo(
456 renderbuffer5, kSamples5, kFormat5, kWidth5, kHeight5);
457
406 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL); 458 framebuffer_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL);
407 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); 459 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
408 EXPECT_EQ(static_cast<GLenum>(kFormat1), 460 EXPECT_EQ(static_cast<GLenum>(kFormat1),
409 framebuffer_->GetReadBufferInternalFormat()); 461 framebuffer_->GetReadBufferInternalFormat());
410 EXPECT_TRUE(framebuffer_->HasDepthAttachment()); 462 EXPECT_TRUE(framebuffer_->HasDepthAttachment());
411 EXPECT_FALSE(framebuffer_->HasStencilAttachment()); 463 EXPECT_FALSE(framebuffer_->HasStencilAttachment());
412 464 EXPECT_FALSE(framebuffer_->IsCleared());
413 EXPECT_TRUE(framebuffer_->IsCleared());
414 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 465 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
415 framebuffer_->IsPossiblyComplete(feature_info_.get())); 466 framebuffer_->IsPossiblyComplete(feature_info_.get()));
416 467
417 // Remove depth, Set color to 0 size. 468 // Remove depth, Set color to 0 size.
418 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, NULL); 469 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, NULL);
419 renderbuffer_manager_->SetInfo(renderbuffer1, kSamples1, kFormat1, 0, 0); 470 renderbuffer_manager_->SetInfo(renderbuffer1, kSamples1, kFormat1, 0, 0);
420 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), 471 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT),
421 framebuffer_->IsPossiblyComplete(feature_info_.get())); 472 framebuffer_->IsPossiblyComplete(feature_info_.get()));
422 473
423 // Remove color. 474 // Remove color.
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1606 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId); 1657 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId);
1607 ASSERT_TRUE(renderbuffer != NULL); 1658 ASSERT_TRUE(renderbuffer != NULL);
1608 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer); 1659 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer);
1609 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment()); 1660 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment());
1610 } 1661 }
1611 1662
1612 } // namespace gles2 1663 } // namespace gles2
1613 } // namespace gpu 1664 } // namespace gpu
1614 1665
1615 1666
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698