| 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 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 GrWrapOwnership ownership) { | 715 GrWrapOwnership ownership) { |
| 716 GrGLRenderTarget::IDDesc idDesc; | 716 GrGLRenderTarget::IDDesc idDesc; |
| 717 idDesc.fRTFBOID = static_cast<GrGLuint>(wrapDesc.fRenderTargetHandle); | 717 idDesc.fRTFBOID = static_cast<GrGLuint>(wrapDesc.fRenderTargetHandle); |
| 718 idDesc.fMSColorRenderbufferID = 0; | 718 idDesc.fMSColorRenderbufferID = 0; |
| 719 idDesc.fTexFBOID = GrGLRenderTarget::kUnresolvableFBOID; | 719 idDesc.fTexFBOID = GrGLRenderTarget::kUnresolvableFBOID; |
| 720 if (kAdopt_GrWrapOwnership == ownership) { | 720 if (kAdopt_GrWrapOwnership == ownership) { |
| 721 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kOwned; | 721 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kOwned; |
| 722 } else { | 722 } else { |
| 723 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kBorrowed; | 723 idDesc.fRTFBOOwnership = GrBackendObjectOwnership::kBorrowed; |
| 724 } | 724 } |
| 725 idDesc.fSampleConfig = GrRenderTarget::kUnified_SampleConfig; | 725 idDesc.fIsMixedSampled = false; |
| 726 | 726 |
| 727 GrSurfaceDesc desc; | 727 GrSurfaceDesc desc; |
| 728 desc.fConfig = wrapDesc.fConfig; | 728 desc.fConfig = wrapDesc.fConfig; |
| 729 desc.fFlags = kCheckAllocation_GrSurfaceFlag | kRenderTarget_GrSurfaceFlag; | 729 desc.fFlags = kCheckAllocation_GrSurfaceFlag | kRenderTarget_GrSurfaceFlag; |
| 730 desc.fWidth = wrapDesc.fWidth; | 730 desc.fWidth = wrapDesc.fWidth; |
| 731 desc.fHeight = wrapDesc.fHeight; | 731 desc.fHeight = wrapDesc.fHeight; |
| 732 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount()
); | 732 desc.fSampleCnt = SkTMin(wrapDesc.fSampleCnt, this->caps()->maxSampleCount()
); |
| 733 desc.fOrigin = resolve_origin(wrapDesc.fOrigin, true); | 733 desc.fOrigin = resolve_origin(wrapDesc.fOrigin, true); |
| 734 | 734 |
| 735 return GrGLRenderTarget::CreateWrapped(this, desc, idDesc, wrapDesc.fStencil
Bits); | 735 return GrGLRenderTarget::CreateWrapped(this, desc, idDesc, wrapDesc.fStencil
Bits); |
| (...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1498 | 1498 |
| 1499 bool GrGLGpu::createRenderTargetObjects(const GrSurfaceDesc& desc, | 1499 bool GrGLGpu::createRenderTargetObjects(const GrSurfaceDesc& desc, |
| 1500 const GrGLTextureInfo& texInfo, | 1500 const GrGLTextureInfo& texInfo, |
| 1501 GrGLRenderTarget::IDDesc* idDesc) { | 1501 GrGLRenderTarget::IDDesc* idDesc) { |
| 1502 idDesc->fMSColorRenderbufferID = 0; | 1502 idDesc->fMSColorRenderbufferID = 0; |
| 1503 idDesc->fRTFBOID = 0; | 1503 idDesc->fRTFBOID = 0; |
| 1504 idDesc->fRTFBOOwnership = GrBackendObjectOwnership::kOwned; | 1504 idDesc->fRTFBOOwnership = GrBackendObjectOwnership::kOwned; |
| 1505 idDesc->fTexFBOID = 0; | 1505 idDesc->fTexFBOID = 0; |
| 1506 SkASSERT((GrGLCaps::kMixedSamples_MSFBOType == this->glCaps().msFBOType()) =
= | 1506 SkASSERT((GrGLCaps::kMixedSamples_MSFBOType == this->glCaps().msFBOType()) =
= |
| 1507 this->caps()->usesMixedSamples()); | 1507 this->caps()->usesMixedSamples()); |
| 1508 idDesc->fSampleConfig = GrRenderTarget::ComputeSampleConfig(*this->caps(), d
esc.fSampleCnt); | 1508 idDesc->fIsMixedSampled = desc.fSampleCnt > 0 && this->caps()->usesMixedSamp
les(); |
| 1509 | 1509 |
| 1510 GrGLenum status; | 1510 GrGLenum status; |
| 1511 | 1511 |
| 1512 GrGLenum colorRenderbufferFormat = 0; // suppress warning | 1512 GrGLenum colorRenderbufferFormat = 0; // suppress warning |
| 1513 | 1513 |
| 1514 if (desc.fSampleCnt > 0 && GrGLCaps::kNone_MSFBOType == this->glCaps().msFBO
Type()) { | 1514 if (desc.fSampleCnt > 0 && GrGLCaps::kNone_MSFBOType == this->glCaps().msFBO
Type()) { |
| 1515 goto FAILED; | 1515 goto FAILED; |
| 1516 } | 1516 } |
| 1517 | 1517 |
| 1518 GL_CALL(GenFramebuffers(1, &idDesc->fTexFBOID)); | 1518 GL_CALL(GenFramebuffers(1, &idDesc->fTexFBOID)); |
| (...skipping 1445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2964 } | 2964 } |
| 2965 } else { | 2965 } else { |
| 2966 if (kNo_TriState != fMSAAEnabled) { | 2966 if (kNo_TriState != fMSAAEnabled) { |
| 2967 GL_CALL(Disable(GR_GL_MULTISAMPLE)); | 2967 GL_CALL(Disable(GR_GL_MULTISAMPLE)); |
| 2968 fMSAAEnabled = kNo_TriState; | 2968 fMSAAEnabled = kNo_TriState; |
| 2969 } | 2969 } |
| 2970 } | 2970 } |
| 2971 } | 2971 } |
| 2972 | 2972 |
| 2973 if (0 != this->caps()->maxRasterSamples()) { | 2973 if (0 != this->caps()->maxRasterSamples()) { |
| 2974 if (useHWAA && rt->hasMixedSamples() && !stencilEnabled) { | 2974 if (useHWAA && rt->isMixedSampled() && !stencilEnabled) { |
| 2975 // Since stencil is disabled and we want more samples than are in th
e color buffer, we | 2975 // Since stencil is disabled and we want more samples than are in th
e color buffer, we |
| 2976 // need to tell the rasterizer explicitly how many to run. | 2976 // need to tell the rasterizer explicitly how many to run. |
| 2977 if (kYes_TriState != fHWRasterMultisampleEnabled) { | 2977 if (kYes_TriState != fHWRasterMultisampleEnabled) { |
| 2978 GL_CALL(Enable(GR_GL_RASTER_MULTISAMPLE)); | 2978 GL_CALL(Enable(GR_GL_RASTER_MULTISAMPLE)); |
| 2979 fHWRasterMultisampleEnabled = kYes_TriState; | 2979 fHWRasterMultisampleEnabled = kYes_TriState; |
| 2980 } | 2980 } |
| 2981 if (rt->numStencilSamples() != fHWNumRasterSamples) { | 2981 if (rt->numStencilSamples() != fHWNumRasterSamples) { |
| 2982 SkASSERT(rt->numStencilSamples() <= this->caps()->maxRasterSampl
es()); | 2982 SkASSERT(rt->numStencilSamples() <= this->caps()->maxRasterSampl
es()); |
| 2983 GL_CALL(RasterSamples(rt->numStencilSamples(), GR_GL_TRUE)); | 2983 GL_CALL(RasterSamples(rt->numStencilSamples(), GR_GL_TRUE)); |
| 2984 fHWNumRasterSamples = rt->numStencilSamples(); | 2984 fHWNumRasterSamples = rt->numStencilSamples(); |
| 2985 } | 2985 } |
| 2986 } else { | 2986 } else { |
| 2987 if (kNo_TriState != fHWRasterMultisampleEnabled) { | 2987 if (kNo_TriState != fHWRasterMultisampleEnabled) { |
| 2988 GL_CALL(Disable(GR_GL_RASTER_MULTISAMPLE)); | 2988 GL_CALL(Disable(GR_GL_RASTER_MULTISAMPLE)); |
| 2989 fHWRasterMultisampleEnabled = kNo_TriState; | 2989 fHWRasterMultisampleEnabled = kNo_TriState; |
| 2990 } | 2990 } |
| 2991 } | 2991 } |
| 2992 } else { | 2992 } else { |
| 2993 SkASSERT(!useHWAA || !rt->hasMixedSamples() || stencilEnabled); | 2993 SkASSERT(!useHWAA || !rt->isMixedSampled() || stencilEnabled); |
| 2994 } | 2994 } |
| 2995 } | 2995 } |
| 2996 | 2996 |
| 2997 void GrGLGpu::flushBlend(const GrXferProcessor::BlendInfo& blendInfo, const GrSw
izzle& swizzle) { | 2997 void GrGLGpu::flushBlend(const GrXferProcessor::BlendInfo& blendInfo, const GrSw
izzle& swizzle) { |
| 2998 // Any optimization to disable blending should have already been applied and | 2998 // Any optimization to disable blending should have already been applied and |
| 2999 // tweaked the equation to "add" or "subtract", and the coeffs to (1, 0). | 2999 // tweaked the equation to "add" or "subtract", and the coeffs to (1, 0). |
| 3000 | 3000 |
| 3001 GrBlendEquation equation = blendInfo.fEquation; | 3001 GrBlendEquation equation = blendInfo.fEquation; |
| 3002 GrBlendCoeff srcCoeff = blendInfo.fSrcBlend; | 3002 GrBlendCoeff srcCoeff = blendInfo.fSrcBlend; |
| 3003 GrBlendCoeff dstCoeff = blendInfo.fDstBlend; | 3003 GrBlendCoeff dstCoeff = blendInfo.fDstBlend; |
| (...skipping 1429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4433 | 4433 |
| 4434 // Unbind: | 4434 // Unbind: |
| 4435 GL_CALL(FramebufferTexture2D(GR_GL_FRAMEBUFFER, GR_GL_COLOR_ATTACHMENT0, | 4435 GL_CALL(FramebufferTexture2D(GR_GL_FRAMEBUFFER, GR_GL_COLOR_ATTACHMENT0, |
| 4436 GR_GL_TEXTURE_2D, 0, 0)); | 4436 GR_GL_TEXTURE_2D, 0, 0)); |
| 4437 | 4437 |
| 4438 return true; | 4438 return true; |
| 4439 } | 4439 } |
| 4440 | 4440 |
| 4441 void GrGLGpu::onGetMultisampleSpecs(GrRenderTarget* rt, const GrStencilSettings&
stencil, | 4441 void GrGLGpu::onGetMultisampleSpecs(GrRenderTarget* rt, const GrStencilSettings&
stencil, |
| 4442 int* effectiveSampleCnt, SamplePattern* samp
lePattern) { | 4442 int* effectiveSampleCnt, SamplePattern* samp
lePattern) { |
| 4443 SkASSERT(!rt->hasMixedSamples() || rt->renderTargetPriv().getStencilAttachme
nt() || | 4443 SkASSERT(!rt->isMixedSampled() || rt->renderTargetPriv().getStencilAttachmen
t() || |
| 4444 stencil.isDisabled()); | 4444 stencil.isDisabled()); |
| 4445 | 4445 |
| 4446 this->flushStencil(stencil); | 4446 this->flushStencil(stencil); |
| 4447 this->flushHWAAState(rt, true, !stencil.isDisabled()); | 4447 this->flushHWAAState(rt, true, !stencil.isDisabled()); |
| 4448 this->flushRenderTarget(static_cast<GrGLRenderTarget*>(rt), &SkIRect::EmptyI
Rect()); | 4448 this->flushRenderTarget(static_cast<GrGLRenderTarget*>(rt), &SkIRect::EmptyI
Rect()); |
| 4449 | 4449 |
| 4450 if (0 != this->caps()->maxRasterSamples()) { | 4450 if (0 != this->caps()->maxRasterSamples()) { |
| 4451 GR_GL_GetIntegerv(this->glInterface(), GR_GL_EFFECTIVE_RASTER_SAMPLES, e
ffectiveSampleCnt); | 4451 GR_GL_GetIntegerv(this->glInterface(), GR_GL_EFFECTIVE_RASTER_SAMPLES, e
ffectiveSampleCnt); |
| 4452 } else { | 4452 } else { |
| 4453 GR_GL_GetIntegerv(this->glInterface(), GR_GL_SAMPLES, effectiveSampleCnt
); | 4453 GR_GL_GetIntegerv(this->glInterface(), GR_GL_SAMPLES, effectiveSampleCnt
); |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4613 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || | 4613 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || |
| 4614 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { | 4614 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { |
| 4615 copyParams->fFilter = GrTextureParams::kNone_FilterMode; | 4615 copyParams->fFilter = GrTextureParams::kNone_FilterMode; |
| 4616 copyParams->fWidth = texture->width(); | 4616 copyParams->fWidth = texture->width(); |
| 4617 copyParams->fHeight = texture->height(); | 4617 copyParams->fHeight = texture->height(); |
| 4618 return true; | 4618 return true; |
| 4619 } | 4619 } |
| 4620 } | 4620 } |
| 4621 return false; | 4621 return false; |
| 4622 } | 4622 } |
| OLD | NEW |