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

Side by Side Diff: src/gpu/vk/GrVkGpu.cpp

Issue 1862043002: Refactor to separate backend object lifecycle and GpuResource budget decision (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 4 years, 8 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 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrVkGpu.h" 8 #include "GrVkGpu.h"
9 9
10 #include "GrContextOptions.h" 10 #include "GrContextOptions.h"
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 // Submit the current command buffer to the Queue 421 // Submit the current command buffer to the Queue
422 this->submitCommandBuffer(kSkip_SyncQueue); 422 this->submitCommandBuffer(kSkip_SyncQueue);
423 423
424 transferBuffer->unref(); 424 transferBuffer->unref();
425 } 425 }
426 426
427 return true; 427 return true;
428 } 428 }
429 429
430 //////////////////////////////////////////////////////////////////////////////// 430 ////////////////////////////////////////////////////////////////////////////////
431 GrTexture* GrVkGpu::onCreateTexture(const GrSurfaceDesc& desc, GrGpuResource::Li feCycle lifeCycle, 431 GrTexture* GrVkGpu::onCreateTexture(const GrSurfaceDesc& desc, SkBudgeted budget ed,
432 const SkTArray<GrMipLevel>& texels) { 432 const SkTArray<GrMipLevel>& texels) {
433 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag); 433 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag);
434 434
435 VkFormat pixelFormat; 435 VkFormat pixelFormat;
436 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) { 436 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) {
437 return nullptr; 437 return nullptr;
438 } 438 }
439 439
440 if (!fVkCaps->isConfigTexturable(desc.fConfig)) { 440 if (!fVkCaps->isConfigTexturable(desc.fConfig)) {
441 return nullptr; 441 return nullptr;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 imageDesc.fWidth = desc.fWidth; 476 imageDesc.fWidth = desc.fWidth;
477 imageDesc.fHeight = desc.fHeight; 477 imageDesc.fHeight = desc.fHeight;
478 imageDesc.fLevels = 1; 478 imageDesc.fLevels = 1;
479 imageDesc.fSamples = 1; 479 imageDesc.fSamples = 1;
480 imageDesc.fImageTiling = linearTiling ? VK_IMAGE_TILING_LINEAR : VK_IMAGE_TI LING_OPTIMAL; 480 imageDesc.fImageTiling = linearTiling ? VK_IMAGE_TILING_LINEAR : VK_IMAGE_TI LING_OPTIMAL;
481 imageDesc.fUsageFlags = usageFlags; 481 imageDesc.fUsageFlags = usageFlags;
482 imageDesc.fMemProps = memProps; 482 imageDesc.fMemProps = memProps;
483 483
484 GrVkTexture* tex; 484 GrVkTexture* tex;
485 if (renderTarget) { 485 if (renderTarget) {
486 tex = GrVkTextureRenderTarget::CreateNewTextureRenderTarget(this, desc, lifeCycle, 486 tex = GrVkTextureRenderTarget::CreateNewTextureRenderTarget(this, budget ed, desc,
487 imageDesc); 487 imageDesc);
488 } else { 488 } else {
489 tex = GrVkTexture::CreateNewTexture(this, desc, lifeCycle, imageDesc); 489 tex = GrVkTexture::CreateNewTexture(this, budgeted, desc, imageDesc);
490 } 490 }
491 491
492 if (!tex) { 492 if (!tex) {
493 return nullptr; 493 return nullptr;
494 } 494 }
495 495
496 // TODO: We're ignoring MIP levels here. 496 // TODO: We're ignoring MIP levels here.
497 if (!texels.empty()) { 497 if (!texels.empty()) {
498 SkASSERT(texels.begin()->fPixels); 498 SkASSERT(texels.begin()->fPixels);
499 if (!this->uploadTexData(tex, 0, 0, desc.fWidth, desc.fHeight, desc.fCon fig, 499 if (!this->uploadTexData(tex, 0, 0, desc.fWidth, desc.fHeight, desc.fCon fig,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 int maxSize = this->caps()->maxTextureSize(); 531 int maxSize = this->caps()->maxTextureSize();
532 if (desc.fWidth > maxSize || desc.fHeight > maxSize) { 532 if (desc.fWidth > maxSize || desc.fHeight > maxSize) {
533 return nullptr; 533 return nullptr;
534 } 534 }
535 535
536 const GrVkTextureInfo* info = reinterpret_cast<const GrVkTextureInfo*>(desc. fTextureHandle); 536 const GrVkTextureInfo* info = reinterpret_cast<const GrVkTextureInfo*>(desc. fTextureHandle);
537 if (VK_NULL_HANDLE == info->fImage || VK_NULL_HANDLE == info->fAlloc) { 537 if (VK_NULL_HANDLE == info->fImage || VK_NULL_HANDLE == info->fAlloc) {
538 return nullptr; 538 return nullptr;
539 } 539 }
540 540
541 GrGpuResource::LifeCycle lifeCycle = (kAdopt_GrWrapOwnership == ownership)
542 ? GrGpuResource::kAdopted_LifeCycle
543 : GrGpuResource::kBorrowed_LifeCycle;
544
545 GrSurfaceDesc surfDesc; 541 GrSurfaceDesc surfDesc;
546 // next line relies on GrBackendTextureDesc's flags matching GrTexture's 542 // next line relies on GrBackendTextureDesc's flags matching GrTexture's
547 surfDesc.fFlags = (GrSurfaceFlags)desc.fFlags; 543 surfDesc.fFlags = (GrSurfaceFlags)desc.fFlags;
548 surfDesc.fWidth = desc.fWidth; 544 surfDesc.fWidth = desc.fWidth;
549 surfDesc.fHeight = desc.fHeight; 545 surfDesc.fHeight = desc.fHeight;
550 surfDesc.fConfig = desc.fConfig; 546 surfDesc.fConfig = desc.fConfig;
551 surfDesc.fSampleCnt = SkTMin(desc.fSampleCnt, this->caps()->maxSampleCount() ); 547 surfDesc.fSampleCnt = SkTMin(desc.fSampleCnt, this->caps()->maxSampleCount() );
552 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrBackendTextureFla g); 548 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrBackendTextureFla g);
553 // In GL, Chrome assumes all textures are BottomLeft 549 // In GL, Chrome assumes all textures are BottomLeft
554 // In VK, we don't have this restriction 550 // In VK, we don't have this restriction
555 surfDesc.fOrigin = resolve_origin(desc.fOrigin); 551 surfDesc.fOrigin = resolve_origin(desc.fOrigin);
556 552
557 GrVkTexture* texture = nullptr; 553 GrVkTexture* texture = nullptr;
558 if (renderTarget) { 554 if (renderTarget) {
559 texture = GrVkTextureRenderTarget::CreateWrappedTextureRenderTarget(this , surfDesc, 555 texture = GrVkTextureRenderTarget::CreateWrappedTextureRenderTarget(this , surfDesc,
560 life Cycle, format, 556 owne rship, format,
561 info ); 557 info );
562 } else { 558 } else {
563 texture = GrVkTexture::CreateWrappedTexture(this, surfDesc, lifeCycle, f ormat, 559 texture = GrVkTexture::CreateWrappedTexture(this, surfDesc, ownership, f ormat, info);
564 info);
565 } 560 }
566 if (!texture) { 561 if (!texture) {
567 return nullptr; 562 return nullptr;
568 } 563 }
569 564
570 return texture; 565 return texture;
571 } 566 }
572 567
573 GrRenderTarget* GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTargetDe sc& wrapDesc, 568 GrRenderTarget* GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTargetDe sc& wrapDesc,
574 GrWrapOwnership ownership) { 569 GrWrapOwnership ownership) {
575 570
576 const GrVkTextureInfo* info = 571 const GrVkTextureInfo* info =
577 reinterpret_cast<const GrVkTextureInfo*>(wrapDesc.fRenderTargetHandle); 572 reinterpret_cast<const GrVkTextureInfo*>(wrapDesc.fRenderTargetHandle);
578 if (VK_NULL_HANDLE == info->fImage || 573 if (VK_NULL_HANDLE == info->fImage ||
579 (VK_NULL_HANDLE == info->fAlloc && kAdopt_GrWrapOwnership == ownership)) { 574 (VK_NULL_HANDLE == info->fAlloc && kAdopt_GrWrapOwnership == ownership)) {
580 return nullptr; 575 return nullptr;
581 } 576 }
582 577
583 GrGpuResource::LifeCycle lifeCycle = (kAdopt_GrWrapOwnership == ownership)
584 ? GrGpuResource::kAdopted_LifeCycle
585 : GrGpuResource::kBorrowed_LifeCycle;
586
587 GrSurfaceDesc desc; 578 GrSurfaceDesc desc;
588 desc.fConfig = wrapDesc.fConfig; 579 desc.fConfig = wrapDesc.fConfig;
589 desc.fFlags = kCheckAllocation_GrSurfaceFlag; 580 desc.fFlags = kCheckAllocation_GrSurfaceFlag;
590 desc.fWidth = wrapDesc.fWidth; 581 desc.fWidth = wrapDesc.fWidth;
591 desc.fHeight = wrapDesc.fHeight; 582 desc.fHeight = wrapDesc.fHeight;
592 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount() ); 583 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount() );
593 584
594 desc.fOrigin = resolve_origin(wrapDesc.fOrigin); 585 desc.fOrigin = resolve_origin(wrapDesc.fOrigin);
595 586
596 GrVkRenderTarget* tgt = GrVkRenderTarget::CreateWrappedRenderTarget(this, de sc, 587 GrVkRenderTarget* tgt = GrVkRenderTarget::CreateWrappedRenderTarget(this, de sc,
597 lifeCycl e, 588 ownershi p,
598 info); 589 info);
599 if (tgt && wrapDesc.fStencilBits) { 590 if (tgt && wrapDesc.fStencilBits) {
600 if (!createStencilAttachmentForRenderTarget(tgt, desc.fWidth, desc.fHeig ht)) { 591 if (!createStencilAttachmentForRenderTarget(tgt, desc.fWidth, desc.fHeig ht)) {
601 tgt->unref(); 592 tgt->unref();
602 return nullptr; 593 return nullptr;
603 } 594 }
604 } 595 }
605 return tgt; 596 return tgt;
606 } 597 }
607 598
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 int width, 636 int width,
646 int height) { 637 int height) {
647 SkASSERT(width >= rt->width()); 638 SkASSERT(width >= rt->width());
648 SkASSERT(height >= rt->height()); 639 SkASSERT(height >= rt->height());
649 640
650 int samples = rt->numStencilSamples(); 641 int samples = rt->numStencilSamples();
651 642
652 const GrVkCaps::StencilFormat& sFmt = this->vkCaps().preferedStencilFormat() ; 643 const GrVkCaps::StencilFormat& sFmt = this->vkCaps().preferedStencilFormat() ;
653 644
654 GrVkStencilAttachment* stencil(GrVkStencilAttachment::Create(this, 645 GrVkStencilAttachment* stencil(GrVkStencilAttachment::Create(this,
655 GrGpuResource:: kCached_LifeCycle,
656 width, 646 width,
657 height, 647 height,
658 samples, 648 samples,
659 sFmt)); 649 sFmt));
660 fStats.incStencilAttachmentCreates(); 650 fStats.incStencilAttachmentCreates();
661 return stencil; 651 return stencil;
662 } 652 }
663 653
664 //////////////////////////////////////////////////////////////////////////////// 654 ////////////////////////////////////////////////////////////////////////////////
665 655
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 aglSwapBuffers(aglGetCurrentContext()); 1570 aglSwapBuffers(aglGetCurrentContext());
1581 int set_a_break_pt_here = 9; 1571 int set_a_break_pt_here = 9;
1582 aglSwapBuffers(aglGetCurrentContext()); 1572 aglSwapBuffers(aglGetCurrentContext());
1583 #elif defined(SK_BUILD_FOR_WIN32) 1573 #elif defined(SK_BUILD_FOR_WIN32)
1584 SwapBuf(); 1574 SwapBuf();
1585 int set_a_break_pt_here = 9; 1575 int set_a_break_pt_here = 9;
1586 SwapBuf(); 1576 SwapBuf();
1587 #endif 1577 #endif
1588 #endif 1578 #endif
1589 } 1579 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698