OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "GrGLGpu.h" | 8 #include "GrGLGpu.h" |
9 #include "GrGLBuffer.h" | 9 #include "GrGLBuffer.h" |
10 #include "GrGLGLSL.h" | 10 #include "GrGLGLSL.h" |
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
617 // By default, GrRenderTargets are GL's normal orientation so that they | 617 // By default, GrRenderTargets are GL's normal orientation so that they |
618 // can be drawn to by the outside world without the client having | 618 // can be drawn to by the outside world without the client having |
619 // to render upside down. | 619 // to render upside down. |
620 if (kDefault_GrSurfaceOrigin == origin) { | 620 if (kDefault_GrSurfaceOrigin == origin) { |
621 return renderTarget ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOr
igin; | 621 return renderTarget ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOr
igin; |
622 } else { | 622 } else { |
623 return origin; | 623 return origin; |
624 } | 624 } |
625 } | 625 } |
626 | 626 |
627 GrTexture* GrGLGpu::onWrapBackendTexture(const GrBackendTextureDesc& desc, | 627 sk_sp<GrTexture> GrGLGpu::onWrapBackendTexture(const GrBackendTextureDesc& desc, |
628 GrWrapOwnership ownership) { | 628 GrWrapOwnership ownership) { |
629 const GrGLTextureInfo* info = reinterpret_cast<const GrGLTextureInfo*>(desc.
fTextureHandle); | 629 const GrGLTextureInfo* info = reinterpret_cast<const GrGLTextureInfo*>(desc.
fTextureHandle); |
630 if (!info || !info->fID) { | 630 if (!info || !info->fID) { |
631 return nullptr; | 631 return nullptr; |
632 } | 632 } |
633 | 633 |
634 // next line relies on GrBackendTextureDesc's flags matching GrTexture's | 634 // next line relies on GrBackendTextureDesc's flags matching GrTexture's |
635 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrBackendTextureFla
g); | 635 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrBackendTextureFla
g); |
636 | 636 |
637 GrGLTexture::IDDesc idDesc; | 637 GrGLTexture::IDDesc idDesc; |
638 idDesc.fInfo = *info; | 638 idDesc.fInfo = *info; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 // FIXME: this should be calling resolve_origin(), but Chrome code is curre
ntly | 674 // FIXME: this should be calling resolve_origin(), but Chrome code is curre
ntly |
675 // assuming the old behaviour, which is that backend textures are always | 675 // assuming the old behaviour, which is that backend textures are always |
676 // BottomLeft, even for non-RT's. Once Chrome is fixed, change this to: | 676 // BottomLeft, even for non-RT's. Once Chrome is fixed, change this to: |
677 // glTexDesc.fOrigin = resolve_origin(desc.fOrigin, renderTarget); | 677 // glTexDesc.fOrigin = resolve_origin(desc.fOrigin, renderTarget); |
678 if (kDefault_GrSurfaceOrigin == desc.fOrigin) { | 678 if (kDefault_GrSurfaceOrigin == desc.fOrigin) { |
679 surfDesc.fOrigin = kBottomLeft_GrSurfaceOrigin; | 679 surfDesc.fOrigin = kBottomLeft_GrSurfaceOrigin; |
680 } else { | 680 } else { |
681 surfDesc.fOrigin = desc.fOrigin; | 681 surfDesc.fOrigin = desc.fOrigin; |
682 } | 682 } |
683 | 683 |
684 GrGLTexture* texture = nullptr; | |
685 if (renderTarget) { | 684 if (renderTarget) { |
686 GrGLRenderTarget::IDDesc rtIDDesc; | 685 GrGLRenderTarget::IDDesc rtIDDesc; |
687 if (!this->createRenderTargetObjects(surfDesc, idDesc.fInfo, &rtIDDesc))
{ | 686 if (!this->createRenderTargetObjects(surfDesc, idDesc.fInfo, &rtIDDesc))
{ |
688 return nullptr; | 687 return nullptr; |
689 } | 688 } |
690 texture = GrGLTextureRenderTarget::CreateWrapped(this, surfDesc, idDesc,
rtIDDesc); | 689 return GrGLTextureRenderTarget::MakeWrapped(this, surfDesc, idDesc, rtID
Desc); |
691 } else { | |
692 texture = GrGLTexture::CreateWrapped(this, surfDesc, idDesc); | |
693 } | 690 } |
694 if (nullptr == texture) { | 691 return GrGLTexture::MakeWrapped(this, surfDesc, idDesc); |
695 return nullptr; | |
696 } | |
697 | |
698 return texture; | |
699 } | 692 } |
700 | 693 |
701 GrRenderTarget* GrGLGpu::onWrapBackendRenderTarget(const GrBackendRenderTargetDe
sc& wrapDesc, | 694 sk_sp<GrRenderTarget> GrGLGpu::onWrapBackendRenderTarget(const GrBackendRenderTa
rgetDesc& wrapDesc, |
702 GrWrapOwnership ownership) { | 695 GrWrapOwnership ownersh
ip) { |
703 GrGLRenderTarget::IDDesc idDesc; | 696 GrGLRenderTarget::IDDesc idDesc; |
704 idDesc.fRTFBOID = static_cast<GrGLuint>(wrapDesc.fRenderTargetHandle); | 697 idDesc.fRTFBOID = static_cast<GrGLuint>(wrapDesc.fRenderTargetHandle); |
705 idDesc.fMSColorRenderbufferID = 0; | 698 idDesc.fMSColorRenderbufferID = 0; |
706 idDesc.fTexFBOID = GrGLRenderTarget::kUnresolvableFBOID; | 699 idDesc.fTexFBOID = GrGLRenderTarget::kUnresolvableFBOID; |
707 if (kAdopt_GrWrapOwnership == ownership) { | 700 if (kAdopt_GrWrapOwnership == ownership) { |
708 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kOwned; | 701 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kOwned; |
709 } else { | 702 } else { |
710 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kBorrowed; | 703 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kBorrowed; |
711 } | 704 } |
712 idDesc.fIsMixedSampled = false; | 705 idDesc.fIsMixedSampled = false; |
713 | 706 |
714 GrSurfaceDesc desc; | 707 GrSurfaceDesc desc; |
715 desc.fConfig = wrapDesc.fConfig; | 708 desc.fConfig = wrapDesc.fConfig; |
716 desc.fFlags = kCheckAllocation_GrSurfaceFlag | kRenderTarget_GrSurfaceFlag; | 709 desc.fFlags = kCheckAllocation_GrSurfaceFlag | kRenderTarget_GrSurfaceFlag; |
717 desc.fWidth = wrapDesc.fWidth; | 710 desc.fWidth = wrapDesc.fWidth; |
718 desc.fHeight = wrapDesc.fHeight; | 711 desc.fHeight = wrapDesc.fHeight; |
719 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount()
); | 712 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount()
); |
720 desc.fOrigin = resolve_origin(wrapDesc.fOrigin, true); | 713 desc.fOrigin = resolve_origin(wrapDesc.fOrigin, true); |
721 | 714 |
722 return GrGLRenderTarget::CreateWrapped(this, desc, idDesc, wrapDesc.fStencil
Bits); | 715 return GrGLRenderTarget::MakeWrapped(this, desc, idDesc, wrapDesc.fStencilBi
ts); |
723 } | 716 } |
724 | 717 |
725 GrRenderTarget* GrGLGpu::onWrapBackendTextureAsRenderTarget(const GrBackendTextu
reDesc& desc) { | 718 sk_sp<GrRenderTarget> GrGLGpu::onWrapBackendTextureAsRenderTarget(const GrBacken
dTextureDesc& desc){ |
726 const GrGLTextureInfo* info = reinterpret_cast<const GrGLTextureInfo*>(desc.
fTextureHandle); | 719 const GrGLTextureInfo* info = reinterpret_cast<const GrGLTextureInfo*>(desc.
fTextureHandle); |
727 if (!info || !info->fID) { | 720 if (!info || !info->fID) { |
728 return nullptr; | 721 return nullptr; |
729 } | 722 } |
730 | 723 |
731 GrGLTextureInfo texInfo; | 724 GrGLTextureInfo texInfo; |
732 texInfo = *info; | 725 texInfo = *info; |
733 | 726 |
734 if (GR_GL_TEXTURE_RECTANGLE != texInfo.fTarget && | 727 if (GR_GL_TEXTURE_RECTANGLE != texInfo.fTarget && |
735 GR_GL_TEXTURE_2D != texInfo.fTarget) { | 728 GR_GL_TEXTURE_2D != texInfo.fTarget) { |
(...skipping 16 matching lines...) Expand all Loading... |
752 if (kDefault_GrSurfaceOrigin == desc.fOrigin) { | 745 if (kDefault_GrSurfaceOrigin == desc.fOrigin) { |
753 surfDesc.fOrigin = kBottomLeft_GrSurfaceOrigin; | 746 surfDesc.fOrigin = kBottomLeft_GrSurfaceOrigin; |
754 } else { | 747 } else { |
755 surfDesc.fOrigin = desc.fOrigin; | 748 surfDesc.fOrigin = desc.fOrigin; |
756 } | 749 } |
757 | 750 |
758 GrGLRenderTarget::IDDesc rtIDDesc; | 751 GrGLRenderTarget::IDDesc rtIDDesc; |
759 if (!this->createRenderTargetObjects(surfDesc, texInfo, &rtIDDesc)) { | 752 if (!this->createRenderTargetObjects(surfDesc, texInfo, &rtIDDesc)) { |
760 return nullptr; | 753 return nullptr; |
761 } | 754 } |
762 return GrGLRenderTarget::CreateWrapped(this, surfDesc, rtIDDesc, 0); | 755 return GrGLRenderTarget::MakeWrapped(this, surfDesc, rtIDDesc, 0); |
763 } | 756 } |
764 | 757 |
765 //////////////////////////////////////////////////////////////////////////////// | 758 //////////////////////////////////////////////////////////////////////////////// |
766 | 759 |
767 bool GrGLGpu::onGetWritePixelsInfo(GrSurface* dstSurface, int width, int height, | 760 bool GrGLGpu::onGetWritePixelsInfo(GrSurface* dstSurface, int width, int height, |
768 GrPixelConfig srcConfig, | 761 GrPixelConfig srcConfig, |
769 DrawPreference* drawPreference, | 762 DrawPreference* drawPreference, |
770 WritePixelTempDrawInfo* tempDrawInfo) { | 763 WritePixelTempDrawInfo* tempDrawInfo) { |
771 if (kIndex_8_GrPixelConfig == srcConfig || GrPixelConfigIsCompressed(dstSurf
ace->config())) { | 764 if (kIndex_8_GrPixelConfig == srcConfig || GrPixelConfigIsCompressed(dstSurf
ace->config())) { |
772 return false; | 765 return false; |
(...skipping 3876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4649 | 4642 |
4650 bool GrGLGpu::waitFence(GrFence fence, uint64_t timeout) const { | 4643 bool GrGLGpu::waitFence(GrFence fence, uint64_t timeout) const { |
4651 GrGLenum result; | 4644 GrGLenum result; |
4652 GL_CALL_RET(result, ClientWaitSync((GrGLsync)fence, GR_GL_SYNC_FLUSH_COMMAND
S_BIT, timeout)); | 4645 GL_CALL_RET(result, ClientWaitSync((GrGLsync)fence, GR_GL_SYNC_FLUSH_COMMAND
S_BIT, timeout)); |
4653 return (GR_GL_CONDITION_SATISFIED == result); | 4646 return (GR_GL_CONDITION_SATISFIED == result); |
4654 } | 4647 } |
4655 | 4648 |
4656 void GrGLGpu::deleteFence(GrFence fence) const { | 4649 void GrGLGpu::deleteFence(GrFence fence) const { |
4657 GL_CALL(DeleteSync((GrGLsync)fence)); | 4650 GL_CALL(DeleteSync((GrGLsync)fence)); |
4658 } | 4651 } |
OLD | NEW |