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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp

Issue 1427543002: Modified old wait sync point functions to also accept new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Folded sync_point into sync_tokens Created 5 years, 1 month 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 /* 1 /*
2 * Copyright (c) 2010, Google Inc. All rights reserved. 2 * Copyright (c) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 } 300 }
301 } else { 301 } else {
302 m_context->copyTextureCHROMIUM(GL_TEXTURE_2D, m_colorBuffer.textureId, f rontColorBufferMailbox->textureInfo.textureId, GL_RGBA, GL_UNSIGNED_BYTE, GL_FAL SE, GL_FALSE, GL_FALSE); 302 m_context->copyTextureCHROMIUM(GL_TEXTURE_2D, m_colorBuffer.textureId, f rontColorBufferMailbox->textureInfo.textureId, GL_RGBA, GL_UNSIGNED_BYTE, GL_FAL SE, GL_FALSE, GL_FALSE);
303 } 303 }
304 304
305 restoreFramebufferBindings(); 305 restoreFramebufferBindings();
306 m_contentsChanged = false; 306 m_contentsChanged = false;
307 307
308 m_context->produceTextureDirectCHROMIUM(frontColorBufferMailbox->textureInfo .textureId, GL_TEXTURE_2D, frontColorBufferMailbox->mailbox.name); 308 m_context->produceTextureDirectCHROMIUM(frontColorBufferMailbox->textureInfo .textureId, GL_TEXTURE_2D, frontColorBufferMailbox->mailbox.name);
309 m_context->flush(); 309 m_context->flush();
310 frontColorBufferMailbox->mailbox.syncPoint = m_context->insertSyncPoint(); 310 frontColorBufferMailbox->mailbox.validSyncToken = m_context->insertSyncPoint (frontColorBufferMailbox->mailbox.syncToken);
311 frontColorBufferMailbox->mailbox.allowOverlay = frontColorBufferMailbox->tex tureInfo.imageId != 0; 311 frontColorBufferMailbox->mailbox.allowOverlay = frontColorBufferMailbox->tex tureInfo.imageId != 0;
312 setBufferClearNeeded(true); 312 setBufferClearNeeded(true);
313 313
314 // set m_parentDrawingBuffer to make sure 'this' stays alive as long as it h as live mailboxes 314 // set m_parentDrawingBuffer to make sure 'this' stays alive as long as it h as live mailboxes
315 ASSERT(!frontColorBufferMailbox->m_parentDrawingBuffer); 315 ASSERT(!frontColorBufferMailbox->m_parentDrawingBuffer);
316 frontColorBufferMailbox->m_parentDrawingBuffer = this; 316 frontColorBufferMailbox->m_parentDrawingBuffer = this;
317 *outMailbox = frontColorBufferMailbox->mailbox; 317 *outMailbox = frontColorBufferMailbox->mailbox;
318 m_frontColorBuffer = { frontColorBufferMailbox->textureInfo, frontColorBuffe rMailbox->mailbox }; 318 m_frontColorBuffer = { frontColorBufferMailbox->textureInfo, frontColorBuffe rMailbox->mailbox };
319 return true; 319 return true;
320 } 320 }
321 321
322 void DrawingBuffer::mailboxReleased(const WebExternalTextureMailbox& mailbox, bo ol lostResource) 322 void DrawingBuffer::mailboxReleased(const WebExternalTextureMailbox& mailbox, bo ol lostResource)
323 { 323 {
324 if (m_destructionInProgress || m_context->isContextLost() || lostResource || m_isHidden) { 324 if (m_destructionInProgress || m_context->isContextLost() || lostResource || m_isHidden) {
325 mailboxReleasedWithoutRecycling(mailbox); 325 mailboxReleasedWithoutRecycling(mailbox);
326 return; 326 return;
327 } 327 }
328 328
329 for (size_t i = 0; i < m_textureMailboxes.size(); i++) { 329 for (size_t i = 0; i < m_textureMailboxes.size(); i++) {
330 RefPtr<MailboxInfo> mailboxInfo = m_textureMailboxes[i]; 330 RefPtr<MailboxInfo> mailboxInfo = m_textureMailboxes[i];
331 if (nameEquals(mailboxInfo->mailbox, mailbox)) { 331 if (nameEquals(mailboxInfo->mailbox, mailbox)) {
332 mailboxInfo->mailbox.syncPoint = mailbox.syncPoint; 332 memcpy(mailboxInfo->mailbox.syncToken, mailbox.syncToken,
333 sizeof(mailboxInfo->mailbox.syncToken));
334 mailboxInfo->mailbox.validSyncToken = mailbox.validSyncToken;
333 ASSERT(mailboxInfo->m_parentDrawingBuffer.get() == this); 335 ASSERT(mailboxInfo->m_parentDrawingBuffer.get() == this);
334 mailboxInfo->m_parentDrawingBuffer.clear(); 336 mailboxInfo->m_parentDrawingBuffer.clear();
335 m_recycledMailboxQueue.prepend(mailboxInfo->mailbox); 337 m_recycledMailboxQueue.prepend(mailboxInfo->mailbox);
336 return; 338 return;
337 } 339 }
338 } 340 }
339 ASSERT_NOT_REACHED(); 341 ASSERT_NOT_REACHED();
340 } 342 }
341 343
342 void DrawingBuffer::mailboxReleasedWithoutRecycling(const WebExternalTextureMail box& mailbox) 344 void DrawingBuffer::mailboxReleasedWithoutRecycling(const WebExternalTextureMail box& mailbox)
(...skipping 19 matching lines...) Expand all
362 364
363 RefPtr<MailboxInfo> mailboxInfo; 365 RefPtr<MailboxInfo> mailboxInfo;
364 for (size_t i = 0; i < m_textureMailboxes.size(); i++) { 366 for (size_t i = 0; i < m_textureMailboxes.size(); i++) {
365 if (nameEquals(m_textureMailboxes[i]->mailbox, mailbox)) { 367 if (nameEquals(m_textureMailboxes[i]->mailbox, mailbox)) {
366 mailboxInfo = m_textureMailboxes[i]; 368 mailboxInfo = m_textureMailboxes[i];
367 break; 369 break;
368 } 370 }
369 } 371 }
370 ASSERT(mailboxInfo); 372 ASSERT(mailboxInfo);
371 373
372 if (mailboxInfo->mailbox.syncPoint) { 374 if (mailboxInfo->mailbox.validSyncToken) {
373 m_context->waitSyncPoint(mailboxInfo->mailbox.syncPoint); 375 m_context->waitSyncToken(mailboxInfo->mailbox.syncToken);
374 mailboxInfo->mailbox.syncPoint = 0; 376 mailboxInfo->mailbox.validSyncToken = false;
375 } 377 }
376 378
377 if (mailboxInfo->size != m_size) { 379 if (mailboxInfo->size != m_size) {
378 m_context->bindTexture(GL_TEXTURE_2D, mailboxInfo->textureInfo.textureId ); 380 m_context->bindTexture(GL_TEXTURE_2D, mailboxInfo->textureInfo.textureId );
379 allocateTextureMemory(&mailboxInfo->textureInfo, m_size); 381 allocateTextureMemory(&mailboxInfo->textureInfo, m_size);
380 mailboxInfo->size = m_size; 382 mailboxInfo->size = m_size;
381 } 383 }
382 384
383 return mailboxInfo.release(); 385 return mailboxInfo.release();
384 } 386 }
385 387
386 PassRefPtr<DrawingBuffer::MailboxInfo> DrawingBuffer::createNewMailbox(const Tex tureInfo& info) 388 PassRefPtr<DrawingBuffer::MailboxInfo> DrawingBuffer::createNewMailbox(const Tex tureInfo& info)
387 { 389 {
388 RefPtr<MailboxInfo> returnMailbox = adoptRef(new MailboxInfo()); 390 RefPtr<MailboxInfo> returnMailbox = adoptRef(new MailboxInfo());
389 m_context->genMailboxCHROMIUM(returnMailbox->mailbox.name); 391 m_context->genMailboxCHROMIUM(returnMailbox->mailbox.name);
390 returnMailbox->textureInfo = info; 392 returnMailbox->textureInfo = info;
391 returnMailbox->size = m_size; 393 returnMailbox->size = m_size;
392 m_textureMailboxes.append(returnMailbox); 394 m_textureMailboxes.append(returnMailbox);
393 return returnMailbox.release(); 395 return returnMailbox.release();
394 } 396 }
395 397
396 void DrawingBuffer::deleteMailbox(const WebExternalTextureMailbox& mailbox) 398 void DrawingBuffer::deleteMailbox(const WebExternalTextureMailbox& mailbox)
397 { 399 {
398 for (size_t i = 0; i < m_textureMailboxes.size(); i++) { 400 for (size_t i = 0; i < m_textureMailboxes.size(); i++) {
399 if (nameEquals(m_textureMailboxes[i]->mailbox, mailbox)) { 401 if (nameEquals(m_textureMailboxes[i]->mailbox, mailbox)) {
400 if (mailbox.syncPoint) 402 if (mailbox.validSyncToken)
401 m_context->waitSyncPoint(mailbox.syncPoint); 403 m_context->waitSyncToken(mailbox.syncToken);
402 404
403 deleteChromiumImageForTexture(&m_textureMailboxes[i]->textureInfo); 405 deleteChromiumImageForTexture(&m_textureMailboxes[i]->textureInfo);
404 406
405 m_context->deleteTexture(m_textureMailboxes[i]->textureInfo.textureI d); 407 m_context->deleteTexture(m_textureMailboxes[i]->textureInfo.textureI d);
406 m_textureMailboxes.remove(i); 408 m_textureMailboxes.remove(i);
407 return; 409 return;
408 } 410 }
409 } 411 }
410 ASSERT_NOT_REACHED(); 412 ASSERT_NOT_REACHED();
411 } 413 }
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 WebExternalTextureMailbox mailbox; 501 WebExternalTextureMailbox mailbox;
500 GLint textureId = 0; 502 GLint textureId = 0;
501 if (sourceBuffer == FrontBuffer && m_frontColorBuffer.texInfo.textureId) { 503 if (sourceBuffer == FrontBuffer && m_frontColorBuffer.texInfo.textureId) {
502 textureId = m_frontColorBuffer.texInfo.textureId; 504 textureId = m_frontColorBuffer.texInfo.textureId;
503 mailbox = m_frontColorBuffer.mailbox; 505 mailbox = m_frontColorBuffer.mailbox;
504 } else { 506 } else {
505 textureId = m_colorBuffer.textureId; 507 textureId = m_colorBuffer.textureId;
506 m_context->genMailboxCHROMIUM(mailbox.name); 508 m_context->genMailboxCHROMIUM(mailbox.name);
507 m_context->produceTextureDirectCHROMIUM(textureId, GL_TEXTURE_2D, mailbo x.name); 509 m_context->produceTextureDirectCHROMIUM(textureId, GL_TEXTURE_2D, mailbo x.name);
508 m_context->flush(); 510 m_context->flush();
509 mailbox.syncPoint = m_context->insertSyncPoint(); 511 mailbox.validSyncToken = m_context->insertSyncPoint(mailbox.syncToken);
510 } 512 }
511 513
512 context->waitSyncPoint(mailbox.syncPoint); 514 context->waitSyncToken(mailbox.syncToken);
513 Platform3DObject sourceTexture = context->createAndConsumeTextureCHROMIUM(GL _TEXTURE_2D, mailbox.name); 515 Platform3DObject sourceTexture = context->createAndConsumeTextureCHROMIUM(GL _TEXTURE_2D, mailbox.name);
514 516
515 GLboolean unpackPremultiplyAlphaNeeded = GL_FALSE; 517 GLboolean unpackPremultiplyAlphaNeeded = GL_FALSE;
516 GLboolean unpackUnpremultiplyAlphaNeeded = GL_FALSE; 518 GLboolean unpackUnpremultiplyAlphaNeeded = GL_FALSE;
517 if (m_actualAttributes.alpha && m_actualAttributes.premultipliedAlpha && !pr emultiplyAlpha) 519 if (m_actualAttributes.alpha && m_actualAttributes.premultipliedAlpha && !pr emultiplyAlpha)
518 unpackUnpremultiplyAlphaNeeded = GL_TRUE; 520 unpackUnpremultiplyAlphaNeeded = GL_TRUE;
519 else if (m_actualAttributes.alpha && !m_actualAttributes.premultipliedAlpha && premultiplyAlpha) 521 else if (m_actualAttributes.alpha && !m_actualAttributes.premultipliedAlpha && premultiplyAlpha)
520 unpackPremultiplyAlphaNeeded = GL_TRUE; 522 unpackPremultiplyAlphaNeeded = GL_TRUE;
521 523
522 context->copyTextureCHROMIUM(GL_TEXTURE_2D, sourceTexture, texture, internal Format, destType, flipY, unpackPremultiplyAlphaNeeded, unpackUnpremultiplyAlphaN eeded); 524 context->copyTextureCHROMIUM(GL_TEXTURE_2D, sourceTexture, texture, internal Format, destType, flipY, unpackPremultiplyAlphaNeeded, unpackUnpremultiplyAlphaN eeded);
523 525
524 context->deleteTexture(sourceTexture); 526 context->deleteTexture(sourceTexture);
525 527
526 context->flush(); 528 context->flush();
527 m_context->waitSyncPoint(context->insertSyncPoint()); 529 GLbyte syncToken[24];
530 if (context->insertSyncPoint(syncToken))
531 m_context->waitSyncToken(syncToken);
528 532
529 return true; 533 return true;
530 } 534 }
531 535
532 Platform3DObject DrawingBuffer::framebuffer() const 536 Platform3DObject DrawingBuffer::framebuffer() const
533 { 537 {
534 return m_fbo; 538 return m_fbo;
535 } 539 }
536 540
537 WebLayer* DrawingBuffer::platformLayer() 541 WebLayer* DrawingBuffer::platformLayer()
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info) 1021 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info)
1018 { 1022 {
1019 if (info->imageId) { 1023 if (info->imageId) {
1020 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId); 1024 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId);
1021 m_context->destroyImageCHROMIUM(info->imageId); 1025 m_context->destroyImageCHROMIUM(info->imageId);
1022 info->imageId = 0; 1026 info->imageId = 0;
1023 } 1027 }
1024 } 1028 }
1025 1029
1026 } // namespace blink 1030 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698