| OLD | NEW |
| 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 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 // Submit the current command buffer to the Queue | 431 // Submit the current command buffer to the Queue |
| 432 this->submitCommandBuffer(kSkip_SyncQueue); | 432 this->submitCommandBuffer(kSkip_SyncQueue); |
| 433 | 433 |
| 434 transferBuffer->unref(); | 434 transferBuffer->unref(); |
| 435 } | 435 } |
| 436 | 436 |
| 437 return true; | 437 return true; |
| 438 } | 438 } |
| 439 | 439 |
| 440 //////////////////////////////////////////////////////////////////////////////// | 440 //////////////////////////////////////////////////////////////////////////////// |
| 441 GrTexture* GrVkGpu::onCreateTexture(const GrSurfaceDesc& desc, GrGpuResource::Li
feCycle lifeCycle, | 441 GrTexture* GrVkGpu::onCreateTexture(const GrSurfaceDesc& desc, SkBudgeted budget
ed, |
| 442 const SkTArray<GrMipLevel>& texels) { | 442 const SkTArray<GrMipLevel>& texels) { |
| 443 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag); | 443 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag); |
| 444 | 444 |
| 445 VkFormat pixelFormat; | 445 VkFormat pixelFormat; |
| 446 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) { | 446 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) { |
| 447 return nullptr; | 447 return nullptr; |
| 448 } | 448 } |
| 449 | 449 |
| 450 if (!fVkCaps->isConfigTexturable(desc.fConfig)) { | 450 if (!fVkCaps->isConfigTexturable(desc.fConfig)) { |
| 451 return nullptr; | 451 return nullptr; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 imageDesc.fWidth = desc.fWidth; | 486 imageDesc.fWidth = desc.fWidth; |
| 487 imageDesc.fHeight = desc.fHeight; | 487 imageDesc.fHeight = desc.fHeight; |
| 488 imageDesc.fLevels = 1; | 488 imageDesc.fLevels = 1; |
| 489 imageDesc.fSamples = 1; | 489 imageDesc.fSamples = 1; |
| 490 imageDesc.fImageTiling = linearTiling ? VK_IMAGE_TILING_LINEAR : VK_IMAGE_TI
LING_OPTIMAL; | 490 imageDesc.fImageTiling = linearTiling ? VK_IMAGE_TILING_LINEAR : VK_IMAGE_TI
LING_OPTIMAL; |
| 491 imageDesc.fUsageFlags = usageFlags; | 491 imageDesc.fUsageFlags = usageFlags; |
| 492 imageDesc.fMemProps = memProps; | 492 imageDesc.fMemProps = memProps; |
| 493 | 493 |
| 494 GrVkTexture* tex; | 494 GrVkTexture* tex; |
| 495 if (renderTarget) { | 495 if (renderTarget) { |
| 496 tex = GrVkTextureRenderTarget::CreateNewTextureRenderTarget(this, desc,
lifeCycle, | 496 tex = GrVkTextureRenderTarget::CreateNewTextureRenderTarget(this, budget
ed, desc, |
| 497 imageDesc); | 497 imageDesc); |
| 498 } else { | 498 } else { |
| 499 tex = GrVkTexture::CreateNewTexture(this, desc, lifeCycle, imageDesc); | 499 tex = GrVkTexture::CreateNewTexture(this, budgeted, desc, imageDesc); |
| 500 } | 500 } |
| 501 | 501 |
| 502 if (!tex) { | 502 if (!tex) { |
| 503 return nullptr; | 503 return nullptr; |
| 504 } | 504 } |
| 505 | 505 |
| 506 // TODO: We're ignoring MIP levels here. | 506 // TODO: We're ignoring MIP levels here. |
| 507 if (!texels.empty()) { | 507 if (!texels.empty()) { |
| 508 SkASSERT(texels.begin()->fPixels); | 508 SkASSERT(texels.begin()->fPixels); |
| 509 if (!this->uploadTexData(tex, 0, 0, desc.fWidth, desc.fHeight, desc.fCon
fig, | 509 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 Loading... |
| 541 int maxSize = this->caps()->maxTextureSize(); | 541 int maxSize = this->caps()->maxTextureSize(); |
| 542 if (desc.fWidth > maxSize || desc.fHeight > maxSize) { | 542 if (desc.fWidth > maxSize || desc.fHeight > maxSize) { |
| 543 return nullptr; | 543 return nullptr; |
| 544 } | 544 } |
| 545 | 545 |
| 546 const GrVkTextureInfo* info = reinterpret_cast<const GrVkTextureInfo*>(desc.
fTextureHandle); | 546 const GrVkTextureInfo* info = reinterpret_cast<const GrVkTextureInfo*>(desc.
fTextureHandle); |
| 547 if (VK_NULL_HANDLE == info->fImage || VK_NULL_HANDLE == info->fAlloc) { | 547 if (VK_NULL_HANDLE == info->fImage || VK_NULL_HANDLE == info->fAlloc) { |
| 548 return nullptr; | 548 return nullptr; |
| 549 } | 549 } |
| 550 | 550 |
| 551 GrGpuResource::LifeCycle lifeCycle = (kAdopt_GrWrapOwnership == ownership) | |
| 552 ? GrGpuResource::kAdopted_LifeCycle | |
| 553 : GrGpuResource::kBorrowed_LifeCycle; | |
| 554 | |
| 555 GrSurfaceDesc surfDesc; | 551 GrSurfaceDesc surfDesc; |
| 556 // next line relies on GrBackendTextureDesc's flags matching GrTexture's | 552 // next line relies on GrBackendTextureDesc's flags matching GrTexture's |
| 557 surfDesc.fFlags = (GrSurfaceFlags)desc.fFlags; | 553 surfDesc.fFlags = (GrSurfaceFlags)desc.fFlags; |
| 558 surfDesc.fWidth = desc.fWidth; | 554 surfDesc.fWidth = desc.fWidth; |
| 559 surfDesc.fHeight = desc.fHeight; | 555 surfDesc.fHeight = desc.fHeight; |
| 560 surfDesc.fConfig = desc.fConfig; | 556 surfDesc.fConfig = desc.fConfig; |
| 561 surfDesc.fSampleCnt = SkTMin(desc.fSampleCnt, this->caps()->maxSampleCount()
); | 557 surfDesc.fSampleCnt = SkTMin(desc.fSampleCnt, this->caps()->maxSampleCount()
); |
| 562 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrBackendTextureFla
g); | 558 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrBackendTextureFla
g); |
| 563 // In GL, Chrome assumes all textures are BottomLeft | 559 // In GL, Chrome assumes all textures are BottomLeft |
| 564 // In VK, we don't have this restriction | 560 // In VK, we don't have this restriction |
| 565 surfDesc.fOrigin = resolve_origin(desc.fOrigin); | 561 surfDesc.fOrigin = resolve_origin(desc.fOrigin); |
| 566 | 562 |
| 567 GrVkTexture* texture = nullptr; | 563 GrVkTexture* texture = nullptr; |
| 568 if (renderTarget) { | 564 if (renderTarget) { |
| 569 texture = GrVkTextureRenderTarget::CreateWrappedTextureRenderTarget(this
, surfDesc, | 565 texture = GrVkTextureRenderTarget::CreateWrappedTextureRenderTarget(this
, surfDesc, |
| 570 life
Cycle, format, | 566 owne
rship, format, |
| 571 info
); | 567 info
); |
| 572 } else { | 568 } else { |
| 573 texture = GrVkTexture::CreateWrappedTexture(this, surfDesc, lifeCycle, f
ormat, | 569 texture = GrVkTexture::CreateWrappedTexture(this, surfDesc, ownership, f
ormat, info); |
| 574 info); | |
| 575 } | 570 } |
| 576 if (!texture) { | 571 if (!texture) { |
| 577 return nullptr; | 572 return nullptr; |
| 578 } | 573 } |
| 579 | 574 |
| 580 return texture; | 575 return texture; |
| 581 } | 576 } |
| 582 | 577 |
| 583 GrRenderTarget* GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTargetDe
sc& wrapDesc, | 578 GrRenderTarget* GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTargetDe
sc& wrapDesc, |
| 584 GrWrapOwnership ownership) { | 579 GrWrapOwnership ownership) { |
| 585 | 580 |
| 586 const GrVkTextureInfo* info = | 581 const GrVkTextureInfo* info = |
| 587 reinterpret_cast<const GrVkTextureInfo*>(wrapDesc.fRenderTargetHandle); | 582 reinterpret_cast<const GrVkTextureInfo*>(wrapDesc.fRenderTargetHandle); |
| 588 if (VK_NULL_HANDLE == info->fImage || | 583 if (VK_NULL_HANDLE == info->fImage || |
| 589 (VK_NULL_HANDLE == info->fAlloc && kAdopt_GrWrapOwnership == ownership))
{ | 584 (VK_NULL_HANDLE == info->fAlloc && kAdopt_GrWrapOwnership == ownership))
{ |
| 590 return nullptr; | 585 return nullptr; |
| 591 } | 586 } |
| 592 | 587 |
| 593 GrGpuResource::LifeCycle lifeCycle = (kAdopt_GrWrapOwnership == ownership) | |
| 594 ? GrGpuResource::kAdopted_LifeCycle | |
| 595 : GrGpuResource::kBorrowed_LifeCycle; | |
| 596 | |
| 597 GrSurfaceDesc desc; | 588 GrSurfaceDesc desc; |
| 598 desc.fConfig = wrapDesc.fConfig; | 589 desc.fConfig = wrapDesc.fConfig; |
| 599 desc.fFlags = kCheckAllocation_GrSurfaceFlag; | 590 desc.fFlags = kCheckAllocation_GrSurfaceFlag; |
| 600 desc.fWidth = wrapDesc.fWidth; | 591 desc.fWidth = wrapDesc.fWidth; |
| 601 desc.fHeight = wrapDesc.fHeight; | 592 desc.fHeight = wrapDesc.fHeight; |
| 602 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount()
); | 593 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount()
); |
| 603 | 594 |
| 604 desc.fOrigin = resolve_origin(wrapDesc.fOrigin); | 595 desc.fOrigin = resolve_origin(wrapDesc.fOrigin); |
| 605 | 596 |
| 606 GrVkRenderTarget* tgt = GrVkRenderTarget::CreateWrappedRenderTarget(this, de
sc, | 597 GrVkRenderTarget* tgt = GrVkRenderTarget::CreateWrappedRenderTarget(this, de
sc, |
| 607 lifeCycl
e, | 598 ownershi
p, |
| 608 info); | 599 info); |
| 609 if (tgt && wrapDesc.fStencilBits) { | 600 if (tgt && wrapDesc.fStencilBits) { |
| 610 if (!createStencilAttachmentForRenderTarget(tgt, desc.fWidth, desc.fHeig
ht)) { | 601 if (!createStencilAttachmentForRenderTarget(tgt, desc.fWidth, desc.fHeig
ht)) { |
| 611 tgt->unref(); | 602 tgt->unref(); |
| 612 return nullptr; | 603 return nullptr; |
| 613 } | 604 } |
| 614 } | 605 } |
| 615 return tgt; | 606 return tgt; |
| 616 } | 607 } |
| 617 | 608 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 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 945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1611 aglSwapBuffers(aglGetCurrentContext()); | 1601 aglSwapBuffers(aglGetCurrentContext()); |
| 1612 int set_a_break_pt_here = 9; | 1602 int set_a_break_pt_here = 9; |
| 1613 aglSwapBuffers(aglGetCurrentContext()); | 1603 aglSwapBuffers(aglGetCurrentContext()); |
| 1614 #elif defined(SK_BUILD_FOR_WIN32) | 1604 #elif defined(SK_BUILD_FOR_WIN32) |
| 1615 SwapBuf(); | 1605 SwapBuf(); |
| 1616 int set_a_break_pt_here = 9; | 1606 int set_a_break_pt_here = 9; |
| 1617 SwapBuf(); | 1607 SwapBuf(); |
| 1618 #endif | 1608 #endif |
| 1619 #endif | 1609 #endif |
| 1620 } | 1610 } |
| OLD | NEW |