| Index: src/gpu/GrDrawTarget.cpp
|
| diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
|
| index 7213a92152af7d1efca0a48c65e815074a38a9a1..d498d49a3dc01f136e25a5a8fac08fcaa73a8b4f 100644
|
| --- a/src/gpu/GrDrawTarget.cpp
|
| +++ b/src/gpu/GrDrawTarget.cpp
|
| @@ -11,6 +11,7 @@
|
| #include "GrCaps.h"
|
| #include "GrDrawContext.h"
|
| #include "GrGpu.h"
|
| +#include "GrGpuCommandBuffer.h"
|
| #include "GrPath.h"
|
| #include "GrPipeline.h"
|
| #include "GrMemoryPool.h"
|
| @@ -209,10 +210,32 @@ void GrDrawTarget::prepareBatches(GrBatchFlushState* flushState) {
|
| void GrDrawTarget::drawBatches(GrBatchFlushState* flushState) {
|
| // Draw all the generated geometry.
|
| SkRandom random;
|
| + GrRenderTarget* currentRT = nullptr;
|
| + SkAutoTDelete<GrGpuCommandBuffer> commandBuffer;
|
| for (int i = 0; i < fBatches.count(); ++i) {
|
| if (!fBatches[i]) {
|
| continue;
|
| }
|
| + if (fBatches[i]->renderTarget() != currentRT) {
|
| + if (commandBuffer) {
|
| + commandBuffer->end();
|
| + // For now just use size of whole render target, but this should be updated to
|
| + // only be the actual bounds of the various draws.
|
| + SkIRect bounds = SkIRect::MakeWH(currentRT->width(), currentRT->height());
|
| + commandBuffer->submit(bounds);
|
| + commandBuffer.reset();
|
| + }
|
| + currentRT = fBatches[i]->renderTarget();
|
| + if (currentRT) {
|
| + static const GrGpuCommandBuffer::LoadAndStoreInfo kBasicLoadStoreInfo
|
| + { GrGpuCommandBuffer::LoadOp::kLoad,GrGpuCommandBuffer::StoreOp::kStore,
|
| + GrColor_ILLEGAL };
|
| + commandBuffer.reset(fGpu->createCommandBuffer(currentRT,
|
| + kBasicLoadStoreInfo, // Color
|
| + kBasicLoadStoreInfo)); // Stencil
|
| + }
|
| + flushState->setCommandBuffer(commandBuffer);
|
| + }
|
| if (fDrawBatchBounds) {
|
| const SkRect& bounds = fBatches[i]->bounds();
|
| SkIRect ibounds;
|
| @@ -225,6 +248,14 @@ void GrDrawTarget::drawBatches(GrBatchFlushState* flushState) {
|
| }
|
| fBatches[i]->draw(flushState);
|
| }
|
| + if (commandBuffer) {
|
| + commandBuffer->end();
|
| + // For now just use size of whole render target, but this should be updated to
|
| + // only be the actual bounds of the various draws.
|
| + SkIRect bounds = SkIRect::MakeWH(currentRT->width(), currentRT->height());
|
| + commandBuffer->submit(bounds);
|
| + flushState->setCommandBuffer(nullptr);
|
| + }
|
|
|
| fGpu->finishDrawTarget();
|
| }
|
|
|