OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |