| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 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 "GrRenderTargetOpList.h" | 8 #include "GrRenderTargetOpList.h" |
| 9 | 9 |
| 10 #include "GrAppliedClip.h" | 10 #include "GrAppliedClip.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 bounds.outset(0.5f, 0.5f); | 106 bounds.outset(0.5f, 0.5f); |
| 107 | 107 |
| 108 if (!pipelineBuilder.willXPNeedDstTexture(*this->caps(), optimizations)) { | 108 if (!pipelineBuilder.willXPNeedDstTexture(*this->caps(), optimizations)) { |
| 109 return true; | 109 return true; |
| 110 } | 110 } |
| 111 | 111 |
| 112 if (this->caps()->textureBarrierSupport()) { | 112 if (this->caps()->textureBarrierSupport()) { |
| 113 if (GrTexture* rtTex = rt->asTexture()) { | 113 if (GrTexture* rtTex = rt->asTexture()) { |
| 114 // The render target is a texture, so we can read from it directly i
n the shader. The XP | 114 // The render target is a texture, so we can read from it directly i
n the shader. The XP |
| 115 // will be responsible to detect this situation and request a textur
e barrier. | 115 // will be responsible to detect this situation and request a textur
e barrier. |
| 116 dstTexture->setTexture(rtTex); | 116 dstTexture->setTexture(sk_ref_sp(rtTex)); |
| 117 dstTexture->setOffset(0, 0); | 117 dstTexture->setOffset(0, 0); |
| 118 return true; | 118 return true; |
| 119 } | 119 } |
| 120 } | 120 } |
| 121 | 121 |
| 122 SkIRect copyRect; | 122 SkIRect copyRect; |
| 123 clip.getConservativeBounds(rt->width(), rt->height(), ©Rect); | 123 clip.getConservativeBounds(rt->width(), rt->height(), ©Rect); |
| 124 | 124 |
| 125 SkIRect drawIBounds; | 125 SkIRect drawIBounds; |
| 126 bounds.roundOut(&drawIBounds); | 126 bounds.roundOut(&drawIBounds); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 138 if (!fGpu->initDescForDstCopy(rt, &desc)) { | 138 if (!fGpu->initDescForDstCopy(rt, &desc)) { |
| 139 desc.fOrigin = kDefault_GrSurfaceOrigin; | 139 desc.fOrigin = kDefault_GrSurfaceOrigin; |
| 140 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 140 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 141 desc.fConfig = rt->config(); | 141 desc.fConfig = rt->config(); |
| 142 } | 142 } |
| 143 | 143 |
| 144 desc.fWidth = copyRect.width(); | 144 desc.fWidth = copyRect.width(); |
| 145 desc.fHeight = copyRect.height(); | 145 desc.fHeight = copyRect.height(); |
| 146 | 146 |
| 147 static const uint32_t kFlags = 0; | 147 static const uint32_t kFlags = 0; |
| 148 SkAutoTUnref<GrTexture> copy(fResourceProvider->createApproxTexture(desc, kF
lags)); | 148 sk_sp<GrTexture> copy(fResourceProvider->createApproxTexture(desc, kFlags)); |
| 149 | 149 |
| 150 if (!copy) { | 150 if (!copy) { |
| 151 SkDebugf("Failed to create temporary copy of destination texture.\n"); | 151 SkDebugf("Failed to create temporary copy of destination texture.\n"); |
| 152 return false; | 152 return false; |
| 153 } | 153 } |
| 154 SkIPoint dstPoint = {0, 0}; | 154 SkIPoint dstPoint = {0, 0}; |
| 155 this->copySurface(copy, rt, copyRect, dstPoint); | 155 this->copySurface(copy.get(), rt, copyRect, dstPoint); |
| 156 dstTexture->setTexture(copy); | 156 dstTexture->setTexture(std::move(copy)); |
| 157 dstTexture->setOffset(copyRect.fLeft, copyRect.fTop); | 157 dstTexture->setOffset(copyRect.fLeft, copyRect.fTop); |
| 158 return true; | 158 return true; |
| 159 } | 159 } |
| 160 | 160 |
| 161 void GrRenderTargetOpList::prepareBatches(GrBatchFlushState* flushState) { | 161 void GrRenderTargetOpList::prepareBatches(GrBatchFlushState* flushState) { |
| 162 // Semi-usually the GrOpLists are already closed at this point, but sometime
s Ganesh | 162 // Semi-usually the GrOpLists are already closed at this point, but sometime
s Ganesh |
| 163 // needs to flush mid-draw. In that case, the SkGpuDevice's GrOpLists won't
be closed | 163 // needs to flush mid-draw. In that case, the SkGpuDevice's GrOpLists won't
be closed |
| 164 // but need to be flushed anyway. Closing such GrOpLists here will mean new | 164 // but need to be flushed anyway. Closing such GrOpLists here will mean new |
| 165 // GrOpLists will be created to replace them if the SkGpuDevice(s) write to
them again. | 165 // GrOpLists will be created to replace them if the SkGpuDevice(s) write to
them again. |
| 166 this->makeClosed(); | 166 this->makeClosed(); |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 | 570 |
| 571 /////////////////////////////////////////////////////////////////////////////// | 571 /////////////////////////////////////////////////////////////////////////////// |
| 572 | 572 |
| 573 void GrRenderTargetOpList::clearStencilClip(const GrFixedClip& clip, | 573 void GrRenderTargetOpList::clearStencilClip(const GrFixedClip& clip, |
| 574 bool insideStencilMask, | 574 bool insideStencilMask, |
| 575 GrRenderTarget* rt) { | 575 GrRenderTarget* rt) { |
| 576 GrBatch* batch = new GrClearStencilClipBatch(clip, insideStencilMask, rt); | 576 GrBatch* batch = new GrClearStencilClipBatch(clip, insideStencilMask, rt); |
| 577 this->recordBatch(batch, batch->bounds()); | 577 this->recordBatch(batch, batch->bounds()); |
| 578 batch->unref(); | 578 batch->unref(); |
| 579 } | 579 } |
| OLD | NEW |