Skip to content

Commit c1bb9cb

Browse files
rphilliSkia Commit-Bot
authored andcommitted
Revert "Manage renderCmdEncoder over lifetime of GrMtlOpsRenderPass."
This reverts commit 53a72c1. Reason for revert: Mac 10.13 bot is red Original change's description: > Manage renderCmdEncoder over lifetime of GrMtlOpsRenderPass. > > Rather than create a renderCmdEncoder per draw, we create it up front > and each draw just uses it. On a clear or upload we switch away and > then recreate it. > > Bug: skia: > Change-Id: Ic6d612119ed3f7c41183d0186083deae14f96398 > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/270841 > Reviewed-by: Greg Daniel <[email protected]> > Commit-Queue: Jim Van Verth <[email protected]> [email protected],[email protected] # Not skipping CQ checks because original CL landed > 1 day ago. Bug: skia: Change-Id: Ibc2697c127ec3e309ed4bb5fe84982f6047e5915 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/271496 Reviewed-by: Robert Phillips <[email protected]> Commit-Queue: Robert Phillips <[email protected]>
1 parent 78b4717 commit c1bb9cb

3 files changed

Lines changed: 13 additions & 23 deletions

File tree

src/gpu/mtl/GrMtlCaps.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1057,7 +1057,7 @@ static bool format_is_srgb(MTLPixelFormat format) {
10571057
}
10581058
#endif
10591059

1060-
b.add32(rt->renderTargetPriv().getStencilAttachment()
1060+
b.add32(programInfo.pipeline().isStencilEnabled()
10611061
? this->preferredStencilFormat().fInternalFormat
10621062
: MTLPixelFormatInvalid);
10631063
b.add32((uint32_t)programInfo.pipeline().isStencilEnabled());

src/gpu/mtl/GrMtlOpsRenderPass.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ class GrMtlOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl
3333

3434
void initRenderState(id<MTLRenderCommandEncoder>);
3535

36-
void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override;
36+
void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override {
37+
// TODO: this could be more efficient
38+
state->doUpload(upload);
39+
}
3740
void submit();
3841

3942
private:

src/gpu/mtl/GrMtlOpsRenderPass.mm

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,14 @@
2929
}
3030

3131
GrMtlOpsRenderPass::~GrMtlOpsRenderPass() {
32+
SkASSERT(nil == fActiveRenderCmdEncoder);
3233
}
3334

3435
void GrMtlOpsRenderPass::precreateCmdEncoder() {
3536
// For clears, we may not have an associated draw. So we prepare a cmdEncoder that
3637
// will be submitted whether there's a draw or not.
38+
SkASSERT(nil == fActiveRenderCmdEncoder);
39+
3740
SkDEBUGCODE(id<MTLRenderCommandEncoder> cmdEncoder =)
3841
fGpu->commandBuffer()->getRenderCommandEncoder(fRenderPassDesc, nullptr, this);
3942
SkASSERT(nil != cmdEncoder);
@@ -46,7 +49,6 @@
4649
SkIRect iBounds;
4750
fBounds.roundOut(&iBounds);
4851
fGpu->submitIndirectCommandBuffer(fRenderTarget, fOrigin, &iBounds);
49-
fActiveRenderCmdEncoder = nil;
5052
}
5153

5254
GrMtlPipelineState* GrMtlOpsRenderPass::prepareDrawState(const GrProgramInfo& programInfo) {
@@ -76,10 +78,10 @@
7678
return;
7779
}
7880

79-
if (!fActiveRenderCmdEncoder) {
80-
fActiveRenderCmdEncoder =
81-
fGpu->commandBuffer()->getRenderCommandEncoder(fRenderPassDesc, nullptr, this);
82-
}
81+
SkASSERT(nil == fActiveRenderCmdEncoder);
82+
fActiveRenderCmdEncoder = fGpu->commandBuffer()->getRenderCommandEncoder(
83+
fRenderPassDesc, pipelineState, this);
84+
SkASSERT(fActiveRenderCmdEncoder);
8385

8486
[fActiveRenderCmdEncoder setRenderPipelineState:pipelineState->mtlPipelineState()];
8587
pipelineState->setDrawState(fActiveRenderCmdEncoder,
@@ -129,6 +131,7 @@
129131
mesh.sendToGpu(programInfo.primitiveType(), this);
130132
}
131133

134+
fActiveRenderCmdEncoder = nil;
132135
fBounds.join(bounds);
133136
}
134137

@@ -159,16 +162,6 @@
159162
fRenderPassDesc.stencilAttachment.loadAction = MTLLoadActionClear;
160163
this->precreateCmdEncoder();
161164
fRenderPassDesc.stencilAttachment.loadAction = MTLLoadActionLoad;
162-
fActiveRenderCmdEncoder =
163-
fGpu->commandBuffer()->getRenderCommandEncoder(fRenderPassDesc, nullptr, this);
164-
}
165-
166-
void GrMtlOpsRenderPass::inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) {
167-
// TODO: this could be more efficient
168-
state->doUpload(upload);
169-
// doUpload() creates a blitCommandEncoder, so we need to recreate a renderCommandEncoder
170-
fActiveRenderCmdEncoder =
171-
fGpu->commandBuffer()->getRenderCommandEncoder(fRenderPassDesc, nullptr, this);
172165
}
173166

174167
void GrMtlOpsRenderPass::initRenderState(id<MTLRenderCommandEncoder> encoder) {
@@ -247,12 +240,6 @@
247240
} else {
248241
fBounds.setEmpty();
249242
}
250-
251-
// For now, we lazily create the renderCommandEncoder because we may have no draws,
252-
// and an empty renderCommandEncoder can still produce output. This can cause issues
253-
// when we've cleared a texture upon creation -- we'll subsequently discard the contents.
254-
// This can be removed when that ordering is fixed.
255-
fActiveRenderCmdEncoder = nil;
256243
}
257244

258245
static MTLPrimitiveType gr_to_mtl_primitive(GrPrimitiveType primitiveType) {

0 commit comments

Comments
 (0)