| Index: src/gpu/GrDrawTarget.cpp
|
| diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
|
| index bca347dbea6edf206e0a30b53def318c554cc13d..1af3ac4ef02c56cfc869cb76a2f5d1e996d216b5 100644
|
| --- a/src/gpu/GrDrawTarget.cpp
|
| +++ b/src/gpu/GrDrawTarget.cpp
|
| @@ -386,8 +386,20 @@ bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil
|
| if (!pipelineBuilder.willXPNeedDstCopy(*this->caps(), colorPOI, coveragePOI)) {
|
| return true;
|
| }
|
| - SkIRect copyRect;
|
| +
|
| GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
|
| +
|
| + if (this->caps()->textureBarrierSupport()) {
|
| + if (GrTexture* rtTex = rt->asTexture()) {
|
| + // The render target is a texture, se we can read from it directly in the shader. The XP
|
| + // will be responsible to detect this situation and request a texture barrier.
|
| + dstCopy->setTexture(rtTex);
|
| + dstCopy->setOffset(0, 0);
|
| + return true;
|
| + }
|
| + }
|
| +
|
| + SkIRect copyRect;
|
| pipelineBuilder.clip().getConservativeBounds(rt, ©Rect);
|
|
|
| if (drawBounds) {
|
| @@ -1067,6 +1079,7 @@ void GrDrawTargetCaps::reset() {
|
|
|
| fUseDrawInsteadOfClear = false;
|
|
|
| + fBlendEquationSupport = kBasic_BlendEquationSupport;
|
| fMapBufferFlags = kNone_MapFlags;
|
|
|
| fMaxRenderTargetSize = 0;
|
| @@ -1098,6 +1111,7 @@ GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) {
|
|
|
| fUseDrawInsteadOfClear = other.fUseDrawInsteadOfClear;
|
|
|
| + fBlendEquationSupport = other.fBlendEquationSupport;
|
| fMapBufferFlags = other.fMapBufferFlags;
|
|
|
| fMaxRenderTargetSize = other.fMaxRenderTargetSize;
|
| @@ -1184,6 +1198,18 @@ SkString GrDrawTargetCaps::dump() const {
|
| r.appendf("Max Render Target Size : %d\n", fMaxRenderTargetSize);
|
| r.appendf("Max Sample Count : %d\n", fMaxSampleCount);
|
|
|
| + static const char* kBlendEquationSupportNames[] = {
|
| + "Basic",
|
| + "Advanced",
|
| + "Advanced Coherent",
|
| + };
|
| + GR_STATIC_ASSERT(0 == kBasic_BlendEquationSupport);
|
| + GR_STATIC_ASSERT(1 == kAdvanced_BlendEquationSupport);
|
| + GR_STATIC_ASSERT(2 == kAdvancedCoherent_BlendEquationSupport);
|
| + GR_STATIC_ASSERT(SK_ARRAY_COUNT(kBlendEquationSupportNames) == kLast_BlendEquationSupport + 1);
|
| +
|
| + r.appendf("Blend Equation Support : %s\n",
|
| + kBlendEquationSupportNames[fBlendEquationSupport]);
|
| r.appendf("Map Buffer Support : %s\n",
|
| map_flags_to_string(fMapBufferFlags).c_str());
|
|
|
|
|