Remove GrGpuTextureCommandBuffer class and rename to GrOpsRenderPass.
Change-Id: Ia6e666a7bb986bb3dc769d25919580bca17b4748
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/236556
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrCaps.h b/src/gpu/GrCaps.h
index 02ff07e..b7229bc 100644
--- a/src/gpu/GrCaps.h
+++ b/src/gpu/GrCaps.h
@@ -121,7 +121,7 @@
kCanMap_MapFlag = 0x1, //<! The resource can be mapped. Must be set for any of
// the other flags to have meaning.
kSubset_MapFlag = 0x2, //<! The resource can be partially mapped.
- kAsyncRead_MapFlag = 0x4, //<! Are maps for reading asynchronous WRT GrGpuCommandBuffers
+ kAsyncRead_MapFlag = 0x4, //<! Are maps for reading asynchronous WRT GrOpsRenderPass
// submitted to GrGpu.
};
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index 987b956..a32240c 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -470,7 +470,7 @@
}
}
- SkASSERT(!flushState->commandBuffer());
+ SkASSERT(!flushState->opsRenderPass());
SkASSERT(fTokenTracker.nextDrawToken() == fTokenTracker.nextTokenToFlush());
// We reset the flush state before the RenderTasks so that the last resources to be freed are
diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
index 71e1557..a221cc7 100644
--- a/src/gpu/GrGpu.h
+++ b/src/gpu/GrGpu.h
@@ -14,7 +14,7 @@
#include "include/private/SkTArray.h"
#include "src/gpu/GrAllocator.h"
#include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrProgramDesc.h"
#include "src/gpu/GrSamplePatternDictionary.h"
#include "src/gpu/GrSwizzle.h"
@@ -310,16 +310,12 @@
return fSamplePatternDictionary.retrieveSampleLocations(samplePatternKey);
}
- // Returns a GrGpuRTCommandBuffer which GrOpsTasks send draw commands to instead of directly
- // to the Gpu object. The 'bounds' rect is the content rect of the destination.
- virtual GrGpuRTCommandBuffer* getCommandBuffer(
- GrRenderTarget*, GrSurfaceOrigin, const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) = 0;
-
- // Returns a GrGpuTextureCommandBuffer which GrOpsTasks send texture commands to instead of
- // directly to the Gpu object.
- virtual GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) = 0;
+ // Returns a GrOpsRenderPass which GrOpsTasks send draw commands to instead of directly
+ // to the Gpu object. The 'bounds' rect is the content rect of the renderTarget.
+ virtual GrOpsRenderPass* getOpsRenderPass(
+ GrRenderTarget* renderTarget, GrSurfaceOrigin, const SkRect& bounds,
+ const GrOpsRenderPass::LoadAndStoreInfo&,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&) = 0;
// Called by GrDrawingManager when flushing.
// Provides a hook for post-flush actions (e.g. Vulkan command buffer submits). This will also
@@ -329,7 +325,7 @@
SkSurface::BackendSurfaceAccess access, const GrFlushInfo&,
const GrPrepareForExternalIORequests&);
- virtual void submit(GrGpuCommandBuffer*) = 0;
+ virtual void submit(GrOpsRenderPass*) = 0;
virtual GrFence SK_WARN_UNUSED_RESULT insertFence() = 0;
virtual bool waitFence(GrFence, uint64_t timeout = 1000) = 0;
diff --git a/src/gpu/GrOpFlushState.cpp b/src/gpu/GrOpFlushState.cpp
index b8bb048..2705adf 100644
--- a/src/gpu/GrOpFlushState.cpp
+++ b/src/gpu/GrOpFlushState.cpp
@@ -30,14 +30,10 @@
return *fGpu->caps();
}
-GrGpuRTCommandBuffer* GrOpFlushState::rtCommandBuffer() {
- return fCommandBuffer->asRTCommandBuffer();
-}
-
void GrOpFlushState::executeDrawsAndUploadsForMeshDrawOp(
const GrOp* op, const SkRect& chainBounds, GrProcessorSet&& processorSet,
GrPipeline::InputFlags pipelineFlags, const GrUserStencilSettings* stencilSettings) {
- SkASSERT(this->rtCommandBuffer());
+ SkASSERT(this->opsRenderPass());
GrPipeline::InitArgs pipelineArgs;
pipelineArgs.fInputFlags = pipelineFlags;
@@ -53,10 +49,10 @@
GrDeferredUploadToken drawToken = fTokenTracker->nextTokenToFlush();
while (fCurrUpload != fInlineUploads.end() &&
fCurrUpload->fUploadBeforeToken == drawToken) {
- this->rtCommandBuffer()->inlineUpload(this, fCurrUpload->fUpload);
+ this->opsRenderPass()->inlineUpload(this, fCurrUpload->fUpload);
++fCurrUpload;
}
- this->rtCommandBuffer()->draw(
+ this->opsRenderPass()->draw(
*fCurrDraw->fGeometryProcessor, *pipeline, fCurrDraw->fFixedDynamicState,
fCurrDraw->fDynamicStateArrays, fCurrDraw->fMeshes, fCurrDraw->fMeshCnt,
chainBounds);
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h
index c9178e2..09ac779 100644
--- a/src/gpu/GrOpFlushState.h
+++ b/src/gpu/GrOpFlushState.h
@@ -19,8 +19,7 @@
#include "src/gpu/ops/GrMeshDrawOp.h"
class GrGpu;
-class GrGpuCommandBuffer;
-class GrGpuRTCommandBuffer;
+class GrOpsRenderPass;
class GrResourceProvider;
/** Tracks the state across all the GrOps (really just the GrDrawOps) in a GrOpsTask flush. */
@@ -46,10 +45,8 @@
GrPipeline::InputFlags = GrPipeline::InputFlags::kNone,
const GrUserStencilSettings* = &GrUserStencilSettings::kUnused);
- GrGpuCommandBuffer* commandBuffer() { return fCommandBuffer; }
- // Helper function used by Ops that are only called via OpsTasks
- GrGpuRTCommandBuffer* rtCommandBuffer();
- void setCommandBuffer(GrGpuCommandBuffer* buffer) { fCommandBuffer = buffer; }
+ GrOpsRenderPass* opsRenderPass() { return fOpsRenderPass; }
+ void setOpsRenderPass(GrOpsRenderPass* renderPass) { fOpsRenderPass = renderPass; }
GrGpu* gpu() { return fGpu; }
@@ -161,7 +158,7 @@
GrGpu* fGpu;
GrResourceProvider* fResourceProvider;
GrTokenTracker* fTokenTracker;
- GrGpuCommandBuffer* fCommandBuffer = nullptr;
+ GrOpsRenderPass* fOpsRenderPass = nullptr;
// Variables that are used to track where we are in lists as ops are executed
SkArenaAllocList<Draw>::Iter fCurrDraw;
diff --git a/src/gpu/GrGpuCommandBuffer.cpp b/src/gpu/GrOpsRenderPass.cpp
similarity index 87%
rename from src/gpu/GrGpuCommandBuffer.cpp
rename to src/gpu/GrOpsRenderPass.cpp
index 4817cf5..3876a42 100644
--- a/src/gpu/GrGpuCommandBuffer.cpp
+++ b/src/gpu/GrOpsRenderPass.cpp
@@ -5,7 +5,7 @@
* found in the LICENSE file.
*/
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "include/core/SkRect.h"
#include "include/gpu/GrContext.h"
@@ -18,7 +18,7 @@
#include "src/gpu/GrRenderTarget.h"
#include "src/gpu/GrRenderTargetPriv.h"
-void GrGpuRTCommandBuffer::clear(const GrFixedClip& clip, const SkPMColor4f& color) {
+void GrOpsRenderPass::clear(const GrFixedClip& clip, const SkPMColor4f& color) {
SkASSERT(fRenderTarget);
// A clear at this level will always be a true clear, so make sure clears were not supposed to
// be redirected to draws instead
@@ -27,16 +27,16 @@
this->onClear(clip, color);
}
-void GrGpuRTCommandBuffer::clearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
+void GrOpsRenderPass::clearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
// As above, make sure the stencil clear wasn't supposed to be a draw rect with stencil settings
SkASSERT(!this->gpu()->caps()->performStencilClearsAsDraws());
this->onClearStencilClip(clip, insideStencilMask);
}
-bool GrGpuRTCommandBuffer::draw(const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline,
- const GrPipeline::FixedDynamicState* fixedDynamicState,
- const GrPipeline::DynamicStateArrays* dynamicStateArrays,
- const GrMesh meshes[], int meshCount, const SkRect& bounds) {
+bool GrOpsRenderPass::draw(const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline,
+ const GrPipeline::FixedDynamicState* fixedDynamicState,
+ const GrPipeline::DynamicStateArrays* dynamicStateArrays,
+ const GrMesh meshes[], int meshCount, const SkRect& bounds) {
#ifdef SK_DEBUG
SkASSERT(!primProc.hasInstanceAttributes() || this->gpu()->caps()->instanceAttribSupport());
for (int i = 0; i < meshCount; ++i) {
diff --git a/src/gpu/GrGpuCommandBuffer.h b/src/gpu/GrOpsRenderPass.h
similarity index 68%
rename from src/gpu/GrGpuCommandBuffer.h
rename to src/gpu/GrOpsRenderPass.h
index b242c06..b23ee56 100644
--- a/src/gpu/GrGpuCommandBuffer.h
+++ b/src/gpu/GrOpsRenderPass.h
@@ -5,8 +5,8 @@
* found in the LICENSE file.
*/
-#ifndef GrGpuCommandBuffer_DEFINED
-#define GrGpuCommandBuffer_DEFINED
+#ifndef GrOpsRenderPass_DEFINED
+#define GrOpsRenderPass_DEFINED
#include "include/core/SkDrawable.h"
#include "src/gpu/GrPipeline.h"
@@ -23,44 +23,17 @@
struct SkIRect;
struct SkRect;
-class GrGpuRTCommandBuffer;
-
-class GrGpuCommandBuffer {
+/**
+ * The GrOpsRenderPass is a series of commands (draws, clears, and discards), which all target the
+ * same render target. It is possible that these commands execute immediately (GL), or get buffered
+ * up for later execution (Vulkan). GrOps execute into a GrOpsRenderPass.
+ */
+class GrOpsRenderPass {
public:
- virtual ~GrGpuCommandBuffer() {}
+ virtual ~GrOpsRenderPass() {}
virtual void insertEventMarker(const char*) = 0;
- virtual GrGpuRTCommandBuffer* asRTCommandBuffer() { return nullptr; }
-};
-
-class GrGpuTextureCommandBuffer : public GrGpuCommandBuffer{
-public:
- void set(GrTexture* texture, GrSurfaceOrigin origin) {
- SkASSERT(!fTexture);
-
- fTexture = texture;
- }
-
-protected:
- GrGpuTextureCommandBuffer() : fTexture(nullptr) {}
-
- GrGpuTextureCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) : fTexture(texture) {}
-
- GrTexture* fTexture;
-
-private:
- typedef GrGpuCommandBuffer INHERITED;
-};
-
-/**
- * The GrGpuRenderTargetCommandBuffer is a series of commands (draws, clears, and discards), which
- * all target the same render target. It is possible that these commands execute immediately (GL),
- * or get buffered up for later execution (Vulkan). GrOps will execute their draw commands into a
- * GrGpuCommandBuffer.
- */
-class GrGpuRTCommandBuffer : public GrGpuCommandBuffer {
-public:
struct LoadAndStoreInfo {
GrLoadOp fLoadOp;
GrStoreOp fStoreOp;
@@ -74,10 +47,8 @@
GrStoreOp fStoreOp;
};
- GrGpuRTCommandBuffer* asRTCommandBuffer() { return this; }
-
virtual void begin() = 0;
- // Signals the end of recording to the command buffer and that it can now be submitted.
+ // Signals the end of recording to the GrOpsRenderPass and that it can now be submitted.
virtual void end() = 0;
// We pass in an array of meshCount GrMesh to the draw. The backend should loop over each
@@ -108,9 +79,9 @@
virtual void executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>) {}
protected:
- GrGpuRTCommandBuffer() : fOrigin(kTopLeft_GrSurfaceOrigin), fRenderTarget(nullptr) {}
+ GrOpsRenderPass() : fOrigin(kTopLeft_GrSurfaceOrigin), fRenderTarget(nullptr) {}
- GrGpuRTCommandBuffer(GrRenderTarget* rt, GrSurfaceOrigin origin)
+ GrOpsRenderPass(GrRenderTarget* rt, GrSurfaceOrigin origin)
: fOrigin(origin)
, fRenderTarget(rt) {
}
@@ -142,7 +113,7 @@
virtual void onClearStencilClip(const GrFixedClip&, bool insideStencilMask) = 0;
- typedef GrGpuCommandBuffer INHERITED;
+ typedef GrOpsRenderPass INHERITED;
};
#endif
diff --git a/src/gpu/GrOpsTask.cpp b/src/gpu/GrOpsTask.cpp
index bcf0034..98f0c61 100644
--- a/src/gpu/GrOpsTask.cpp
+++ b/src/gpu/GrOpsTask.cpp
@@ -14,9 +14,9 @@
#include "src/gpu/GrAuditTrail.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrGpu.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/GrRenderTargetContext.h"
#include "src/gpu/GrResourceAllocator.h"
@@ -414,14 +414,14 @@
}
}
-static GrGpuRTCommandBuffer* create_command_buffer(GrGpu* gpu,
- GrRenderTarget* rt,
- GrSurfaceOrigin origin,
- const SkRect& bounds,
- GrLoadOp colorLoadOp,
- const SkPMColor4f& loadClearColor,
- GrLoadOp stencilLoadOp) {
- const GrGpuRTCommandBuffer::LoadAndStoreInfo kColorLoadStoreInfo {
+static GrOpsRenderPass* create_command_buffer(GrGpu* gpu,
+ GrRenderTarget* rt,
+ GrSurfaceOrigin origin,
+ const SkRect& bounds,
+ GrLoadOp colorLoadOp,
+ const SkPMColor4f& loadClearColor,
+ GrLoadOp stencilLoadOp) {
+ const GrOpsRenderPass::LoadAndStoreInfo kColorLoadStoreInfo {
colorLoadOp,
GrStoreOp::kStore,
loadClearColor
@@ -432,12 +432,12 @@
// to stop splitting up higher level OpsTasks for copyOps to achieve that.
// Note: we would still need SB loads and stores but they would happen at a
// lower level (inside the VK command buffer).
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo stencilLoadAndStoreInfo {
+ const GrOpsRenderPass::StencilLoadAndStoreInfo stencilLoadAndStoreInfo {
stencilLoadOp,
GrStoreOp::kStore,
};
- return gpu->getCommandBuffer(rt, origin, bounds, kColorLoadStoreInfo, stencilLoadAndStoreInfo);
+ return gpu->getOpsRenderPass(rt, origin, bounds, kColorLoadStoreInfo, stencilLoadAndStoreInfo);
}
// TODO: this is where GrOp::renderTarget is used (which is fine since it
@@ -459,7 +459,7 @@
!flushState->gpu()->caps()->performColorClearsAsDraws());
SkASSERT(fStencilLoadOp != GrLoadOp::kClear ||
!flushState->gpu()->caps()->performStencilClearsAsDraws());
- GrGpuRTCommandBuffer* commandBuffer = create_command_buffer(
+ GrOpsRenderPass* renderPass = create_command_buffer(
flushState->gpu(),
fTarget->peekRenderTarget(),
fTarget->origin(),
@@ -467,8 +467,8 @@
fColorLoadOp,
fLoadClearColor,
fStencilLoadOp);
- flushState->setCommandBuffer(commandBuffer);
- commandBuffer->begin();
+ flushState->setOpsRenderPass(renderPass);
+ renderPass->begin();
// Draw all the generated geometry.
for (const auto& chain : fOpChains) {
@@ -492,9 +492,9 @@
flushState->setOpArgs(nullptr);
}
- commandBuffer->end();
- flushState->gpu()->submit(commandBuffer);
- flushState->setCommandBuffer(nullptr);
+ renderPass->end();
+ flushState->gpu()->submit(renderPass);
+ flushState->setOpsRenderPass(nullptr);
return true;
}
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor.cpp b/src/gpu/ccpr/GrCCCoverageProcessor.cpp
index cd635e4..b6ec180 100644
--- a/src/gpu/ccpr/GrCCCoverageProcessor.cpp
+++ b/src/gpu/ccpr/GrCCCoverageProcessor.cpp
@@ -8,8 +8,8 @@
#include "src/gpu/ccpr/GrCCCoverageProcessor.h"
#include "src/core/SkMakeUnique.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/ccpr/GrCCConicShader.h"
#include "src/gpu/ccpr/GrCCCubicShader.h"
#include "src/gpu/ccpr/GrCCQuadraticShader.h"
@@ -200,6 +200,6 @@
const GrMesh meshes[], int meshCount, const SkRect& drawBounds) const {
GrPipeline::DynamicStateArrays dynamicStateArrays;
dynamicStateArrays.fScissorRects = scissorRects;
- GrGpuRTCommandBuffer* cmdBuff = flushState->rtCommandBuffer();
- cmdBuff->draw(*this, pipeline, nullptr, &dynamicStateArrays, meshes, meshCount, drawBounds);
+ GrOpsRenderPass* renderPass = flushState->opsRenderPass();
+ renderPass->draw(*this, pipeline, nullptr, &dynamicStateArrays, meshes, meshCount, drawBounds);
}
diff --git a/src/gpu/ccpr/GrCCFiller.cpp b/src/gpu/ccpr/GrCCFiller.cpp
index 79fbc73..9c09b4a 100644
--- a/src/gpu/ccpr/GrCCFiller.cpp
+++ b/src/gpu/ccpr/GrCCFiller.cpp
@@ -12,7 +12,6 @@
#include "src/core/SkMathPriv.h"
#include "src/core/SkPathPriv.h"
#include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrOnFlushResourceProvider.h"
#include "src/gpu/GrOpFlushState.h"
#include <stdlib.h>
diff --git a/src/gpu/ccpr/GrCCPathProcessor.cpp b/src/gpu/ccpr/GrCCPathProcessor.cpp
index 3a88698..acc5613 100644
--- a/src/gpu/ccpr/GrCCPathProcessor.cpp
+++ b/src/gpu/ccpr/GrCCPathProcessor.cpp
@@ -8,8 +8,8 @@
#include "src/gpu/ccpr/GrCCPathProcessor.h"
#include "include/gpu/GrTexture.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrOnFlushResourceProvider.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrTexturePriv.h"
#include "src/gpu/ccpr/GrCCPerFlushResources.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
@@ -141,8 +141,8 @@
baseInstance, enablePrimitiveRestart);
mesh.setVertexData(resources.refVertexBuffer());
- flushState->rtCommandBuffer()->draw(*this, pipeline, fixedDynamicState, nullptr, &mesh, 1,
- bounds);
+ flushState->opsRenderPass()->draw(*this, pipeline, fixedDynamicState, nullptr, &mesh, 1,
+ bounds);
}
void GrCCPathProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) {
diff --git a/src/gpu/ccpr/GrCCStroker.cpp b/src/gpu/ccpr/GrCCStroker.cpp
index 2829a2d..b432d60 100644
--- a/src/gpu/ccpr/GrCCStroker.cpp
+++ b/src/gpu/ccpr/GrCCStroker.cpp
@@ -9,8 +9,8 @@
#include "include/core/SkStrokeRec.h"
#include "src/core/SkPathPriv.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrOnFlushResourceProvider.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/ccpr/GrCCCoverageProcessor.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
#include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h"
@@ -775,9 +775,9 @@
SkASSERT(fMeshesBuffer.count() == fScissorsBuffer.count());
GrPipeline::DynamicStateArrays dynamicStateArrays;
dynamicStateArrays.fScissorRects = fScissorsBuffer.begin();
- flushState->rtCommandBuffer()->draw(processor, pipeline, nullptr, &dynamicStateArrays,
- fMeshesBuffer.begin(), fMeshesBuffer.count(),
- SkRect::Make(drawBounds));
+ flushState->opsRenderPass()->draw(processor, pipeline, nullptr, &dynamicStateArrays,
+ fMeshesBuffer.begin(), fMeshesBuffer.count(),
+ SkRect::Make(drawBounds));
// Don't call reset(), as that also resets the reserve count.
fMeshesBuffer.pop_back_n(fMeshesBuffer.count());
fScissorsBuffer.pop_back_n(fScissorsBuffer.count());
diff --git a/src/gpu/ccpr/GrStencilAtlasOp.cpp b/src/gpu/ccpr/GrStencilAtlasOp.cpp
index 7192ee9..4f2e357 100644
--- a/src/gpu/ccpr/GrStencilAtlasOp.cpp
+++ b/src/gpu/ccpr/GrStencilAtlasOp.cpp
@@ -8,8 +8,8 @@
#include "src/gpu/ccpr/GrStencilAtlasOp.h"
#include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/ccpr/GrCCPerFlushResources.h"
#include "src/gpu/ccpr/GrSampleMaskProcessor.h"
@@ -129,7 +129,7 @@
fResources->refStencilResolveBuffer(),
fEndStencilResolveInstance - fBaseStencilResolveInstance, fBaseStencilResolveInstance,
4);
- flushState->rtCommandBuffer()->draw(
+ flushState->opsRenderPass()->draw(
StencilResolveProcessor(), resolvePipeline, &scissorRectState, nullptr, &mesh, 1,
SkRect::Make(drawBoundsRect));
}
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 9be58c5..4660793 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -32,7 +32,7 @@
#include "src/gpu/GrTexturePriv.h"
#include "src/gpu/gl/GrGLBuffer.h"
#include "src/gpu/gl/GrGLGpu.h"
-#include "src/gpu/gl/GrGLGpuCommandBuffer.h"
+#include "src/gpu/gl/GrGLOpsRenderPass.h"
#include "src/gpu/gl/GrGLSemaphore.h"
#include "src/gpu/gl/GrGLStencilAttachment.h"
#include "src/gpu/gl/GrGLTextureRenderTarget.h"
@@ -2294,25 +2294,16 @@
dstColorType, buffer, rowPixelWidth);
}
-GrGpuRTCommandBuffer* GrGLGpu::getCommandBuffer(
+GrOpsRenderPass* GrGLGpu::getOpsRenderPass(
GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
- if (!fCachedRTCommandBuffer) {
- fCachedRTCommandBuffer.reset(new GrGLGpuRTCommandBuffer(this));
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
+ if (!fCachedOpsRenderPass) {
+ fCachedOpsRenderPass.reset(new GrGLOpsRenderPass(this));
}
- fCachedRTCommandBuffer->set(rt, origin, colorInfo, stencilInfo);
- return fCachedRTCommandBuffer.get();
-}
-
-GrGpuTextureCommandBuffer* GrGLGpu::getCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) {
- if (!fCachedTexCommandBuffer) {
- fCachedTexCommandBuffer.reset(new GrGLGpuTextureCommandBuffer(this));
- }
-
- fCachedTexCommandBuffer->set(texture, origin);
- return fCachedTexCommandBuffer.get();
+ fCachedOpsRenderPass->set(rt, origin, colorInfo, stencilInfo);
+ return fCachedOpsRenderPass.get();
}
void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, GrSurfaceOrigin origin,
@@ -4145,14 +4136,10 @@
}
}
-void GrGLGpu::submit(GrGpuCommandBuffer* buffer) {
- if (buffer->asRTCommandBuffer()) {
- SkASSERT(fCachedRTCommandBuffer.get() == buffer);
- fCachedRTCommandBuffer->reset();
- } else {
- SkASSERT(fCachedTexCommandBuffer.get() == buffer);
- fCachedTexCommandBuffer->reset();
- }
+void GrGLGpu::submit(GrOpsRenderPass* renderPass) {
+ // The GrGLOpsRenderPass doesn't buffer ops so there is nothing to do here
+ SkASSERT(fCachedOpsRenderPass.get() == renderPass);
+ fCachedOpsRenderPass->reset();
}
GrFence SK_WARN_UNUSED_RESULT GrGLGpu::insertFence() {
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index 5787096..d274a25 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -26,8 +26,7 @@
#include "src/gpu/gl/GrGLVertexArray.h"
class GrGLBuffer;
-class GrGLGpuRTCommandBuffer;
-class GrGLGpuTextureCommandBuffer;
+class GrGLOpsRenderPass;
class GrPipeline;
class GrSwizzle;
@@ -77,9 +76,9 @@
// If the caller wishes to bind an index buffer to a specific VAO, it can call glBind directly.
GrGLenum bindBuffer(GrGpuBufferType type, const GrBuffer*);
- // The GrGLGpuRTCommandBuffer does not buffer up draws before submitting them to the gpu.
+ // The GrGLOpsRenderPass does not buffer up draws before submitting them to the gpu.
// Thus this is the implementation of the draw call for the corresponding passthrough function
- // on GrGLRTGpuCommandBuffer.
+ // on GrGLOpsRenderPass.
void draw(GrRenderTarget*, GrSurfaceOrigin,
const GrPrimitiveProcessor&,
const GrPipeline&,
@@ -107,14 +106,14 @@
const GrBuffer* instanceBuffer, int instanceCount,
int baseInstance, GrPrimitiveRestart) final;
- // The GrGLGpuRTCommandBuffer does not buffer up draws before submitting them to the gpu.
+ // The GrGLOpsRenderPass does not buffer up draws before submitting them to the gpu.
// Thus this is the implementation of the clear call for the corresponding passthrough function
- // on GrGLGpuRTCommandBuffer.
+ // on GrGLOpsRenderPass.
void clear(const GrFixedClip&, const SkPMColor4f&, GrRenderTarget*, GrSurfaceOrigin);
- // The GrGLGpuRTCommandBuffer does not buffer up draws before submitting them to the gpu.
+ // The GrGLOpsRenderPass does not buffer up draws before submitting them to the gpu.
// Thus this is the implementation of the clearStencil call for the corresponding passthrough
- // function on GrGLGpuRTCommandBuffer.
+ // function on GrGLOpsrenderPass.
void clearStencilClip(const GrFixedClip&, bool insideStencilMask,
GrRenderTarget*, GrSurfaceOrigin);
@@ -122,12 +121,10 @@
// stencil buffer as not dirty?
void clearStencil(GrRenderTarget*, int clearValue);
- GrGpuRTCommandBuffer* getCommandBuffer(
+ GrOpsRenderPass* getOpsRenderPass(
GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
- GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
+ const GrOpsRenderPass::LoadAndStoreInfo&,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
void invalidateBoundRenderTarget() {
fHWBoundRenderTargetUniqueID.makeInvalid();
@@ -155,7 +152,7 @@
void testingOnly_flushGpuAndSync() override;
#endif
- void submit(GrGpuCommandBuffer* buffer) override;
+ void submit(GrOpsRenderPass* renderPass) override;
GrFence SK_WARN_UNUSED_RESULT insertFence() override;
bool waitFence(GrFence, uint64_t timeout) override;
@@ -681,8 +678,7 @@
class SamplerObjectCache;
std::unique_ptr<SamplerObjectCache> fSamplerObjectCache;
- std::unique_ptr<GrGLGpuRTCommandBuffer> fCachedRTCommandBuffer;
- std::unique_ptr<GrGLGpuTextureCommandBuffer> fCachedTexCommandBuffer;
+ std::unique_ptr<GrGLOpsRenderPass> fCachedOpsRenderPass;
struct FinishCallback {
GrGpuFinishedProc fCallback;
diff --git a/src/gpu/gl/GrGLGpuCommandBuffer.cpp b/src/gpu/gl/GrGLOpsRenderPass.cpp
similarity index 73%
rename from src/gpu/gl/GrGLGpuCommandBuffer.cpp
rename to src/gpu/gl/GrGLOpsRenderPass.cpp
index 1412aa3..dd24c68 100644
--- a/src/gpu/gl/GrGLGpuCommandBuffer.cpp
+++ b/src/gpu/gl/GrGLOpsRenderPass.cpp
@@ -5,13 +5,13 @@
* found in the LICENSE file.
*/
-#include "src/gpu/gl/GrGLGpuCommandBuffer.h"
+#include "src/gpu/gl/GrGLOpsRenderPass.h"
#include "src/gpu/GrContextPriv.h"
#include "src/gpu/GrFixedClip.h"
#include "src/gpu/GrRenderTargetPriv.h"
-void GrGLGpuRTCommandBuffer::begin() {
+void GrGLOpsRenderPass::begin() {
if (GrLoadOp::kClear == fColorLoadAndStoreInfo.fLoadOp) {
fGpu->clear(GrFixedClip::Disabled(), fColorLoadAndStoreInfo.fClearColor,
fRenderTarget, fOrigin);
@@ -24,9 +24,9 @@
}
}
-void GrGLGpuRTCommandBuffer::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
+void GrGLOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
SkASSERT(fGpu);
SkASSERT(!fRenderTarget);
SkASSERT(fGpu == rt->getContext()->priv().getGpu());
diff --git a/src/gpu/gl/GrGLGpuCommandBuffer.h b/src/gpu/gl/GrGLOpsRenderPass.h
similarity index 65%
rename from src/gpu/gl/GrGLGpuCommandBuffer.h
rename to src/gpu/gl/GrGLOpsRenderPass.h
index 7d61a19..998ef24 100644
--- a/src/gpu/gl/GrGLGpuCommandBuffer.h
+++ b/src/gpu/gl/GrGLOpsRenderPass.h
@@ -5,10 +5,10 @@
* found in the LICENSE file.
*/
-#ifndef GrGLGpuCommandBuffer_DEFINED
-#define GrGLGpuCommandBuffer_DEFINED
+#ifndef GrGLOpsRenderPass_DEFINED
+#define GrGLOpsRenderPass_DEFINED
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrOpFlushState.h"
#include "src/gpu/gl/GrGLGpu.h"
@@ -17,32 +17,14 @@
class GrGLGpu;
class GrGLRenderTarget;
-class GrGLGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
-public:
- GrGLGpuTextureCommandBuffer(GrGLGpu* gpu) : fGpu(gpu) {}
-
- void insertEventMarker(const char* msg) override {
- fGpu->insertEventMarker(msg);
- }
-
- void reset() {
- fTexture = nullptr;
- }
-
-private:
- GrGLGpu* fGpu;
-
- typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrGLGpuRTCommandBuffer : public GrGpuRTCommandBuffer {
+class GrGLOpsRenderPass : public GrOpsRenderPass {
/**
* We do not actually buffer up draws or do any work in the this class for GL. Instead commands
* are immediately sent to the gpu to execute. Thus all the commands in this class are simply
* pass through functions to corresponding calls in the GrGLGpu class.
*/
public:
- GrGLGpuRTCommandBuffer(GrGLGpu* gpu) : fGpu(gpu) {}
+ GrGLOpsRenderPass(GrGLGpu* gpu) : fGpu(gpu) {}
void begin() override;
void end() override {}
@@ -56,8 +38,8 @@
}
void set(GrRenderTarget*, GrSurfaceOrigin,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&);
+ const GrOpsRenderPass::LoadAndStoreInfo&,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&);
void reset() {
fRenderTarget = nullptr;
@@ -85,11 +67,11 @@
fGpu->clearStencilClip(clip, insideStencilMask, fRenderTarget, fOrigin);
}
- GrGLGpu* fGpu;
- GrGpuRTCommandBuffer::LoadAndStoreInfo fColorLoadAndStoreInfo;
- GrGpuRTCommandBuffer::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo;
+ GrGLGpu* fGpu;
+ GrOpsRenderPass::LoadAndStoreInfo fColorLoadAndStoreInfo;
+ GrOpsRenderPass::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo;
- typedef GrGpuRTCommandBuffer INHERITED;
+ typedef GrOpsRenderPass INHERITED;
};
#endif
diff --git a/src/gpu/mock/GrMockGpu.cpp b/src/gpu/mock/GrMockGpu.cpp
index a2515bd..8101da8 100644
--- a/src/gpu/mock/GrMockGpu.cpp
+++ b/src/gpu/mock/GrMockGpu.cpp
@@ -8,7 +8,7 @@
#include "src/gpu/mock/GrMockBuffer.h"
#include "src/gpu/mock/GrMockCaps.h"
#include "src/gpu/mock/GrMockGpu.h"
-#include "src/gpu/mock/GrMockGpuCommandBuffer.h"
+#include "src/gpu/mock/GrMockOpsRenderPass.h"
#include "src/gpu/mock/GrMockStencilAttachment.h"
#include "src/gpu/mock/GrMockTexture.h"
#include <atomic>
@@ -52,30 +52,18 @@
return sk_sp<GrGpu>(new GrMockGpu(context, *mockOptions, contextOptions));
}
-GrGpuRTCommandBuffer* GrMockGpu::getCommandBuffer(
+GrOpsRenderPass* GrMockGpu::getOpsRenderPass(
GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) {
- return new GrMockGpuRTCommandBuffer(this, rt, origin, colorInfo);
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&) {
+ return new GrMockOpsRenderPass(this, rt, origin, colorInfo);
}
-GrGpuTextureCommandBuffer* GrMockGpu::getCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) {
- return new GrMockGpuTextureCommandBuffer(texture, origin);
-}
-
-void GrMockGpu::submit(GrGpuCommandBuffer* buffer) {
- if (buffer->asRTCommandBuffer()) {
- this->submitCommandBuffer(
- static_cast<GrMockGpuRTCommandBuffer*>(buffer->asRTCommandBuffer()));
- }
-
- delete buffer;
-}
-
-void GrMockGpu::submitCommandBuffer(const GrMockGpuRTCommandBuffer* cmdBuffer) {
- for (int i = 0; i < cmdBuffer->numDraws(); ++i) {
+void GrMockGpu::submit(GrOpsRenderPass* renderPass) {
+ for (int i = 0; i < static_cast<GrMockOpsRenderPass*>(renderPass)->numDraws(); ++i) {
fStats.incNumDraws();
}
+ delete renderPass;
}
GrMockGpu::GrMockGpu(GrContext* context, const GrMockOptions& options,
diff --git a/src/gpu/mock/GrMockGpu.h b/src/gpu/mock/GrMockGpu.h
index 26edf8a..c0ab9c5 100644
--- a/src/gpu/mock/GrMockGpu.h
+++ b/src/gpu/mock/GrMockGpu.h
@@ -14,7 +14,7 @@
#include "src/gpu/GrRenderTarget.h"
#include "src/gpu/GrSemaphore.h"
-class GrMockGpuRTCommandBuffer;
+class GrMockOpsRenderPass;
struct GrMockOptions;
class GrPipeline;
@@ -24,12 +24,9 @@
~GrMockGpu() override {}
- GrGpuRTCommandBuffer* getCommandBuffer(
- GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
- GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
+ GrOpsRenderPass* getOpsRenderPass(GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
+ const GrOpsRenderPass::LoadAndStoreInfo&,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
bool waitFence(GrFence, uint64_t) override { return true; }
@@ -45,15 +42,13 @@
void waitSemaphore(sk_sp<GrSemaphore> semaphore) override {}
sk_sp<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; }
- void submit(GrGpuCommandBuffer* buffer) override;
+ void submit(GrOpsRenderPass* renderPass) override;
void checkFinishProcs() override {}
private:
GrMockGpu(GrContext* context, const GrMockOptions&, const GrContextOptions&);
- void submitCommandBuffer(const GrMockGpuRTCommandBuffer*);
-
void onResetContext(uint32_t resetBits) override {}
void querySampleLocations(GrRenderTarget*, SkTArray<SkPoint>* sampleLocations) override;
diff --git a/src/gpu/mock/GrMockGpuCommandBuffer.h b/src/gpu/mock/GrMockOpsRenderPass.h
similarity index 67%
rename from src/gpu/mock/GrMockGpuCommandBuffer.h
rename to src/gpu/mock/GrMockOpsRenderPass.h
index 7cc4ea1..863f989 100644
--- a/src/gpu/mock/GrMockGpuCommandBuffer.h
+++ b/src/gpu/mock/GrMockOpsRenderPass.h
@@ -5,32 +5,18 @@
* found in the LICENSE file.
*/
-#ifndef GrMockGpuCommandBuffer_DEFINED
-#define GrMockGpuCommandBuffer_DEFINED
+#ifndef GrMockOpsRenderPass_DEFINED
+#define GrMockOpsRenderPass_DEFINED
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrTexturePriv.h"
#include "src/gpu/mock/GrMockGpu.h"
-class GrMockGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
+class GrMockOpsRenderPass : public GrOpsRenderPass {
public:
- GrMockGpuTextureCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin)
- : INHERITED(texture, origin) {
- }
-
- ~GrMockGpuTextureCommandBuffer() override {}
-
- void insertEventMarker(const char*) override {}
-
-private:
- typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrMockGpuRTCommandBuffer : public GrGpuRTCommandBuffer {
-public:
- GrMockGpuRTCommandBuffer(GrMockGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
- LoadAndStoreInfo colorInfo)
+ GrMockOpsRenderPass(GrMockGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
+ LoadAndStoreInfo colorInfo)
: INHERITED(rt, origin)
, fGpu(gpu)
, fColorLoadOp(colorInfo.fLoadOp) {
@@ -71,7 +57,7 @@
GrLoadOp fColorLoadOp;
int fNumDraws = 0;
- typedef GrGpuRTCommandBuffer INHERITED;
+ typedef GrOpsRenderPass INHERITED;
};
#endif
diff --git a/src/gpu/mtl/GrMtlCommandBuffer.h b/src/gpu/mtl/GrMtlCommandBuffer.h
index 01157ed..f04e278 100644
--- a/src/gpu/mtl/GrMtlCommandBuffer.h
+++ b/src/gpu/mtl/GrMtlCommandBuffer.h
@@ -14,7 +14,7 @@
class GrMtlGpu;
class GrMtlPipelineState;
-class GrMtlGpuRTCommandBuffer;
+class GrMtlOpsRenderPass;
class GrMtlCommandBuffer {
public:
@@ -26,7 +26,7 @@
id<MTLBlitCommandEncoder> getBlitCommandEncoder();
id<MTLRenderCommandEncoder> getRenderCommandEncoder(MTLRenderPassDescriptor*,
const GrMtlPipelineState*,
- GrMtlGpuRTCommandBuffer* gpuCommandBuffer);
+ GrMtlOpsRenderPass* opsRenderPass);
void addCompletedHandler(MTLCommandBufferHandler block) {
[fCmdBuffer addCompletedHandler:block];
diff --git a/src/gpu/mtl/GrMtlCommandBuffer.mm b/src/gpu/mtl/GrMtlCommandBuffer.mm
index c6b3480..45d6a0a 100644
--- a/src/gpu/mtl/GrMtlCommandBuffer.mm
+++ b/src/gpu/mtl/GrMtlCommandBuffer.mm
@@ -6,8 +6,9 @@
*/
#include "src/gpu/mtl/GrMtlCommandBuffer.h"
+
#include "src/gpu/mtl/GrMtlGpu.h"
-#include "src/gpu/mtl/GrMtlGpuCommandBuffer.h"
+#include "src/gpu/mtl/GrMtlOpsRenderPass.h"
#include "src/gpu/mtl/GrMtlPipelineState.h"
#if !__has_feature(objc_arc)
@@ -70,7 +71,7 @@
id<MTLRenderCommandEncoder> GrMtlCommandBuffer::getRenderCommandEncoder(
MTLRenderPassDescriptor* descriptor, const GrMtlPipelineState* pipelineState,
- GrMtlGpuRTCommandBuffer* gpuCommandBuffer) {
+ GrMtlOpsRenderPass* opsRenderPass) {
if (nil != fPreviousRenderPassDescriptor) {
if (compatible(fPreviousRenderPassDescriptor.colorAttachments[0],
descriptor.colorAttachments[0], pipelineState) &&
@@ -82,8 +83,8 @@
this->endAllEncoding();
fActiveRenderCommandEncoder = [fCmdBuffer renderCommandEncoderWithDescriptor:descriptor];
- if (gpuCommandBuffer) {
- gpuCommandBuffer->initRenderState(fActiveRenderCommandEncoder);
+ if (opsRenderPass) {
+ opsRenderPass->initRenderState(fActiveRenderCommandEncoder);
}
fPreviousRenderPassDescriptor = descriptor;
diff --git a/src/gpu/mtl/GrMtlGpu.h b/src/gpu/mtl/GrMtlGpu.h
index 420264b..25a2c73 100644
--- a/src/gpu/mtl/GrMtlGpu.h
+++ b/src/gpu/mtl/GrMtlGpu.h
@@ -19,7 +19,7 @@
#import <Metal/Metal.h>
-class GrMtlGpuRTCommandBuffer;
+class GrMtlOpsRenderPass;
class GrMtlTexture;
class GrSemaphore;
struct GrMtlBackendContext;
@@ -80,16 +80,13 @@
bool onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect,
const SkIPoint& dstPoint) override;
- GrGpuRTCommandBuffer* getCommandBuffer(
- GrRenderTarget*, GrSurfaceOrigin, const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
- GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
+ GrOpsRenderPass* getOpsRenderPass(GrRenderTarget*, GrSurfaceOrigin, const SkRect& bounds,
+ const GrOpsRenderPass::LoadAndStoreInfo&,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
SkSL::Compiler* shaderCompiler() const { return fCompiler.get(); }
- void submit(GrGpuCommandBuffer* buffer) override;
+ void submit(GrOpsRenderPass* renderPass) override;
GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
bool waitFence(GrFence, uint64_t) override { return true; }
diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm
index 364e72a..aba9e67 100644
--- a/src/gpu/mtl/GrMtlGpu.mm
+++ b/src/gpu/mtl/GrMtlGpu.mm
@@ -14,7 +14,7 @@
#include "src/gpu/GrTexturePriv.h"
#include "src/gpu/mtl/GrMtlBuffer.h"
#include "src/gpu/mtl/GrMtlCommandBuffer.h"
-#include "src/gpu/mtl/GrMtlGpuCommandBuffer.h"
+#include "src/gpu/mtl/GrMtlOpsRenderPass.h"
#include "src/gpu/mtl/GrMtlTexture.h"
#include "src/gpu/mtl/GrMtlTextureRenderTarget.h"
#include "src/gpu/mtl/GrMtlUtil.h"
@@ -140,25 +140,17 @@
fDevice = nil;
}
-GrGpuRTCommandBuffer* GrMtlGpu::getCommandBuffer(
+GrOpsRenderPass* GrMtlGpu::getOpsRenderPass(
GrRenderTarget* renderTarget, GrSurfaceOrigin origin, const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
- return new GrMtlGpuRTCommandBuffer(this, renderTarget, origin, bounds, colorInfo, stencilInfo);
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
+ return new GrMtlOpsRenderPass(this, renderTarget, origin, bounds, colorInfo, stencilInfo);
}
-GrGpuTextureCommandBuffer* GrMtlGpu::getCommandBuffer(GrTexture* texture,
- GrSurfaceOrigin origin) {
- return new GrMtlGpuTextureCommandBuffer(texture, origin);
-}
-
-void GrMtlGpu::submit(GrGpuCommandBuffer* buffer) {
- GrMtlGpuRTCommandBuffer* mtlRTCmdBuffer =
- reinterpret_cast<GrMtlGpuRTCommandBuffer*>(buffer->asRTCommandBuffer());
- if (mtlRTCmdBuffer) {
- mtlRTCmdBuffer->submit();
- }
- delete buffer;
+void GrMtlGpu::submit(GrOpsRenderPass* renderPass) {
+ GrMtlOpsRenderPass* mtlRenderPass = reinterpret_cast<GrMtlOpsRenderPass*>(renderPass);
+ mtlRenderPass->submit();
+ delete renderPass;
}
GrMtlCommandBuffer* GrMtlGpu::commandBuffer() {
diff --git a/src/gpu/mtl/GrMtlGpuCommandBuffer.h b/src/gpu/mtl/GrMtlOpsRenderPass.h
similarity index 75%
rename from src/gpu/mtl/GrMtlGpuCommandBuffer.h
rename to src/gpu/mtl/GrMtlOpsRenderPass.h
index eb60f4e..5736db3 100644
--- a/src/gpu/mtl/GrMtlGpuCommandBuffer.h
+++ b/src/gpu/mtl/GrMtlOpsRenderPass.h
@@ -5,12 +5,12 @@
* found in the LICENSE file.
*/
-#ifndef GrMtlGpuCommandBuffer_DEFINED
-#define GrMtlGpuCommandBuffer_DEFINED
+#ifndef GrMtlOpsRenderPass_DEFINED
+#define GrMtlOpsRenderPass_DEFINED
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrMesh.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/mtl/GrMtlGpu.h"
#import <Metal/Metal.h>
@@ -20,28 +20,14 @@
class GrMtlPipelineState;
class GrMtlRenderTarget;
-class GrMtlGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
+class GrMtlOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl {
public:
- GrMtlGpuTextureCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin)
- : INHERITED(texture, origin) {
- }
+ GrMtlOpsRenderPass(GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
+ const SkRect& bounds,
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo);
- ~GrMtlGpuTextureCommandBuffer() override {}
-
- void insertEventMarker(const char* msg) override {}
-
-private:
- typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrMtlGpuRTCommandBuffer : public GrGpuRTCommandBuffer, private GrMesh::SendToGpuImpl {
-public:
- GrMtlGpuRTCommandBuffer(GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin,
- const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo);
-
- ~GrMtlGpuRTCommandBuffer() override;
+ ~GrMtlOpsRenderPass() override;
void begin() override {}
void end() override {}
@@ -77,8 +63,8 @@
void onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) override;
- void setupRenderPass(const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo);
+ void setupRenderPass(const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo);
void bindGeometry(const GrBuffer* vertexBuffer, size_t vertexOffset,
const GrBuffer* instanceBuffer);
@@ -124,7 +110,7 @@
size_t fOffset;
} fBufferBindings[kNumBindings];
- typedef GrGpuRTCommandBuffer INHERITED;
+ typedef GrOpsRenderPass INHERITED;
};
#endif
diff --git a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm b/src/gpu/mtl/GrMtlOpsRenderPass.mm
similarity index 82%
rename from src/gpu/mtl/GrMtlGpuCommandBuffer.mm
rename to src/gpu/mtl/GrMtlOpsRenderPass.mm
index 049485d..f9754fe 100644
--- a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
+++ b/src/gpu/mtl/GrMtlOpsRenderPass.mm
@@ -5,7 +5,7 @@
* found in the LICENSE file.
*/
-#include "src/gpu/mtl/GrMtlGpuCommandBuffer.h"
+#include "src/gpu/mtl/GrMtlOpsRenderPass.h"
#include "src/gpu/GrColor.h"
#include "src/gpu/GrFixedClip.h"
@@ -21,10 +21,10 @@
#error This file must be compiled with Arc. Use -fobjc-arc flag
#endif
-GrMtlGpuRTCommandBuffer::GrMtlGpuRTCommandBuffer(
+GrMtlOpsRenderPass::GrMtlOpsRenderPass(
GrMtlGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo)
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo)
: INHERITED(rt, origin)
, fGpu(gpu)
#ifdef SK_DEBUG
@@ -34,11 +34,11 @@
this->setupRenderPass(colorInfo, stencilInfo);
}
-GrMtlGpuRTCommandBuffer::~GrMtlGpuRTCommandBuffer() {
+GrMtlOpsRenderPass::~GrMtlOpsRenderPass() {
SkASSERT(nil == fActiveRenderCmdEncoder);
}
-void GrMtlGpuRTCommandBuffer::precreateCmdEncoder() {
+void GrMtlOpsRenderPass::precreateCmdEncoder() {
// For clears, we may not have an associated draw. So we prepare a cmdEncoder that
// will be submitted whether there's a draw or not.
SkASSERT(nil == fActiveRenderCmdEncoder);
@@ -48,7 +48,7 @@
SkASSERT(nil != cmdEncoder);
}
-void GrMtlGpuRTCommandBuffer::submit() {
+void GrMtlOpsRenderPass::submit() {
if (!fRenderTarget) {
return;
}
@@ -57,7 +57,7 @@
fGpu->submitIndirectCommandBuffer(fRenderTarget, fOrigin, &iBounds);
}
-GrMtlPipelineState* GrMtlGpuRTCommandBuffer::prepareDrawState(
+GrMtlPipelineState* GrMtlOpsRenderPass::prepareDrawState(
const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState* fixedDynamicState,
@@ -85,7 +85,7 @@
return pipelineState;
}
-void GrMtlGpuRTCommandBuffer::onDraw(const GrPrimitiveProcessor& primProc,
+void GrMtlOpsRenderPass::onDraw(const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState* fixedDynamicState,
const GrPipeline::DynamicStateArrays* dynamicStateArrays,
@@ -195,7 +195,7 @@
fBounds.join(bounds);
}
-void GrMtlGpuRTCommandBuffer::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
+void GrMtlOpsRenderPass::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
// if we end up here from absClear, the clear bounds may be bigger than the RT proxy bounds -
// but in that case, scissor should be enabled, so this check should still succeed
SkASSERT(!clip.scissorEnabled() || clip.scissorRect().contains(fRTBounds));
@@ -206,7 +206,7 @@
fRenderPassDesc.colorAttachments[0].loadAction = MTLLoadActionLoad;
}
-void GrMtlGpuRTCommandBuffer::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
+void GrMtlOpsRenderPass::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
SkASSERT(!clip.hasWindowRectangles());
GrStencilAttachment* sb = fRenderTarget->renderTargetPriv().getStencilAttachment();
@@ -228,7 +228,7 @@
fRenderPassDesc.stencilAttachment.loadAction = MTLLoadActionLoad;
}
-void GrMtlGpuRTCommandBuffer::initRenderState(id<MTLRenderCommandEncoder> encoder) {
+void GrMtlOpsRenderPass::initRenderState(id<MTLRenderCommandEncoder> encoder) {
[encoder pushDebugGroup:@"initRenderState"];
[encoder setFrontFacingWinding:MTLWindingCounterClockwise];
// Strictly speaking we shouldn't have to set this, as the default viewport is the size of
@@ -241,9 +241,9 @@
[encoder popDebugGroup];
}
-void GrMtlGpuRTCommandBuffer::setupRenderPass(
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
+void GrMtlOpsRenderPass::setupRenderPass(
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
const static MTLLoadAction mtlLoadAction[] {
MTLLoadActionLoad,
MTLLoadActionClear,
@@ -324,9 +324,9 @@
return mtlPrimitiveType[static_cast<int>(primitiveType)];
}
-void GrMtlGpuRTCommandBuffer::bindGeometry(const GrBuffer* vertexBuffer,
- size_t vertexOffset,
- const GrBuffer* instanceBuffer) {
+void GrMtlOpsRenderPass::bindGeometry(const GrBuffer* vertexBuffer,
+ size_t vertexOffset,
+ const GrBuffer* instanceBuffer) {
size_t bufferIndex = GrMtlUniformHandler::kLastUniformBinding + 1;
if (vertexBuffer) {
SkASSERT(!vertexBuffer->isCpuBuffer());
@@ -344,10 +344,10 @@
}
}
-void GrMtlGpuRTCommandBuffer::sendMeshToGpu(GrPrimitiveType primitiveType,
- const GrBuffer* vertexBuffer,
- int vertexCount,
- int baseVertex) {
+void GrMtlOpsRenderPass::sendMeshToGpu(GrPrimitiveType primitiveType,
+ const GrBuffer* vertexBuffer,
+ int vertexCount,
+ int baseVertex) {
this->bindGeometry(vertexBuffer, 0, nullptr);
SkASSERT(primitiveType != GrPrimitiveType::kLinesAdjacency); // Geometry shaders not supported.
@@ -356,15 +356,15 @@
vertexCount:vertexCount];
}
-void GrMtlGpuRTCommandBuffer::sendIndexedMeshToGpu(GrPrimitiveType primitiveType,
- const GrBuffer* indexBuffer,
- int indexCount,
- int baseIndex,
- uint16_t /*minIndexValue*/,
- uint16_t /*maxIndexValue*/,
- const GrBuffer* vertexBuffer,
- int baseVertex,
- GrPrimitiveRestart restart) {
+void GrMtlOpsRenderPass::sendIndexedMeshToGpu(GrPrimitiveType primitiveType,
+ const GrBuffer* indexBuffer,
+ int indexCount,
+ int baseIndex,
+ uint16_t /*minIndexValue*/,
+ uint16_t /*maxIndexValue*/,
+ const GrBuffer* vertexBuffer,
+ int baseVertex,
+ GrPrimitiveRestart restart) {
this->bindGeometry(vertexBuffer, fCurrentVertexStride*baseVertex, nullptr);
SkASSERT(primitiveType != GrPrimitiveType::kLinesAdjacency); // Geometry shaders not supported.
@@ -388,13 +388,13 @@
fGpu->stats()->incNumDraws();
}
-void GrMtlGpuRTCommandBuffer::sendInstancedMeshToGpu(GrPrimitiveType primitiveType,
- const GrBuffer* vertexBuffer,
- int vertexCount,
- int baseVertex,
- const GrBuffer* instanceBuffer,
- int instanceCount,
- int baseInstance) {
+void GrMtlOpsRenderPass::sendInstancedMeshToGpu(GrPrimitiveType primitiveType,
+ const GrBuffer* vertexBuffer,
+ int vertexCount,
+ int baseVertex,
+ const GrBuffer* instanceBuffer,
+ int instanceCount,
+ int baseInstance) {
this->bindGeometry(vertexBuffer, 0, instanceBuffer);
SkASSERT(primitiveType != GrPrimitiveType::kLinesAdjacency); // Geometry shaders not supported.
@@ -405,15 +405,15 @@
baseInstance:baseInstance];
}
-void GrMtlGpuRTCommandBuffer::sendIndexedInstancedMeshToGpu(GrPrimitiveType primitiveType,
- const GrBuffer* indexBuffer,
- int indexCount,
- int baseIndex,
- const GrBuffer* vertexBuffer,
- int baseVertex,
- const GrBuffer* instanceBuffer,
- int instanceCount,
- int baseInstance,
+void GrMtlOpsRenderPass::sendIndexedInstancedMeshToGpu(GrPrimitiveType primitiveType,
+ const GrBuffer* indexBuffer,
+ int indexCount,
+ int baseIndex,
+ const GrBuffer* vertexBuffer,
+ int baseVertex,
+ const GrBuffer* instanceBuffer,
+ int instanceCount,
+ int baseInstance,
GrPrimitiveRestart restart) {
this->bindGeometry(vertexBuffer, 0, instanceBuffer);
@@ -441,10 +441,10 @@
fGpu->stats()->incNumDraws();
}
-void GrMtlGpuRTCommandBuffer::setVertexBuffer(id<MTLRenderCommandEncoder> encoder,
- const GrMtlBuffer* buffer,
- size_t vertexOffset,
- size_t index) {
+void GrMtlOpsRenderPass::setVertexBuffer(id<MTLRenderCommandEncoder> encoder,
+ const GrMtlBuffer* buffer,
+ size_t vertexOffset,
+ size_t index) {
SkASSERT(index < 4);
id<MTLBuffer> mtlVertexBuffer = buffer->mtlBuffer();
SkASSERT(mtlVertexBuffer);
@@ -464,7 +464,7 @@
}
}
-void GrMtlGpuRTCommandBuffer::resetBufferBindings() {
+void GrMtlOpsRenderPass::resetBufferBindings() {
for (size_t i = 0; i < kNumBindings; ++i) {
fBufferBindings[i].fBuffer = nil;
}
diff --git a/src/gpu/ops/GrClearOp.cpp b/src/gpu/ops/GrClearOp.cpp
index 34e15de..287fc7d 100644
--- a/src/gpu/ops/GrClearOp.cpp
+++ b/src/gpu/ops/GrClearOp.cpp
@@ -8,9 +8,9 @@
#include "src/gpu/ops/GrClearOp.h"
#include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrProxyProvider.h"
#include "src/gpu/GrRecordingContextPriv.h"
@@ -60,6 +60,6 @@
}
void GrClearOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
- SkASSERT(state->rtCommandBuffer());
- state->rtCommandBuffer()->clear(fClip, fColor);
+ SkASSERT(state->opsRenderPass());
+ state->opsRenderPass()->clear(fClip, fColor);
}
diff --git a/src/gpu/ops/GrClearStencilClipOp.cpp b/src/gpu/ops/GrClearStencilClipOp.cpp
index dfe8268..7ca4063 100644
--- a/src/gpu/ops/GrClearStencilClipOp.cpp
+++ b/src/gpu/ops/GrClearStencilClipOp.cpp
@@ -8,9 +8,9 @@
#include "src/gpu/ops/GrClearStencilClipOp.h"
#include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrRecordingContextPriv.h"
std::unique_ptr<GrOp> GrClearStencilClipOp::Make(GrRecordingContext* context,
@@ -23,6 +23,6 @@
}
void GrClearStencilClipOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
- SkASSERT(state->rtCommandBuffer());
- state->rtCommandBuffer()->clearStencilClip(fClip, fInsideStencilMask);
+ SkASSERT(state->opsRenderPass());
+ state->opsRenderPass()->clearStencilClip(fClip, fInsideStencilMask);
}
diff --git a/src/gpu/ops/GrDebugMarkerOp.cpp b/src/gpu/ops/GrDebugMarkerOp.cpp
index ddf6b3b..8c255cd 100644
--- a/src/gpu/ops/GrDebugMarkerOp.cpp
+++ b/src/gpu/ops/GrDebugMarkerOp.cpp
@@ -9,9 +9,9 @@
#include "include/private/GrRecordingContext.h"
#include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrRecordingContextPriv.h"
std::unique_ptr<GrOp> GrDebugMarkerOp::Make(GrRecordingContext* context,
@@ -25,6 +25,6 @@
void GrDebugMarkerOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
//SkDebugf("%s\n", fStr.c_str());
if (state->caps().gpuTracingSupport()) {
- state->commandBuffer()->insertEventMarker(fStr.c_str());
+ state->opsRenderPass()->insertEventMarker(fStr.c_str());
}
}
diff --git a/src/gpu/ops/GrDrawableOp.cpp b/src/gpu/ops/GrDrawableOp.cpp
index 6f89d74..66a63f9 100644
--- a/src/gpu/ops/GrDrawableOp.cpp
+++ b/src/gpu/ops/GrDrawableOp.cpp
@@ -9,9 +9,9 @@
#include "include/core/SkDrawable.h"
#include "include/private/GrRecordingContext.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrRecordingContextPriv.h"
std::unique_ptr<GrDrawableOp> GrDrawableOp::Make(
@@ -29,6 +29,6 @@
}
void GrDrawableOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) {
- SkASSERT(state->commandBuffer());
- state->rtCommandBuffer()->executeDrawable(std::move(fDrawable));
+ SkASSERT(state->opsRenderPass());
+ state->opsRenderPass()->executeDrawable(std::move(fDrawable));
}
diff --git a/src/gpu/ops/GrFillRRectOp.cpp b/src/gpu/ops/GrFillRRectOp.cpp
index fc3bce4..b671f07 100644
--- a/src/gpu/ops/GrFillRRectOp.cpp
+++ b/src/gpu/ops/GrFillRRectOp.cpp
@@ -10,9 +10,9 @@
#include "include/private/GrRecordingContext.h"
#include "src/core/SkRRectPriv.h"
#include "src/gpu/GrCaps.h"
-#include "src/gpu/GrGpuCommandBuffer.h"
#include "src/gpu/GrMemoryPool.h"
#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "src/gpu/GrRecordingContextPriv.h"
#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
#include "src/gpu/glsl/GrGLSLGeometryProcessor.h"
@@ -760,7 +760,7 @@
std::move(indexBuffer), indexCount, fInstanceBuffer, fInstanceCount, fBaseInstance,
GrPrimitiveRestart::kNo);
mesh->setVertexData(std::move(vertexBuffer));
- flushState->rtCommandBuffer()->draw(
+ flushState->opsRenderPass()->draw(
*proc, *pipeline, fixedDynamicState, nullptr, mesh, 1, this->bounds());
}
diff --git a/src/gpu/ops/GrMeshDrawOp.cpp b/src/gpu/ops/GrMeshDrawOp.cpp
index 6695058..0ba8e43 100644
--- a/src/gpu/ops/GrMeshDrawOp.cpp
+++ b/src/gpu/ops/GrMeshDrawOp.cpp
@@ -5,11 +5,12 @@
* found in the LICENSE file.
*/
-#include "src/gpu/GrGpuCommandBuffer.h"
-#include "src/gpu/GrOpFlushState.h"
-#include "src/gpu/GrResourceProvider.h"
#include "src/gpu/ops/GrMeshDrawOp.h"
+#include "src/gpu/GrOpFlushState.h"
+#include "src/gpu/GrOpsRenderPass.h"
+#include "src/gpu/GrResourceProvider.h"
+
GrMeshDrawOp::GrMeshDrawOp(uint32_t classID) : INHERITED(classID) {}
void GrMeshDrawOp::onPrepare(GrOpFlushState* state) { this->onPrepareDraws(state); }
diff --git a/src/gpu/ops/GrOp.h b/src/gpu/ops/GrOp.h
index 7aff59d..0578994 100644
--- a/src/gpu/ops/GrOp.h
+++ b/src/gpu/ops/GrOp.h
@@ -19,8 +19,8 @@
#include <new>
class GrCaps;
-class GrGpuCommandBuffer;
class GrOpFlushState;
+class GrOpsRenderPass;
/**
* GrOp is the base class for all Ganesh deferred GPU operations. To facilitate reordering and to
diff --git a/src/gpu/vk/GrVkCommandPool.h b/src/gpu/vk/GrVkCommandPool.h
index 58c5eb7..fd44d62 100644
--- a/src/gpu/vk/GrVkCommandPool.h
+++ b/src/gpu/vk/GrVkCommandPool.h
@@ -8,7 +8,6 @@
#ifndef GrVkCommandPool_DEFINED
#define GrVkCommandPool_DEFINED
-#include "src/gpu/vk/GrVkGpuCommandBuffer.h"
#include "src/gpu/vk/GrVkInterface.h"
#include "src/gpu/vk/GrVkResource.h"
#include "src/gpu/vk/GrVkResourceProvider.h"
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 13f603a..4f6c785 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -27,11 +27,11 @@
#include "src/gpu/vk/GrVkAMDMemoryAllocator.h"
#include "src/gpu/vk/GrVkCommandBuffer.h"
#include "src/gpu/vk/GrVkCommandPool.h"
-#include "src/gpu/vk/GrVkGpuCommandBuffer.h"
#include "src/gpu/vk/GrVkImage.h"
#include "src/gpu/vk/GrVkIndexBuffer.h"
#include "src/gpu/vk/GrVkInterface.h"
#include "src/gpu/vk/GrVkMemory.h"
+#include "src/gpu/vk/GrVkOpsRenderPass.h"
#include "src/gpu/vk/GrVkPipeline.h"
#include "src/gpu/vk/GrVkPipelineState.h"
#include "src/gpu/vk/GrVkRenderPass.h"
@@ -318,33 +318,23 @@
///////////////////////////////////////////////////////////////////////////////
-GrGpuRTCommandBuffer* GrVkGpu::getCommandBuffer(
+GrOpsRenderPass* GrVkGpu::getOpsRenderPass(
GrRenderTarget* rt, GrSurfaceOrigin origin, const SkRect& bounds,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
- if (!fCachedRTCommandBuffer) {
- fCachedRTCommandBuffer.reset(new GrVkGpuRTCommandBuffer(this));
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
+ if (!fCachedOpsRenderPass) {
+ fCachedOpsRenderPass.reset(new GrVkOpsRenderPass(this));
}
- fCachedRTCommandBuffer->set(rt, origin, colorInfo, stencilInfo);
- return fCachedRTCommandBuffer.get();
-}
-
-GrGpuTextureCommandBuffer* GrVkGpu::getCommandBuffer(GrTexture* texture, GrSurfaceOrigin origin) {
- if (!fCachedTexCommandBuffer) {
- fCachedTexCommandBuffer.reset(new GrVkGpuTextureCommandBuffer(this));
- }
-
- fCachedTexCommandBuffer->set(texture, origin);
- return fCachedTexCommandBuffer.get();
+ fCachedOpsRenderPass->set(rt, origin, colorInfo, stencilInfo);
+ return fCachedOpsRenderPass.get();
}
void GrVkGpu::submitCommandBuffer(SyncQueue sync, GrGpuFinishedProc finishedProc,
GrGpuFinishedContext finishedContext) {
TRACE_EVENT0("skia.gpu", TRACE_FUNC);
SkASSERT(fCurrentCmdBuffer);
- SkASSERT(!fCachedRTCommandBuffer || !fCachedRTCommandBuffer->isActive());
- SkASSERT(!fCachedTexCommandBuffer || !fCachedTexCommandBuffer->isActive());
+ SkASSERT(!fCachedOpsRenderPass || !fCachedOpsRenderPass->isActive());
if (!fCurrentCmdBuffer->hasWork() && kForce_SyncQueue != sync &&
!fSemaphoresToSignal.count() && !fSemaphoresToWaitOn.count()) {
@@ -2528,18 +2518,11 @@
this->didWriteToSurface(target, origin, &bounds);
}
-void GrVkGpu::submit(GrGpuCommandBuffer* buffer) {
- if (buffer->asRTCommandBuffer()) {
- SkASSERT(fCachedRTCommandBuffer.get() == buffer);
+void GrVkGpu::submit(GrOpsRenderPass* renderPass) {
+ SkASSERT(fCachedOpsRenderPass.get() == renderPass);
- fCachedRTCommandBuffer->submit();
- fCachedRTCommandBuffer->reset();
- } else {
- SkASSERT(fCachedTexCommandBuffer.get() == buffer);
-
- fCachedTexCommandBuffer->submit();
- fCachedTexCommandBuffer->reset();
- }
+ fCachedOpsRenderPass->submit();
+ fCachedOpsRenderPass->reset();
}
GrFence SK_WARN_UNUSED_RESULT GrVkGpu::insertFence() {
diff --git a/src/gpu/vk/GrVkGpu.h b/src/gpu/vk/GrVkGpu.h
index b0252cd..e6c558c 100644
--- a/src/gpu/vk/GrVkGpu.h
+++ b/src/gpu/vk/GrVkGpu.h
@@ -23,12 +23,11 @@
class GrVkBufferImpl;
class GrVkCommandPool;
-class GrVkGpuRTCommandBuffer;
-class GrVkGpuTextureCommandBuffer;
class GrVkMemoryAllocator;
class GrVkPipeline;
class GrVkPipelineState;
class GrVkPrimaryCommandBuffer;
+class GrVkOpsRenderPass;
class GrVkRenderPass;
class GrVkSecondaryCommandBuffer;
class GrVkTexture;
@@ -102,13 +101,10 @@
GrStencilAttachment* createStencilAttachmentForRenderTarget(
const GrRenderTarget*, int width, int height, int numStencilSamples) override;
- GrGpuRTCommandBuffer* getCommandBuffer(
+ GrOpsRenderPass* getOpsRenderPass(
GrRenderTarget*, GrSurfaceOrigin, const SkRect&,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override;
-
- GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override;
-
+ const GrOpsRenderPass::LoadAndStoreInfo&,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&) override;
void addBufferMemoryBarrier(const GrVkResource*,
VkPipelineStageFlags srcStageMask,
@@ -144,7 +140,7 @@
GrVkRenderTarget*, GrSurfaceOrigin,
const SkIRect& bounds);
- void submit(GrGpuCommandBuffer*) override;
+ void submit(GrOpsRenderPass*) override;
GrFence SK_WARN_UNUSED_RESULT insertFence() override;
bool waitFence(GrFence, uint64_t timeout) override;
@@ -315,8 +311,7 @@
GrProtected fProtectedContext;
- std::unique_ptr<GrVkGpuRTCommandBuffer> fCachedRTCommandBuffer;
- std::unique_ptr<GrVkGpuTextureCommandBuffer> fCachedTexCommandBuffer;
+ std::unique_ptr<GrVkOpsRenderPass> fCachedOpsRenderPass;
typedef GrGpu INHERITED;
};
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.cpp b/src/gpu/vk/GrVkOpsRenderPass.cpp
similarity index 90%
rename from src/gpu/vk/GrVkGpuCommandBuffer.cpp
rename to src/gpu/vk/GrVkOpsRenderPass.cpp
index b280820..6862436 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.cpp
+++ b/src/gpu/vk/GrVkOpsRenderPass.cpp
@@ -5,7 +5,7 @@
* found in the LICENSE file.
*/
-#include "src/gpu/vk/GrVkGpuCommandBuffer.h"
+#include "src/gpu/vk/GrVkOpsRenderPass.h"
#include "include/core/SkDrawable.h"
#include "include/core/SkRect.h"
@@ -48,19 +48,6 @@
/////////////////////////////////////////////////////////////////////////////
-void GrVkGpuTextureCommandBuffer::insertEventMarker(const char* msg) {
- // TODO: does Vulkan have a correlate?
-}
-
-void GrVkGpuTextureCommandBuffer::submit() {
- GrVkPrimaryCommandBufferTask::Args taskArgs{fGpu, fTexture};
- for (auto& task : fTasks) {
- task.execute(taskArgs);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
void get_vk_load_store_ops(GrLoadOp loadOpIn, GrStoreOp storeOpIn,
VkAttachmentLoadOp* loadOp, VkAttachmentStoreOp* storeOp) {
switch (loadOpIn) {
@@ -91,9 +78,9 @@
}
}
-GrVkGpuRTCommandBuffer::GrVkGpuRTCommandBuffer(GrVkGpu* gpu) : fGpu(gpu) {}
+GrVkOpsRenderPass::GrVkOpsRenderPass(GrVkGpu* gpu) : fGpu(gpu) {}
-void GrVkGpuRTCommandBuffer::init() {
+void GrVkOpsRenderPass::init() {
GrVkRenderPass::LoadStoreOps vkColorOps(fVkColorLoadOp, fVkColorStoreOp);
GrVkRenderPass::LoadStoreOps vkStencilOps(fVkStencilLoadOp, fVkStencilStoreOp);
@@ -137,7 +124,7 @@
cbInfo.currentCmdBuf()->begin(fGpu, vkRT->framebuffer(), cbInfo.fRenderPass);
}
-void GrVkGpuRTCommandBuffer::initWrapped() {
+void GrVkOpsRenderPass::initWrapped() {
CommandBufferInfo& cbInfo = fCommandBufferInfos.push_back();
SkASSERT(fCommandBufferInfos.count() == 1);
fCurrentCmdInfo = 0;
@@ -153,19 +140,19 @@
cbInfo.currentCmdBuf()->begin(fGpu, nullptr, cbInfo.fRenderPass);
}
-GrVkGpuRTCommandBuffer::~GrVkGpuRTCommandBuffer() {
+GrVkOpsRenderPass::~GrVkOpsRenderPass() {
this->reset();
}
-GrGpu* GrVkGpuRTCommandBuffer::gpu() { return fGpu; }
+GrGpu* GrVkOpsRenderPass::gpu() { return fGpu; }
-void GrVkGpuRTCommandBuffer::end() {
+void GrVkOpsRenderPass::end() {
if (fCurrentCmdInfo >= 0) {
fCommandBufferInfos[fCurrentCmdInfo].currentCmdBuf()->end(fGpu);
}
}
-void GrVkGpuRTCommandBuffer::submit() {
+void GrVkOpsRenderPass::submit() {
if (!fRenderTarget) {
return;
}
@@ -265,9 +252,9 @@
SkASSERT(currPreCmd == fPreCommandBufferTasks.end());
}
-void GrVkGpuRTCommandBuffer::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) {
+void GrVkOpsRenderPass::set(GrRenderTarget* rt, GrSurfaceOrigin origin,
+ const GrOpsRenderPass::LoadAndStoreInfo& colorInfo,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo& stencilInfo) {
SkASSERT(!fRenderTarget);
SkASSERT(fCommandBufferInfos.empty());
SkASSERT(-1 == fCurrentCmdInfo);
@@ -296,7 +283,7 @@
this->init();
}
-void GrVkGpuRTCommandBuffer::reset() {
+void GrVkOpsRenderPass::reset() {
for (int i = 0; i < fCommandBufferInfos.count(); ++i) {
CommandBufferInfo& cbInfo = fCommandBufferInfos[i];
if (cbInfo.fCommandBuffer) {
@@ -317,18 +304,18 @@
#endif
}
-bool GrVkGpuRTCommandBuffer::wrapsSecondaryCommandBuffer() const {
+bool GrVkOpsRenderPass::wrapsSecondaryCommandBuffer() const {
GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(fRenderTarget);
return vkRT->wrapsSecondaryCommandBuffer();
}
////////////////////////////////////////////////////////////////////////////////
-void GrVkGpuRTCommandBuffer::insertEventMarker(const char* msg) {
+void GrVkOpsRenderPass::insertEventMarker(const char* msg) {
// TODO: does Vulkan have a correlate?
}
-void GrVkGpuRTCommandBuffer::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
+void GrVkOpsRenderPass::onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) {
SkASSERT(!clip.hasWindowRectangles());
CommandBufferInfo& cbInfo = fCommandBufferInfos[fCurrentCmdInfo];
@@ -388,7 +375,7 @@
}
}
-void GrVkGpuRTCommandBuffer::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
+void GrVkOpsRenderPass::onClear(const GrFixedClip& clip, const SkPMColor4f& color) {
GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(fRenderTarget);
// parent class should never let us get here with no RT
@@ -469,7 +456,7 @@
////////////////////////////////////////////////////////////////////////////////
-void GrVkGpuRTCommandBuffer::addAdditionalRenderPass() {
+void GrVkOpsRenderPass::addAdditionalRenderPass() {
GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(fRenderTarget);
fCommandBufferInfos[fCurrentCmdInfo].currentCmdBuf()->end(fGpu);
@@ -504,7 +491,7 @@
cbInfo.currentCmdBuf()->begin(fGpu, vkRT->framebuffer(), cbInfo.fRenderPass);
}
-void GrVkGpuRTCommandBuffer::inlineUpload(GrOpFlushState* state,
+void GrVkOpsRenderPass::inlineUpload(GrOpFlushState* state,
GrDeferredTextureUploadFn& upload) {
if (!fCommandBufferInfos[fCurrentCmdInfo].fIsEmpty) {
this->addAdditionalRenderPass();
@@ -516,7 +503,7 @@
////////////////////////////////////////////////////////////////////////////////
-void GrVkGpuRTCommandBuffer::bindGeometry(const GrGpuBuffer* indexBuffer,
+void GrVkOpsRenderPass::bindGeometry(const GrGpuBuffer* indexBuffer,
const GrGpuBuffer* vertexBuffer,
const GrGpuBuffer* instanceBuffer) {
GrVkSecondaryCommandBuffer* currCmdBuf = fCommandBufferInfos[fCurrentCmdInfo].currentCmdBuf();
@@ -552,7 +539,7 @@
}
}
-GrVkPipelineState* GrVkGpuRTCommandBuffer::prepareDrawState(
+GrVkPipelineState* GrVkOpsRenderPass::prepareDrawState(
const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState* fixedDynamicState,
@@ -616,7 +603,7 @@
return pipelineState;
}
-void GrVkGpuRTCommandBuffer::onDraw(const GrPrimitiveProcessor& primProc,
+void GrVkOpsRenderPass::onDraw(const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState* fixedDynamicState,
const GrPipeline::DynamicStateArrays* dynamicStateArrays,
@@ -722,20 +709,20 @@
cbInfo.fIsEmpty = false;
}
-void GrVkGpuRTCommandBuffer::appendSampledTexture(GrTexture* tex) {
+void GrVkOpsRenderPass::appendSampledTexture(GrTexture* tex) {
SkASSERT(!tex->isProtected() || (fRenderTarget->isProtected() && fGpu->protectedContext()));
GrVkTexture* vkTex = static_cast<GrVkTexture*>(tex);
fCommandBufferInfos[fCurrentCmdInfo].fSampledTextures.push_back(sk_ref_sp(vkTex));
}
-void GrVkGpuRTCommandBuffer::sendInstancedMeshToGpu(GrPrimitiveType,
- const GrBuffer* vertexBuffer,
- int vertexCount,
- int baseVertex,
- const GrBuffer* instanceBuffer,
- int instanceCount,
- int baseInstance) {
+void GrVkOpsRenderPass::sendInstancedMeshToGpu(GrPrimitiveType,
+ const GrBuffer* vertexBuffer,
+ int vertexCount,
+ int baseVertex,
+ const GrBuffer* instanceBuffer,
+ int instanceCount,
+ int baseInstance) {
CommandBufferInfo& cbInfo = fCommandBufferInfos[fCurrentCmdInfo];
SkASSERT(!vertexBuffer || !vertexBuffer->isCpuBuffer());
SkASSERT(!instanceBuffer || !instanceBuffer->isCpuBuffer());
@@ -746,16 +733,16 @@
fGpu->stats()->incNumDraws();
}
-void GrVkGpuRTCommandBuffer::sendIndexedInstancedMeshToGpu(GrPrimitiveType,
- const GrBuffer* indexBuffer,
- int indexCount,
- int baseIndex,
- const GrBuffer* vertexBuffer,
- int baseVertex,
- const GrBuffer* instanceBuffer,
- int instanceCount,
- int baseInstance,
- GrPrimitiveRestart restart) {
+void GrVkOpsRenderPass::sendIndexedInstancedMeshToGpu(GrPrimitiveType,
+ const GrBuffer* indexBuffer,
+ int indexCount,
+ int baseIndex,
+ const GrBuffer* vertexBuffer,
+ int baseVertex,
+ const GrBuffer* instanceBuffer,
+ int instanceCount,
+ int baseInstance,
+ GrPrimitiveRestart restart) {
SkASSERT(restart == GrPrimitiveRestart::kNo);
CommandBufferInfo& cbInfo = fCommandBufferInfos[fCurrentCmdInfo];
SkASSERT(!vertexBuffer || !vertexBuffer->isCpuBuffer());
@@ -772,7 +759,7 @@
////////////////////////////////////////////////////////////////////////////////
-void GrVkGpuRTCommandBuffer::executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler> drawable) {
+void GrVkOpsRenderPass::executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler> drawable) {
GrVkRenderTarget* target = static_cast<GrVkRenderTarget*>(fRenderTarget);
GrVkImage* targetImage = target->msaaImage() ? target->msaaImage() : target;
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.h b/src/gpu/vk/GrVkOpsRenderPass.h
similarity index 76%
rename from src/gpu/vk/GrVkGpuCommandBuffer.h
rename to src/gpu/vk/GrVkOpsRenderPass.h
index c24eebd..0e68f80 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.h
+++ b/src/gpu/vk/GrVkOpsRenderPass.h
@@ -5,10 +5,10 @@
* found in the LICENSE file.
*/
-#ifndef GrVkGpuCommandBuffer_DEFINED
-#define GrVkGpuCommandBuffer_DEFINED
+#ifndef GrVkOpsRenderPass_DEFINED
+#define GrVkOpsRenderPass_DEFINED
-#include "src/gpu/GrGpuCommandBuffer.h"
+#include "src/gpu/GrOpsRenderPass.h"
#include "include/gpu/GrTypes.h"
#include "include/gpu/vk/GrVkTypes.h"
@@ -41,55 +41,11 @@
GrVkPrimaryCommandBufferTask& operator=(const GrVkPrimaryCommandBufferTask&) = delete;
};
-class GrVkGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer {
+class GrVkOpsRenderPass : public GrOpsRenderPass, private GrMesh::SendToGpuImpl {
public:
- GrVkGpuTextureCommandBuffer(GrVkGpu* gpu) : fGpu(gpu) {}
+ GrVkOpsRenderPass(GrVkGpu*);
- void insertEventMarker(const char*) override;
-
- void reset() {
- fTasks.reset();
- fTexture = nullptr;
-#ifdef SK_DEBUG
- fIsActive = false;
-#endif
- }
-
- void setVk(GrTexture* tex, GrSurfaceOrigin origin) {
-#ifdef SK_DEBUG
- fIsActive = true;
-#endif
- this->INHERITED::set(tex, origin);
- }
-
-#ifdef SK_DEBUG
- bool isActive() const { return fIsActive; }
-#endif
-
- void submit();
-
-private:
- GrVkGpu* fGpu;
- GrTRecorder<GrVkPrimaryCommandBufferTask> fTasks{1024};
-
-#ifdef SK_DEBUG
- // When we are actively recording into the GrVkGpuCommandBuffer we set this flag to true. This
- // then allows us to assert that we never submit a primary command buffer to the queue while in
- // a recording state. This is needed since when we submit to the queue we change command pools
- // and may trigger the old one to be reset, but a recording GrVkGpuCommandBuffer may still have
- // a outstanding secondary command buffer allocated from that pool that we'll try to access
- // after the pool as been reset.
- bool fIsActive = false;
-#endif
-
- typedef GrGpuTextureCommandBuffer INHERITED;
-};
-
-class GrVkGpuRTCommandBuffer : public GrGpuRTCommandBuffer, private GrMesh::SendToGpuImpl {
-public:
- GrVkGpuRTCommandBuffer(GrVkGpu*);
-
- ~GrVkGpuRTCommandBuffer() override;
+ ~GrVkOpsRenderPass() override;
void begin() override { }
void end() override;
@@ -101,8 +57,8 @@
void executeDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler>) override;
void set(GrRenderTarget*, GrSurfaceOrigin,
- const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
- const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&);
+ const GrOpsRenderPass::LoadAndStoreInfo&,
+ const GrOpsRenderPass::StencilLoadAndStoreInfo&);
void reset();
void submit();
@@ -213,16 +169,16 @@
int fCurrentCmdInfo = -1;
#ifdef SK_DEBUG
- // When we are actively recording into the GrVkGpuCommandBuffer we set this flag to true. This
+ // When we are actively recording into the GrVkOpsRenderPass we set this flag to true. This
// then allows us to assert that we never submit a primary command buffer to the queue while in
// a recording state. This is needed since when we submit to the queue we change command pools
- // and may trigger the old one to be reset, but a recording GrVkGpuCommandBuffer may still have
+ // and may trigger the old one to be reset, but a recording GrVkOpsRenderPass may still have
// a outstanding secondary command buffer allocated from that pool that we'll try to access
// after the pool as been reset.
bool fIsActive = false;
#endif
- typedef GrGpuRTCommandBuffer INHERITED;
+ typedef GrOpsRenderPass INHERITED;
};
#endif