Remove destination GrRenderTargetProxy from GrPipeline
Change-Id: Ie2ee3d51220163fde8a959255dd5f6cce4e27ad8
Reviewed-on: https://skia-review.googlesource.com/c/188038
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrOpFlushState.cpp b/src/gpu/GrOpFlushState.cpp
index 81920e6..3e82361 100644
--- a/src/gpu/GrOpFlushState.cpp
+++ b/src/gpu/GrOpFlushState.cpp
@@ -40,7 +40,6 @@
this->rtCommandBuffer()->inlineUpload(this, fCurrUpload->fUpload);
++fCurrUpload;
}
- SkASSERT(fCurrDraw->fPipeline->proxy() == this->drawOpArgs().fProxy);
this->rtCommandBuffer()->draw(*fCurrDraw->fGeometryProcessor, *fCurrDraw->fPipeline,
fCurrDraw->fFixedDynamicState, fCurrDraw->fDynamicStateArrays,
fCurrDraw->fMeshes, fCurrDraw->fMeshCnt, opBounds);
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h
index c26ea68..9159d49 100644
--- a/src/gpu/GrOpFlushState.h
+++ b/src/gpu/GrOpFlushState.h
@@ -13,6 +13,7 @@
#include "GrBufferAllocPool.h"
#include "GrDeferredUpload.h"
#include "GrDeinstantiateProxyTracker.h"
+#include "GrRenderTargetProxy.h"
#include "SkArenaAlloc.h"
#include "SkArenaAllocList.h"
#include "ops/GrMeshDrawOp.h"
@@ -53,6 +54,7 @@
/** Additional data required on a per-op basis when executing GrOps. */
struct OpArgs {
+ GrSurfaceOrigin origin() const { return fProxy->origin(); }
GrRenderTarget* renderTarget() const { return fProxy->peekRenderTarget(); }
GrOp* fOp;
diff --git a/src/gpu/GrPathRendering.cpp b/src/gpu/GrPathRendering.cpp
index 614d014..0156072 100644
--- a/src/gpu/GrPathRendering.cpp
+++ b/src/gpu/GrPathRendering.cpp
@@ -7,6 +7,7 @@
#include "GrGpu.h"
#include "GrPathRendering.h"
+#include "GrRenderTarget.h"
#include "SkDescriptor.h"
#include "SkScalerContext.h"
#include "SkGlyph.h"
@@ -49,15 +50,18 @@
this->onStencilPath(args, path);
}
-void GrPathRendering::drawPath(const GrPrimitiveProcessor& primProc,
+void GrPathRendering::drawPath(GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState& fixedDynamicState,
// Cover pass settings in pipeline.
const GrStencilSettings& stencilPassSettings,
const GrPath* path) {
fGpu->handleDirtyContext();
- if (GrXferBarrierType barrierType = pipeline.xferBarrierType(*fGpu->caps())) {
- fGpu->xferBarrier(pipeline.renderTarget(), barrierType);
+ if (GrXferBarrierType barrierType = pipeline.xferBarrierType(renderTarget->asTexture(),
+ *fGpu->caps())) {
+ fGpu->xferBarrier(renderTarget, barrierType);
}
- this->onDrawPath(primProc, pipeline, fixedDynamicState, stencilPassSettings, path);
+ this->onDrawPath(renderTarget, origin, primProc, pipeline, fixedDynamicState,
+ stencilPassSettings, path);
}
diff --git a/src/gpu/GrPathRendering.h b/src/gpu/GrPathRendering.h
index 3ae52e9..aba4110 100644
--- a/src/gpu/GrPathRendering.h
+++ b/src/gpu/GrPathRendering.h
@@ -109,7 +109,8 @@
void stencilPath(const StencilPathArgs& args, const GrPath* path);
- void drawPath(const GrPrimitiveProcessor& primProc,
+ void drawPath(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState&,
const GrStencilSettings& stencilPassSettings, // Cover pass settings in pipeline.
@@ -119,7 +120,8 @@
GrPathRendering(GrGpu* gpu) : fGpu(gpu) { }
virtual void onStencilPath(const StencilPathArgs&, const GrPath*) = 0;
- virtual void onDrawPath(const GrPrimitiveProcessor&,
+ virtual void onDrawPath(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrPipeline&,
const GrPipeline::FixedDynamicState&,
const GrStencilSettings&,
diff --git a/src/gpu/GrPathRendering_none.cpp b/src/gpu/GrPathRendering_none.cpp
index bbd4610..ce46ad4 100644
--- a/src/gpu/GrPathRendering_none.cpp
+++ b/src/gpu/GrPathRendering_none.cpp
@@ -40,7 +40,8 @@
sk_sp<GrPath> GrGLPathRendering::createPath(const SkPath&, const GrStyle&) { return nullptr; }
-void GrGLPathRendering::onDrawPath(const GrPrimitiveProcessor&,
+void GrGLPathRendering::onDrawPath(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrPipeline&,
const GrPipeline::FixedDynamicState&,
const GrStencilSettings&,
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
index c671922..537c543 100644
--- a/src/gpu/GrPipeline.cpp
+++ b/src/gpu/GrPipeline.cpp
@@ -19,11 +19,8 @@
GrPipeline::GrPipeline(const InitArgs& args,
GrProcessorSet&& processors,
GrAppliedClip&& appliedClip) {
- SkASSERT(args.fProxy);
SkASSERT(processors.isFinalized());
- fProxy.reset(args.fProxy);
-
fFlags = args.fFlags;
if (appliedClip.hasStencilClip()) {
fFlags |= kHasStencilClip_Flag;
@@ -91,23 +88,20 @@
}
-GrXferBarrierType GrPipeline::xferBarrierType(const GrCaps& caps) const {
- if (fDstTextureProxy.get() &&
- fDstTextureProxy.get()->peekTexture() == fProxy.get()->peekTexture()) {
+GrXferBarrierType GrPipeline::xferBarrierType(GrTexture* texture, const GrCaps& caps) const {
+ if (fDstTextureProxy.get() && fDstTextureProxy.get()->peekTexture() == texture) {
return kTexture_GrXferBarrierType;
}
return this->getXferProcessor().xferBarrierType(caps);
}
-GrPipeline::GrPipeline(GrRenderTargetProxy* proxy, GrScissorTest scissorTest, SkBlendMode blendmode)
- : fProxy(proxy)
- , fWindowRectsState()
+GrPipeline::GrPipeline(GrScissorTest scissorTest, SkBlendMode blendmode)
+ : fWindowRectsState()
, fUserStencilSettings(&GrUserStencilSettings::kUnused)
, fFlags()
, fXferProcessor(GrPorterDuffXPFactory::MakeNoCoverageXP(blendmode))
, fFragmentProcessors()
, fNumColorProcessors(0) {
- SkASSERT(proxy);
if (GrScissorTest::kEnabled == scissorTest) {
fFlags |= kScissorEnabled_Flag;
}
diff --git a/src/gpu/GrPipeline.h b/src/gpu/GrPipeline.h
index 5e75c65..91f619e 100644
--- a/src/gpu/GrPipeline.h
+++ b/src/gpu/GrPipeline.h
@@ -15,7 +15,6 @@
#include "GrProcessorSet.h"
#include "GrProgramDesc.h"
#include "GrRect.h"
-#include "GrRenderTargetProxy.h"
#include "GrScissorState.h"
#include "GrUserStencilSettings.h"
#include "GrWindowRectsState.h"
@@ -56,7 +55,6 @@
struct InitArgs {
uint32_t fFlags = 0;
const GrUserStencilSettings* fUserStencil = &GrUserStencilSettings::kUnused;
- GrRenderTargetProxy* fProxy = nullptr;
const GrCaps* fCaps = nullptr;
GrResourceProvider* fResourceProvider = nullptr;
GrXferProcessor::DstProxy fDstProxy;
@@ -95,7 +93,7 @@
* must be "Porter Duff" (<= kLastCoeffMode). If using GrScissorTest::kEnabled, the caller must
* specify a scissor rectangle through the DynamicState struct.
**/
- GrPipeline(GrRenderTargetProxy*, GrScissorTest, SkBlendMode);
+ GrPipeline(GrScissorTest, SkBlendMode);
GrPipeline(const InitArgs&, GrProcessorSet&&, GrAppliedClip&&);
@@ -161,14 +159,6 @@
/// @}
- /**
- * Retrieves the currently set render-target.
- *
- * @return The currently set render target.
- */
- GrRenderTargetProxy* proxy() const { return fProxy.get(); }
- GrRenderTarget* renderTarget() const { return fProxy.get()->peekRenderTarget(); }
-
const GrUserStencilSettings* getUserStencil() const { return fUserStencilSettings; }
bool isScissorEnabled() const {
@@ -189,7 +179,7 @@
}
bool isBad() const { return SkToBool(fFlags & kIsBad_Flag); }
- GrXferBarrierType xferBarrierType(const GrCaps& caps) const;
+ GrXferBarrierType xferBarrierType(GrTexture*, const GrCaps&) const;
static SkString DumpFlags(uint32_t flags) {
if (flags) {
@@ -216,14 +206,11 @@
kIsBad_Flag = 0x80,
};
- using RenderTargetProxy = GrPendingIOResource<GrRenderTargetProxy, kWrite_GrIOType>;
using DstTextureProxy = GrPendingIOResource<GrTextureProxy, kRead_GrIOType>;
using FragmentProcessorArray = SkAutoSTArray<8, std::unique_ptr<const GrFragmentProcessor>>;
DstTextureProxy fDstTextureProxy;
SkIPoint fDstTextureOffset;
- // MDB TODO: do we still need the destination proxy here?
- RenderTargetProxy fProxy;
GrWindowRectsState fWindowRectsState;
const GrUserStencilSettings* fUserStencilSettings;
uint16_t fFlags;
diff --git a/src/gpu/GrProgramDesc.cpp b/src/gpu/GrProgramDesc.cpp
index d888a63..952dc00 100644
--- a/src/gpu/GrProgramDesc.cpp
+++ b/src/gpu/GrProgramDesc.cpp
@@ -193,6 +193,7 @@
}
bool GrProgramDesc::Build(GrProgramDesc* desc,
+ GrPixelConfig config,
const GrPrimitiveProcessor& primProc,
bool hasPointSize,
const GrPipeline& pipeline,
@@ -246,7 +247,7 @@
// make sure any padding in the header is zeroed.
memset(header, 0, kHeaderSize);
- header->fOutputSwizzle = shaderCaps.configOutputSwizzle(pipeline.proxy()->config()).asKey();
+ header->fOutputSwizzle = shaderCaps.configOutputSwizzle(config).asKey();
header->fSnapVerticesToPixelCenters = pipeline.snapVerticesToPixelCenters();
header->fColorFragmentProcessorCnt = pipeline.numColorFragmentProcessors();
header->fCoverageFragmentProcessorCnt = pipeline.numCoverageFragmentProcessors();
diff --git a/src/gpu/GrProgramDesc.h b/src/gpu/GrProgramDesc.h
index e8f0877..08e03c9 100644
--- a/src/gpu/GrProgramDesc.h
+++ b/src/gpu/GrProgramDesc.h
@@ -40,6 +40,7 @@
* @param GrProgramDesc The built and finalized descriptor
**/
static bool Build(GrProgramDesc*,
+ GrPixelConfig,
const GrPrimitiveProcessor&,
bool hasPointSize,
const GrPipeline&,
diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.cpp b/src/gpu/ccpr/GrCCDrawPathsOp.cpp
index 0d01849..0b4feb6 100644
--- a/src/gpu/ccpr/GrCCDrawPathsOp.cpp
+++ b/src/gpu/ccpr/GrCCDrawPathsOp.cpp
@@ -399,7 +399,6 @@
}
GrPipeline::InitArgs initArgs;
- initArgs.fProxy = flushState->drawOpArgs().fProxy;
initArgs.fCaps = &flushState->caps();
initArgs.fResourceProvider = flushState->resourceProvider();
initArgs.fDstProxy = flushState->drawOpArgs().fDstProxy;
diff --git a/src/gpu/ccpr/GrCCFiller.cpp b/src/gpu/ccpr/GrCCFiller.cpp
index 486a1a1..a5e2e59 100644
--- a/src/gpu/ccpr/GrCCFiller.cpp
+++ b/src/gpu/ccpr/GrCCFiller.cpp
@@ -467,8 +467,7 @@
const PrimitiveTallies& batchTotalCounts = fBatches[batchID].fTotalPrimitiveCounts;
- GrPipeline pipeline(flushState->drawOpArgs().fProxy, GrScissorTest::kEnabled,
- SkBlendMode::kPlus);
+ GrPipeline pipeline(GrScissorTest::kEnabled, SkBlendMode::kPlus);
if (batchTotalCounts.fTriangles) {
this->drawPrimitives(flushState, pipeline, batchID, PrimitiveType::kTriangles,
diff --git a/src/gpu/ccpr/GrCCPerFlushResources.cpp b/src/gpu/ccpr/GrCCPerFlushResources.cpp
index 6be4f64..7b7a3d1 100644
--- a/src/gpu/ccpr/GrCCPerFlushResources.cpp
+++ b/src/gpu/ccpr/GrCCPerFlushResources.cpp
@@ -75,7 +75,7 @@
auto srcProxy = fSrcProxy.get();
dynamicState.fPrimitiveProcessorTextures = &srcProxy;
- GrPipeline pipeline(flushState->proxy(), GrScissorTest::kDisabled, SkBlendMode::kSrc);
+ GrPipeline pipeline(GrScissorTest::kDisabled, SkBlendMode::kSrc);
GrCCPathProcessor pathProc(srcProxy);
pathProc.drawPaths(flushState, pipeline, &dynamicState, *fResources, fBaseInstance,
fEndInstance, this->bounds());
diff --git a/src/gpu/ccpr/GrCCStroker.cpp b/src/gpu/ccpr/GrCCStroker.cpp
index a4905b3..011acb2 100644
--- a/src/gpu/ccpr/GrCCStroker.cpp
+++ b/src/gpu/ccpr/GrCCStroker.cpp
@@ -689,8 +689,7 @@
startIndices[(int)GrScissorTest::kEnabled] = (!startScissorSubBatch)
? &fZeroTallies : fScissorSubBatches[startScissorSubBatch - 1].fEndInstances;
- GrPipeline pipeline(flushState->drawOpArgs().fProxy, GrScissorTest::kEnabled,
- SkBlendMode::kPlus);
+ GrPipeline pipeline(GrScissorTest::kEnabled, SkBlendMode::kPlus);
// Draw linear strokes.
this->appendStrokeMeshesToBuffers(0, batch, startIndices, startScissorSubBatch, drawBounds);
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index bccf8f3..50b70fa 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -1962,7 +1962,9 @@
}
}
-bool GrGLGpu::flushGLState(const GrPrimitiveProcessor& primProc,
+bool GrGLGpu::flushGLState(GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState* fixedDynamicState,
const GrPipeline::DynamicStateArrays* dynamicStateArrays,
@@ -1981,7 +1983,8 @@
SkASSERT(SkToBool(primProcProxiesForMipRegen) == SkToBool(primProc.numTextureSamplers()));
- sk_sp<GrGLProgram> program(fProgramCache->refProgram(this, primProc, primProcProxiesForMipRegen,
+ sk_sp<GrGLProgram> program(fProgramCache->refProgram(this, renderTarget, origin, primProc,
+ primProcProxiesForMipRegen,
pipeline, willDrawPoints));
if (!program) {
GrCapsDebugf(this->caps(), "Failed to create program!\n");
@@ -1999,12 +2002,13 @@
// Swizzle the blend to match what the shader will output.
const GrSwizzle& swizzle = this->caps()->shaderCaps()->configOutputSwizzle(
- pipeline.proxy()->config());
+ renderTarget->config());
this->flushBlend(blendInfo, swizzle);
- fHWProgram->updateUniformsAndTextureBindings(primProc, pipeline, primProcProxiesToBind);
+ fHWProgram->updateUniformsAndTextureBindings(renderTarget, origin,
+ primProc, pipeline, primProcProxiesToBind);
- GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(pipeline.renderTarget());
+ GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(renderTarget);
GrStencilSettings stencil;
if (pipeline.isStencilEnabled()) {
// TODO: attach stencil and create settings during render target flush.
@@ -2016,11 +2020,11 @@
if (pipeline.isScissorEnabled()) {
static constexpr SkIRect kBogusScissor{0, 0, 1, 1};
GrScissorState state(fixedDynamicState ? fixedDynamicState->fScissorRect : kBogusScissor);
- this->flushScissor(state, glRT->getViewport(), pipeline.proxy()->origin());
+ this->flushScissor(state, glRT->getViewport(), origin);
} else {
this->disableScissor();
}
- this->flushWindowRectangles(pipeline.getWindowRectsState(), glRT, pipeline.proxy()->origin());
+ this->flushWindowRectangles(pipeline.getWindowRectsState(), glRT, origin);
this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !stencil.isDisabled());
// This must come after textures are flushed because a texture may need
@@ -2516,7 +2520,8 @@
#endif
#endif
-void GrGLGpu::draw(const GrPrimitiveProcessor& primProc,
+void GrGLGpu::draw(GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState* fixedDynamicState,
const GrPipeline::DynamicStateArrays* dynamicStateArrays,
@@ -2531,8 +2536,8 @@
break;
}
}
- if (!this->flushGLState(primProc, pipeline, fixedDynamicState, dynamicStateArrays, meshCount,
- hasPoints)) {
+ if (!this->flushGLState(renderTarget, origin, primProc, pipeline, fixedDynamicState,
+ dynamicStateArrays, meshCount, hasPoints)) {
return;
}
@@ -2543,14 +2548,15 @@
dynamicPrimProcTextures = dynamicStateArrays->fPrimitiveProcessorTextures;
}
for (int m = 0; m < meshCount; ++m) {
- if (GrXferBarrierType barrierType = pipeline.xferBarrierType(*this->caps())) {
- this->xferBarrier(pipeline.renderTarget(), barrierType);
+ if (GrXferBarrierType barrierType = pipeline.xferBarrierType(renderTarget->asTexture(),
+ *this->caps())) {
+ this->xferBarrier(renderTarget, barrierType);
}
if (dynamicScissor) {
- GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(pipeline.renderTarget());
+ GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(renderTarget);
this->flushScissor(GrScissorState(dynamicStateArrays->fScissorRects[m]),
- glRT->getViewport(), pipeline.proxy()->origin());
+ glRT->getViewport(), origin);
}
if (dynamicPrimProcTextures) {
auto texProxyArray = dynamicStateArrays->fPrimitiveProcessorTextures +
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index 4daf024..fede5cc 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -79,7 +79,8 @@
// The GrGLGpuRTCommandBuffer 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.
- void draw(const GrPrimitiveProcessor&,
+ void draw(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrPipeline&,
const GrPipeline::FixedDynamicState*,
const GrPipeline::DynamicStateArrays*,
@@ -263,9 +264,10 @@
// willDrawPoints must be true if point primitives will be rendered after setting the GL state.
// If DynamicStateArrays is not null then dynamicStateArraysLength is the number of dynamic
// state entries in each array.
- bool flushGLState(const GrPrimitiveProcessor&, const GrPipeline&,
- const GrPipeline::FixedDynamicState*, const GrPipeline::DynamicStateArrays*,
- int dynamicStateArraysLength, bool willDrawPoints);
+ bool flushGLState(GrRenderTarget*, GrSurfaceOrigin, const GrPrimitiveProcessor&,
+ const GrPipeline&, const GrPipeline::FixedDynamicState*,
+ const GrPipeline::DynamicStateArrays*, int dynamicStateArraysLength,
+ bool willDrawPoints);
void flushProgram(sk_sp<GrGLProgram>);
@@ -302,7 +304,8 @@
~ProgramCache();
void abandon();
- GrGLProgram* refProgram(GrGLGpu*, const GrPrimitiveProcessor&,
+ GrGLProgram* refProgram(GrGLGpu*, GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
const GrPipeline&, bool hasPointSize);
diff --git a/src/gpu/gl/GrGLGpuCommandBuffer.h b/src/gpu/gl/GrGLGpuCommandBuffer.h
index e8c9bbd..86beee7 100644
--- a/src/gpu/gl/GrGLGpuCommandBuffer.h
+++ b/src/gpu/gl/GrGLGpuCommandBuffer.h
@@ -85,8 +85,8 @@
const GrMesh mesh[],
int meshCount,
const SkRect& bounds) override {
- SkASSERT(pipeline.renderTarget() == fRenderTarget);
- fGpu->draw(primProc, pipeline, fixedDynamicState, dynamicStateArrays, mesh, meshCount);
+ fGpu->draw(fRenderTarget, fOrigin, primProc, pipeline, fixedDynamicState,
+ dynamicStateArrays, mesh, meshCount);
}
void onClear(const GrFixedClip& clip, const SkPMColor4f& color) override {
diff --git a/src/gpu/gl/GrGLGpuProgramCache.cpp b/src/gpu/gl/GrGLGpuProgramCache.cpp
index f3aa027..ade5b49 100644
--- a/src/gpu/gl/GrGLGpuProgramCache.cpp
+++ b/src/gpu/gl/GrGLGpuProgramCache.cpp
@@ -69,6 +69,8 @@
}
GrGLProgram* GrGLGpu::ProgramCache::refProgram(GrGLGpu* gpu,
+ GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
const GrPipeline& pipeline,
@@ -79,14 +81,13 @@
// Get GrGLProgramDesc
GrProgramDesc desc;
- if (!GrProgramDesc::Build(&desc, primProc, isPoints, pipeline, gpu)) {
+ if (!GrProgramDesc::Build(&desc, renderTarget->config(), primProc, isPoints, pipeline, gpu)) {
GrCapsDebugf(gpu->caps(), "Failed to gl program descriptor!\n");
return nullptr;
}
std::unique_ptr<Entry>* entry = fMap.find(desc);
if (!entry) {
// Didn't find an origin-independent version, check with the specific origin
- GrSurfaceOrigin origin = pipeline.proxy()->origin();
desc.setSurfaceOriginKey(GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(origin));
entry = fMap.find(desc);
}
@@ -95,7 +96,8 @@
#ifdef PROGRAM_CACHE_STATS
++fCacheMisses;
#endif
- GrGLProgram* program = GrGLProgramBuilder::CreateProgram(primProc, primProcProxies,
+ GrGLProgram* program = GrGLProgramBuilder::CreateProgram(renderTarget, origin,
+ primProc, primProcProxies,
pipeline, &desc, fGpu);
if (nullptr == program) {
return nullptr;
diff --git a/src/gpu/gl/GrGLPathRendering.cpp b/src/gpu/gl/GrGLPathRendering.cpp
index 7943b38..c1f05af 100644
--- a/src/gpu/gl/GrGLPathRendering.cpp
+++ b/src/gpu/gl/GrGLPathRendering.cpp
@@ -11,6 +11,7 @@
#include "GrGLPath.h"
#include "GrGLPathRendering.h"
+#include "GrRenderTargetProxy.h"
#include "SkStream.h"
#include "SkTypeface.h"
@@ -111,12 +112,14 @@
}
}
-void GrGLPathRendering::onDrawPath(const GrPrimitiveProcessor& primProc,
+void GrGLPathRendering::onDrawPath(GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrPipeline::FixedDynamicState& fixedDynamicState,
const GrStencilSettings& stencilPassSettings,
const GrPath* path) {
- if (!this->gpu()->flushGLState(primProc, pipeline, &fixedDynamicState, nullptr, 1, false)) {
+ if (!this->gpu()->flushGLState(renderTarget, origin, primProc, pipeline,
+ &fixedDynamicState, nullptr, 1, false)) {
return;
}
const GrGLPath* glPath = static_cast<const GrGLPath*>(path);
diff --git a/src/gpu/gl/GrGLPathRendering.h b/src/gpu/gl/GrGLPathRendering.h
index 74c5fce..a895076 100644
--- a/src/gpu/gl/GrGLPathRendering.h
+++ b/src/gpu/gl/GrGLPathRendering.h
@@ -65,7 +65,8 @@
protected:
void onStencilPath(const StencilPathArgs&, const GrPath*) override;
- void onDrawPath(const GrPrimitiveProcessor&,
+ void onDrawPath(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrPipeline&,
const GrPipeline::FixedDynamicState&,
const GrStencilSettings&,
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index 8a5308f..472be86 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -72,10 +72,12 @@
///////////////////////////////////////////////////////////////////////////////
-void GrGLProgram::updateUniformsAndTextureBindings(const GrPrimitiveProcessor& primProc,
+void GrGLProgram::updateUniformsAndTextureBindings(const GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrTextureProxy* const primProcTextures[]) {
- this->setRenderTargetState(primProc, pipeline.proxy());
+ this->setRenderTargetState(renderTarget, origin, primProc);
// we set the textures, and uniforms for installed processors in a generic way, but subclasses
// of GLProgram determine how to set coord transforms
@@ -130,9 +132,8 @@
SkASSERT(!fp && !glslFP);
}
-void GrGLProgram::setRenderTargetState(const GrPrimitiveProcessor& primProc,
- const GrRenderTargetProxy* proxy) {
- GrRenderTarget* rt = proxy->peekRenderTarget();
+void GrGLProgram::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc) {
// Load the RT size uniforms if they are needed
if (fBuiltinUniformHandles.fRTWidthUni.isValid() &&
fRenderTargetState.fRenderTargetSize.fWidth != rt->width()) {
@@ -147,10 +148,10 @@
SkISize size;
size.set(rt->width(), rt->height());
if (!primProc.isPathRendering()) {
- if (fRenderTargetState.fRenderTargetOrigin != proxy->origin() ||
+ if (fRenderTargetState.fRenderTargetOrigin != origin ||
fRenderTargetState.fRenderTargetSize != size) {
fRenderTargetState.fRenderTargetSize = size;
- fRenderTargetState.fRenderTargetOrigin = proxy->origin();
+ fRenderTargetState.fRenderTargetOrigin = origin;
float rtAdjustmentVec[4];
fRenderTargetState.getRTAdjustmentVec(rtAdjustmentVec);
@@ -160,6 +161,6 @@
SkASSERT(fGpu->glCaps().shaderCaps()->pathRenderingSupport());
const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>();
fGpu->glPathRendering()->setProjectionMatrix(pathProc.viewMatrix(),
- size, proxy->origin());
+ size, origin);
}
}
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h
index f0d0395..78cf484 100644
--- a/src/gpu/gl/GrGLProgram.h
+++ b/src/gpu/gl/GrGLProgram.h
@@ -18,7 +18,7 @@
class GrGLSLXferProcessor;
class GrPipeline;
class GrPrimitiveProcessor;
-class GrRenderTargetProxy;
+class GrRenderTarget;
class GrTextureProxy;
/**
@@ -118,7 +118,8 @@
*
* It is the caller's responsibility to ensure the program is bound before calling.
*/
- void updateUniformsAndTextureBindings(const GrPrimitiveProcessor&, const GrPipeline&,
+ void updateUniformsAndTextureBindings(const GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&, const GrPipeline&,
const GrTextureProxy* const primitiveProcessorTextures[]);
void updatePrimitiveProcessorTextureBindings(const GrPrimitiveProcessor&,
@@ -144,7 +145,7 @@
void setFragmentData(const GrPipeline&, int* nextTexSamplerIdx);
// Helper for setData() that sets the view matrix and loads the render target height uniform
- void setRenderTargetState(const GrPrimitiveProcessor&, const GrRenderTargetProxy*);
+ void setRenderTargetState(const GrRenderTarget*, GrSurfaceOrigin, const GrPrimitiveProcessor&);
// these reflect the current values of uniforms (GL uniform values travel with program)
RenderTargetState fRenderTargetState;
diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
index c724ab9..49b73b5 100644
--- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp
+++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
@@ -29,7 +29,8 @@
#define GL_CALL(X) GR_GL_CALL(this->gpu()->glInterface(), X)
#define GL_CALL_RET(R, X) GR_GL_CALL_RET(this->gpu()->glInterface(), R, X)
-GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrPrimitiveProcessor& primProc,
+GrGLProgram* GrGLProgramBuilder::CreateProgram(GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
const GrPipeline& pipeline,
GrProgramDesc* desc,
@@ -41,7 +42,8 @@
// create a builder. This will be handed off to effects so they can use it to add
// uniforms, varyings, textures, etc
- GrGLProgramBuilder builder(gpu, pipeline, primProc, primProcProxies, desc);
+ GrGLProgramBuilder builder(gpu, renderTarget, origin,
+ pipeline, primProc, primProcProxies, desc);
auto persistentCache = gpu->getContext()->contextPriv().getPersistentCache();
if (persistentCache) {
@@ -60,11 +62,13 @@
/////////////////////////////////////////////////////////////////////////////
GrGLProgramBuilder::GrGLProgramBuilder(GrGLGpu* gpu,
+ GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
const GrPipeline& pipeline,
const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
GrProgramDesc* desc)
- : INHERITED(primProc, primProcProxies, pipeline, desc)
+ : INHERITED(renderTarget, origin, primProc, primProcProxies, pipeline, desc)
, fGpu(gpu)
, fVaryingHandler(this)
, fUniformHandler(this)
@@ -99,8 +103,7 @@
*shaderIds->append() = shaderId;
if (inputs.fFlipY) {
GrProgramDesc* d = this->desc();
- d->setSurfaceOriginKey(GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(
- this->pipeline().proxy()->origin()));
+ d->setSurfaceOriginKey(GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(this->origin()));
}
return true;
@@ -227,7 +230,7 @@
const GrPrimitiveProcessor& primProc = this->primitiveProcessor();
SkSL::Program::Settings settings;
settings.fCaps = this->gpu()->glCaps().shaderCaps();
- settings.fFlipY = this->pipeline().proxy()->origin() != kTopLeft_GrSurfaceOrigin;
+ settings.fFlipY = this->origin() != kTopLeft_GrSurfaceOrigin;
settings.fSharpenTextures = this->gpu()->getContext()->contextPriv().sharpenMipmappedTextures();
settings.fFragColorIsInOut = this->fragColorIsInOut();
diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.h b/src/gpu/gl/builders/GrGLProgramBuilder.h
index 9c090b7..5fa23cb 100644
--- a/src/gpu/gl/builders/GrGLProgramBuilder.h
+++ b/src/gpu/gl/builders/GrGLProgramBuilder.h
@@ -35,7 +35,8 @@
* the surface origin.
* @return true if generation was successful.
*/
- static GrGLProgram* CreateProgram(const GrPrimitiveProcessor&,
+ static GrGLProgram* CreateProgram(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
const GrPipeline&,
GrProgramDesc*,
@@ -46,7 +47,8 @@
GrGLGpu* gpu() const { return fGpu; }
private:
- GrGLProgramBuilder(GrGLGpu*, const GrPipeline&, const GrPrimitiveProcessor&,
+ GrGLProgramBuilder(GrGLGpu*, GrRenderTarget*, GrSurfaceOrigin,
+ const GrPipeline&, const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[], GrProgramDesc*);
void addInputVars(const SkSL::Program::Inputs& inputs);
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index 15be881..de892b5 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -9,6 +9,7 @@
#include "GrCaps.h"
#include "GrPipeline.h"
+#include "GrRenderTarget.h"
#include "GrShaderCaps.h"
#include "GrTexturePriv.h"
#include "glsl/GrGLSLFragmentProcessor.h"
@@ -19,7 +20,8 @@
const int GrGLSLProgramBuilder::kVarsPerBlock = 8;
-GrGLSLProgramBuilder::GrGLSLProgramBuilder(const GrPrimitiveProcessor& primProc,
+GrGLSLProgramBuilder::GrGLSLProgramBuilder(GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
const GrPipeline& pipeline,
GrProgramDesc* desc)
@@ -27,6 +29,9 @@
, fGS(this)
, fFS(this)
, fStageIndex(-1)
+ , fConfig(renderTarget->config())
+ , fNumColorSamples(renderTarget->numColorSamples())
+ , fOrigin(origin)
, fPipeline(pipeline)
, fPrimProc(primProc)
, fPrimProcProxies(primProcProxies)
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h
index 37db3d6..4fbee10 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.h
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.h
@@ -36,6 +36,9 @@
const GrPrimitiveProcessor& primitiveProcessor() const { return fPrimProc; }
const GrTextureProxy* const* primProcProxies() const { return fPrimProcProxies; }
+ GrPixelConfig config() const { return fConfig; }
+ int numColorSamples() const { return fNumColorSamples; }
+ GrSurfaceOrigin origin() const { return fOrigin; }
const GrPipeline& pipeline() const { return fPipeline; }
GrProgramDesc* desc() { return fDesc; }
const GrProgramDesc::KeyHeader& header() const { return fDesc->header(); }
@@ -81,6 +84,9 @@
int fStageIndex;
+ const GrPixelConfig fConfig;
+ const int fNumColorSamples;
+ const GrSurfaceOrigin fOrigin;
const GrPipeline& fPipeline;
const GrPrimitiveProcessor& fPrimProc;
const GrTextureProxy* const* fPrimProcProxies;
@@ -95,7 +101,8 @@
int fFragmentProcessorCnt;
protected:
- explicit GrGLSLProgramBuilder(const GrPrimitiveProcessor&,
+ explicit GrGLSLProgramBuilder(GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
const GrPipeline&,
GrProgramDesc*);
diff --git a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm b/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
index 8cdd80c..7df017c 100644
--- a/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
+++ b/src/gpu/mtl/GrMtlGpuCommandBuffer.mm
@@ -119,7 +119,8 @@
}
}
GrProgramDesc desc;
- if (!GrProgramDesc::Build(&desc, primProc, hasPoints, pipeline, fGpu)) {
+ if (!GrProgramDesc::Build(&desc, fRenderTarget->config(), primProc, hasPoints,
+ pipeline, fGpu)) {
return nullptr;
}
@@ -131,7 +132,8 @@
// TODO: use resource provider for pipeline
GrMtlPipelineState* pipelineState =
- GrMtlPipelineStateBuilder::CreatePipelineState(primProc, primProcProxies, pipeline,
+ GrMtlPipelineStateBuilder::CreatePipelineState(fRenderTarget, fOrigin, primProc,
+ primProcProxies, pipeline,
&desc, fGpu);
if (!pipelineState) {
return nullptr;
@@ -139,7 +141,7 @@
// We cannot have an active encoder when we set the pipeline data since it requires its own
// command encoder.
SkASSERT(fActiveRenderCmdEncoder == nil);
- pipelineState->setData(primProc, pipeline, primProcProxies);
+ pipelineState->setData(fRenderTarget, fOrigin, primProc, pipeline, primProcProxies);
return pipelineState;
}
@@ -151,7 +153,6 @@
const GrMesh meshes[],
int meshCount,
const SkRect& bounds) {
- SkASSERT(pipeline.renderTarget() == fRenderTarget);
if (!meshCount) {
return;
}
diff --git a/src/gpu/mtl/GrMtlPipelineState.h b/src/gpu/mtl/GrMtlPipelineState.h
index a6afbdd..bcb62b2 100644
--- a/src/gpu/mtl/GrMtlPipelineState.h
+++ b/src/gpu/mtl/GrMtlPipelineState.h
@@ -47,7 +47,8 @@
id<MTLRenderPipelineState> mtlPipelineState() { return fPipelineState; }
- void setData(const GrPrimitiveProcessor& primPRoc, const GrPipeline& pipeline,
+ void setData(const GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor& primPRoc, const GrPipeline& pipeline,
const GrTextureProxy* const primProcTextures[]);
void bind(id<MTLRenderCommandEncoder>);
@@ -93,7 +94,7 @@
}
};
- void setRenderTargetState(const GrRenderTargetProxy*);
+ void setRenderTargetState(const GrRenderTarget*, GrSurfaceOrigin);
struct SamplerBindings {
id<MTLSamplerState> fSampler;
diff --git a/src/gpu/mtl/GrMtlPipelineState.mm b/src/gpu/mtl/GrMtlPipelineState.mm
index 9eb36d0..e1e4977 100644
--- a/src/gpu/mtl/GrMtlPipelineState.mm
+++ b/src/gpu/mtl/GrMtlPipelineState.mm
@@ -60,12 +60,14 @@
(void) fPixelFormat; // Suppress unused-var warning.
}
-void GrMtlPipelineState::setData(const GrPrimitiveProcessor& primProc,
+void GrMtlPipelineState::setData(const GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrTextureProxy* const primProcTextures[]) {
SkASSERT(primProcTextures || !primProc.numTextureSamplers());
- this->setRenderTargetState(pipeline.proxy());
+ this->setRenderTargetState(renderTarget, origin);
fGeometryProcessor->setData(fDataManager, primProc,
GrFragmentProcessor::CoordTransformIter(pipeline));
fSamplerBindings.reset();
@@ -110,10 +112,9 @@
}
if (pipeline.isStencilEnabled()) {
- GrRenderTarget* rt = pipeline.renderTarget();
- SkASSERT(rt->renderTargetPriv().getStencilAttachment());
+ SkASSERT(renderTarget->renderTargetPriv().getStencilAttachment());
fStencil.reset(*pipeline.getUserStencil(), pipeline.hasStencilClip(),
- rt->renderTargetPriv().numStencilBits());
+ renderTarget->renderTargetPriv().numStencilBits());
}
}
@@ -137,9 +138,7 @@
}
}
-void GrMtlPipelineState::setRenderTargetState(const GrRenderTargetProxy* proxy) {
- GrRenderTarget* rt = proxy->peekRenderTarget();
-
+void GrMtlPipelineState::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrigin origin) {
// Load the RT height uniform if it is needed to y-flip gl_FragCoord.
if (fBuiltinUniformHandles.fRTHeightUni.isValid() &&
fRenderTargetState.fRenderTargetSize.fHeight != rt->height()) {
@@ -150,10 +149,10 @@
SkISize size;
size.set(rt->width(), rt->height());
SkASSERT(fBuiltinUniformHandles.fRTAdjustmentUni.isValid());
- if (fRenderTargetState.fRenderTargetOrigin != proxy->origin() ||
+ if (fRenderTargetState.fRenderTargetOrigin != origin ||
fRenderTargetState.fRenderTargetSize != size) {
fRenderTargetState.fRenderTargetSize = size;
- fRenderTargetState.fRenderTargetOrigin = proxy->origin();
+ fRenderTargetState.fRenderTargetOrigin = origin;
float rtAdjustmentVec[4];
fRenderTargetState.getRTAdjustmentVec(rtAdjustmentVec);
diff --git a/src/gpu/mtl/GrMtlPipelineStateBuilder.h b/src/gpu/mtl/GrMtlPipelineStateBuilder.h
index bfa0486..ce41618 100644
--- a/src/gpu/mtl/GrMtlPipelineStateBuilder.h
+++ b/src/gpu/mtl/GrMtlPipelineStateBuilder.h
@@ -22,14 +22,16 @@
class GrMtlPipelineStateBuilder : public GrGLSLProgramBuilder {
public:
- static GrMtlPipelineState* CreatePipelineState(const GrPrimitiveProcessor&,
+ static GrMtlPipelineState* CreatePipelineState(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
const GrPipeline&,
GrProgramDesc*,
GrMtlGpu*);
private:
- GrMtlPipelineStateBuilder(const GrPrimitiveProcessor&,
+ GrMtlPipelineStateBuilder(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
const GrPipeline&,
GrProgramDesc*, GrMtlGpu*);
diff --git a/src/gpu/mtl/GrMtlPipelineStateBuilder.mm b/src/gpu/mtl/GrMtlPipelineStateBuilder.mm
index add32ce..168a05f 100644
--- a/src/gpu/mtl/GrMtlPipelineStateBuilder.mm
+++ b/src/gpu/mtl/GrMtlPipelineStateBuilder.mm
@@ -17,12 +17,14 @@
#import <simd/simd.h>
GrMtlPipelineState* GrMtlPipelineStateBuilder::CreatePipelineState(
+ GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
const GrPipeline& pipeline,
GrProgramDesc* desc,
GrMtlGpu* gpu) {
- GrMtlPipelineStateBuilder builder(primProc, primProcProxies, pipeline, desc, gpu);
+ GrMtlPipelineStateBuilder builder(renderTarget, origin, primProc, primProcProxies, pipeline,
+ desc, gpu);
if (!builder.emitAndInstallProcs()) {
return nullptr;
@@ -30,12 +32,13 @@
return builder.finalize(primProc, pipeline, desc);
}
-GrMtlPipelineStateBuilder::GrMtlPipelineStateBuilder(const GrPrimitiveProcessor& primProc,
+GrMtlPipelineStateBuilder::GrMtlPipelineStateBuilder(GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
+ const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
const GrPipeline& pipeline,
GrProgramDesc* desc,
GrMtlGpu* gpu)
- : INHERITED(primProc, primProcProxies, pipeline, desc)
+ : INHERITED(renderTarget, origin, primProc, primProcProxies, pipeline, desc)
, fGpu(gpu)
, fUniformHandler(this)
, fVaryingHandler(this) {
@@ -76,8 +79,7 @@
this->addRTHeightUniform(SKSL_RTHEIGHT_NAME);
}
if (inputs.fFlipY) {
- desc->setSurfaceOriginKey(GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(
- this->pipeline().proxy()->origin()));
+ desc->setSurfaceOriginKey(GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(this->origin()));
}
return shaderLibrary;
}
@@ -266,12 +268,12 @@
}
static MTLRenderPipelineColorAttachmentDescriptor* create_color_attachment(
- const GrPipeline& pipeline) {
+ GrPixelConfig config, const GrPipeline& pipeline) {
auto mtlColorAttachment = [[MTLRenderPipelineColorAttachmentDescriptor alloc] init];
// pixel format
MTLPixelFormat format;
- SkAssertResult(GrPixelConfigToMTLFormat(pipeline.renderTarget()->config(), &format));
+ SkAssertResult(GrPixelConfigToMTLFormat(config, &format));
mtlColorAttachment.pixelFormat = format;
// blending
@@ -316,7 +318,7 @@
SkSL::Program::Settings settings;
settings.fCaps = this->caps()->shaderCaps();
- settings.fFlipY = this->pipeline().proxy()->origin() != kTopLeft_GrSurfaceOrigin;
+ settings.fFlipY = this->origin() != kTopLeft_GrSurfaceOrigin;
settings.fSharpenTextures = fGpu->getContext()->contextPriv().sharpenMipmappedTextures();
SkASSERT(!this->fragColorIsInOut());
@@ -341,7 +343,7 @@
pipelineDescriptor.vertexFunction = vertexFunction;
pipelineDescriptor.fragmentFunction = fragmentFunction;
pipelineDescriptor.vertexDescriptor = create_vertex_descriptor(primProc);
- pipelineDescriptor.colorAttachments[0] = create_color_attachment(pipeline);
+ pipelineDescriptor.colorAttachments[0] = create_color_attachment(this->config(), pipeline);
SkASSERT(pipelineDescriptor.vertexFunction);
SkASSERT(pipelineDescriptor.fragmentFunction);
diff --git a/src/gpu/ops/GrAAFillRRectOp.cpp b/src/gpu/ops/GrAAFillRRectOp.cpp
index 351f518..2811fda 100644
--- a/src/gpu/ops/GrAAFillRRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRRectOp.cpp
@@ -460,7 +460,6 @@
SkASSERT(proc.instanceStride() == (size_t)fInstanceStride);
GrPipeline::InitArgs initArgs;
- initArgs.fProxy = flushState->drawOpArgs().fProxy;
initArgs.fCaps = &flushState->caps();
initArgs.fResourceProvider = flushState->resourceProvider();
initArgs.fDstProxy = flushState->drawOpArgs().fDstProxy;
diff --git a/src/gpu/ops/GrDrawPathOp.cpp b/src/gpu/ops/GrDrawPathOp.cpp
index f038a03..8d02106 100644
--- a/src/gpu/ops/GrDrawPathOp.cpp
+++ b/src/gpu/ops/GrDrawPathOp.cpp
@@ -45,7 +45,6 @@
args.fFlags |= GrPipeline::kHWAntialias_Flag;
}
args.fUserStencil = &kCoverPass;
- args.fProxy = state.drawOpArgs().fProxy;
args.fCaps = &state.caps();
args.fResourceProvider = state.resourceProvider();
args.fDstProxy = state.drawOpArgs().fDstProxy;
@@ -83,7 +82,9 @@
GrStencilSettings stencil;
init_stencil_pass_settings(*state, this->fillType(), &stencil);
- state->gpu()->pathRendering()->drawPath(*pathProc, pipeline, fixedDynamicState, stencil,
+ state->gpu()->pathRendering()->drawPath(state->drawOpArgs().renderTarget(),
+ state->drawOpArgs().origin(),
+ *pathProc, pipeline, fixedDynamicState, stencil,
fPath.get());
}
diff --git a/src/gpu/ops/GrMeshDrawOp.cpp b/src/gpu/ops/GrMeshDrawOp.cpp
index abf67e0..d467a6b 100644
--- a/src/gpu/ops/GrMeshDrawOp.cpp
+++ b/src/gpu/ops/GrMeshDrawOp.cpp
@@ -101,7 +101,6 @@
int numPrimProcTextures) {
GrPipeline::InitArgs pipelineArgs;
pipelineArgs.fFlags = pipelineFlags;
- pipelineArgs.fProxy = this->proxy();
pipelineArgs.fDstProxy = this->dstProxy();
pipelineArgs.fCaps = &this->caps();
pipelineArgs.fResourceProvider = this->resourceProvider();
diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
index 8d9da02..ad7fdf5 100644
--- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
+++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.cpp
@@ -126,7 +126,6 @@
GrMeshDrawOp::Target* target) const {
GrPipeline::InitArgs args;
args.fFlags = this->pipelineFlags();
- args.fProxy = target->proxy();
args.fDstProxy = target->dstProxy();
args.fCaps = &target->caps();
args.fResourceProvider = target->resourceProvider();
diff --git a/src/gpu/ops/GrTextureOp.cpp b/src/gpu/ops/GrTextureOp.cpp
index a5f7c58..a31e695 100644
--- a/src/gpu/ops/GrTextureOp.cpp
+++ b/src/gpu/ops/GrTextureOp.cpp
@@ -370,7 +370,6 @@
std::move(fTextureColorSpaceXform));
GrPipeline::InitArgs args;
- args.fProxy = target->proxy();
args.fCaps = &target->caps();
args.fResourceProvider = target->resourceProvider();
args.fFlags = 0;
diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.cpp b/src/gpu/vk/GrVkGpuCommandBuffer.cpp
index 8cc91a8..dff99f2 100644
--- a/src/gpu/vk/GrVkGpuCommandBuffer.cpp
+++ b/src/gpu/vk/GrVkGpuCommandBuffer.cpp
@@ -653,7 +653,8 @@
SkASSERT(SkToBool(primProcProxies) == SkToBool(primProc.numTextureSamplers()));
GrVkPipelineState* pipelineState =
- fGpu->resourceProvider().findOrCreateCompatiblePipelineState(pipeline,
+ fGpu->resourceProvider().findOrCreateCompatiblePipelineState(fRenderTarget, fOrigin,
+ pipeline,
primProc,
primProcProxies,
primitiveType,
@@ -671,7 +672,8 @@
pipelineState->bindPipeline(fGpu, cbInfo.currentCmdBuf());
- pipelineState->setAndBindUniforms(fGpu, primProc, pipeline, cbInfo.currentCmdBuf());
+ pipelineState->setAndBindUniforms(fGpu, fRenderTarget, fOrigin,
+ primProc, pipeline, cbInfo.currentCmdBuf());
// Check whether we need to bind textures between each GrMesh. If not we can bind them all now.
bool setTextures = !(dynamicStateArrays && dynamicStateArrays->fPrimitiveProcessorTextures);
@@ -680,20 +682,20 @@
cbInfo.currentCmdBuf());
}
- GrRenderTarget* rt = pipeline.renderTarget();
-
if (!pipeline.isScissorEnabled()) {
GrVkPipeline::SetDynamicScissorRectState(fGpu, cbInfo.currentCmdBuf(),
- rt, pipeline.proxy()->origin(),
- SkIRect::MakeWH(rt->width(), rt->height()));
+ fRenderTarget, fOrigin,
+ SkIRect::MakeWH(fRenderTarget->width(),
+ fRenderTarget->height()));
} else if (!dynamicStateArrays || !dynamicStateArrays->fScissorRects) {
SkASSERT(fixedDynamicState);
- GrVkPipeline::SetDynamicScissorRectState(fGpu, cbInfo.currentCmdBuf(), rt,
- pipeline.proxy()->origin(),
+ GrVkPipeline::SetDynamicScissorRectState(fGpu, cbInfo.currentCmdBuf(), fRenderTarget,
+ fOrigin,
fixedDynamicState->fScissorRect);
}
- GrVkPipeline::SetDynamicViewportState(fGpu, cbInfo.currentCmdBuf(), rt);
- GrVkPipeline::SetDynamicBlendConstantState(fGpu, cbInfo.currentCmdBuf(), rt->config(),
+ GrVkPipeline::SetDynamicViewportState(fGpu, cbInfo.currentCmdBuf(), fRenderTarget);
+ GrVkPipeline::SetDynamicBlendConstantState(fGpu, cbInfo.currentCmdBuf(),
+ fRenderTarget->config(),
pipeline.getXferProcessor());
return pipelineState;
@@ -706,8 +708,6 @@
const GrMesh meshes[],
int meshCount,
const SkRect& bounds) {
- SkASSERT(pipeline.renderTarget() == fRenderTarget);
-
if (!meshCount) {
return;
}
@@ -782,7 +782,7 @@
if (dynamicScissor) {
GrVkPipeline::SetDynamicScissorRectState(fGpu, cbInfo.currentCmdBuf(), fRenderTarget,
- pipeline.proxy()->origin(),
+ fOrigin,
dynamicStateArrays->fScissorRects[i]);
}
if (dynamicTextures) {
diff --git a/src/gpu/vk/GrVkPipeline.cpp b/src/gpu/vk/GrVkPipeline.cpp
index 90d5e44..d7da2e7 100644
--- a/src/gpu/vk/GrVkPipeline.cpp
+++ b/src/gpu/vk/GrVkPipeline.cpp
@@ -276,7 +276,8 @@
SkASSERT(viewportInfo->viewportCount == viewportInfo->scissorCount);
}
-static void setup_multisample_state(const GrPrimitiveProcessor& primProc,
+static void setup_multisample_state(int numColorSamples,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrCaps* caps,
VkPipelineMultisampleStateCreateInfo* multisampleInfo) {
@@ -284,8 +285,7 @@
multisampleInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
multisampleInfo->pNext = nullptr;
multisampleInfo->flags = 0;
- int numSamples = pipeline.proxy()->numColorSamples();
- SkAssertResult(GrSampleCountToVkSampleCount(numSamples,
+ SkAssertResult(GrSampleCountToVkSampleCount(numColorSamples,
&multisampleInfo->rasterizationSamples));
multisampleInfo->sampleShadingEnable = VK_FALSE;
multisampleInfo->minSampleShading = 0.0f;
@@ -496,7 +496,8 @@
dynamicInfo->pDynamicStates = dynamicStates;
}
-GrVkPipeline* GrVkPipeline::Create(GrVkGpu* gpu, const GrPrimitiveProcessor& primProc,
+GrVkPipeline* GrVkPipeline::Create(GrVkGpu* gpu, int numColorSamples,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline, const GrStencilSettings& stencil,
VkPipelineShaderStageCreateInfo* shaderStageInfo,
int shaderStageCount, GrPrimitiveType primitiveType,
@@ -520,7 +521,7 @@
setup_viewport_scissor_state(&viewportInfo);
VkPipelineMultisampleStateCreateInfo multisampleInfo;
- setup_multisample_state(primProc, pipeline, gpu->caps(), &multisampleInfo);
+ setup_multisample_state(numColorSamples, primProc, pipeline, gpu->caps(), &multisampleInfo);
// We will only have one color attachment per pipeline.
VkPipelineColorBlendAttachmentState attachmentStates[1];
diff --git a/src/gpu/vk/GrVkPipeline.h b/src/gpu/vk/GrVkPipeline.h
index e02fd7c..b00dd4b 100644
--- a/src/gpu/vk/GrVkPipeline.h
+++ b/src/gpu/vk/GrVkPipeline.h
@@ -24,8 +24,9 @@
class GrVkPipeline : public GrVkResource {
public:
- static GrVkPipeline* Create(GrVkGpu* gpu,
- const GrPrimitiveProcessor& primProc,
+ static GrVkPipeline* Create(GrVkGpu*,
+ int numColorSamples,
+ const GrPrimitiveProcessor&,
const GrPipeline& pipeline,
const GrStencilSettings&,
VkPipelineShaderStageCreateInfo* shaderStageInfo,
diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp
index c639377..e705e52 100644
--- a/src/gpu/vk/GrVkPipelineState.cpp
+++ b/src/gpu/vk/GrVkPipelineState.cpp
@@ -140,10 +140,12 @@
}
void GrVkPipelineState::setAndBindUniforms(GrVkGpu* gpu,
+ const GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
GrVkCommandBuffer* commandBuffer) {
- this->setRenderTargetState(pipeline.proxy());
+ this->setRenderTargetState(renderTarget, origin);
fGeometryProcessor->setData(fDataManager, primProc,
GrFragmentProcessor::CoordTransformIter(pipeline));
@@ -351,8 +353,7 @@
}
}
-void GrVkPipelineState::setRenderTargetState(const GrRenderTargetProxy* proxy) {
- GrRenderTarget* rt = proxy->peekRenderTarget();
+void GrVkPipelineState::setRenderTargetState(const GrRenderTarget* rt, GrSurfaceOrigin origin) {
// Load the RT height uniform if it is needed to y-flip gl_FragCoord.
if (fBuiltinUniformHandles.fRTHeightUni.isValid() &&
@@ -364,10 +365,10 @@
SkISize size;
size.set(rt->width(), rt->height());
SkASSERT(fBuiltinUniformHandles.fRTAdjustmentUni.isValid());
- if (fRenderTargetState.fRenderTargetOrigin != proxy->origin() ||
+ if (fRenderTargetState.fRenderTargetOrigin != origin ||
fRenderTargetState.fRenderTargetSize != size) {
fRenderTargetState.fRenderTargetSize = size;
- fRenderTargetState.fRenderTargetOrigin = proxy->origin();
+ fRenderTargetState.fRenderTargetOrigin = origin;
float rtAdjustmentVec[4];
fRenderTargetState.getRTAdjustmentVec(rtAdjustmentVec);
diff --git a/src/gpu/vk/GrVkPipelineState.h b/src/gpu/vk/GrVkPipelineState.h
index 297209e..0d9f871 100644
--- a/src/gpu/vk/GrVkPipelineState.h
+++ b/src/gpu/vk/GrVkPipelineState.h
@@ -56,8 +56,8 @@
~GrVkPipelineState();
- void setAndBindUniforms(GrVkGpu*, const GrPrimitiveProcessor&, const GrPipeline&,
- GrVkCommandBuffer*);
+ void setAndBindUniforms(GrVkGpu*, const GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&, const GrPipeline&, GrVkCommandBuffer*);
/**
* This must be called after setAndBindUniforms() since that function invalidates texture
* bindings.
@@ -114,7 +114,7 @@
};
// Helper for setData() that sets the view matrix and loads the render target height uniform
- void setRenderTargetState(const GrRenderTargetProxy*);
+ void setRenderTargetState(const GrRenderTarget*, GrSurfaceOrigin);
// GrVkResources
GrVkPipeline* fPipeline;
diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.cpp b/src/gpu/vk/GrVkPipelineStateBuilder.cpp
index 6219277..c3d8fe3 100644
--- a/src/gpu/vk/GrVkPipelineStateBuilder.cpp
+++ b/src/gpu/vk/GrVkPipelineStateBuilder.cpp
@@ -19,6 +19,7 @@
GrVkPipelineState* GrVkPipelineStateBuilder::CreatePipelineState(
GrVkGpu* gpu,
+ GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
const GrPipeline& pipeline,
@@ -28,7 +29,8 @@
VkRenderPass compatibleRenderPass) {
// create a builder. This will be handed off to effects so they can use it to add
// uniforms, varyings, textures, etc
- GrVkPipelineStateBuilder builder(gpu, pipeline, primProc, primProcProxies, desc);
+ GrVkPipelineStateBuilder builder(gpu, renderTarget, origin, pipeline, primProc,
+ primProcProxies, desc);
if (!builder.emitAndInstallProcs()) {
return nullptr;
@@ -38,11 +40,13 @@
}
GrVkPipelineStateBuilder::GrVkPipelineStateBuilder(GrVkGpu* gpu,
+ GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
const GrPipeline& pipeline,
const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
GrProgramDesc* desc)
- : INHERITED(primProc, primProcProxies, pipeline, desc)
+ : INHERITED(renderTarget, origin, primProc, primProcProxies, pipeline, desc)
, fGpu(gpu)
, fVaryingHandler(this)
, fUniformHandler(this) {}
@@ -84,7 +88,7 @@
}
if (outInputs->fFlipY) {
desc->setSurfaceOriginKey(GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(
- this->pipeline().proxy()->origin()));
+ this->origin()));
}
return true;
}
@@ -271,7 +275,7 @@
VkPipelineShaderStageCreateInfo shaderStageInfo[3];
SkSL::Program::Settings settings;
settings.fCaps = this->caps()->shaderCaps();
- settings.fFlipY = this->pipeline().proxy()->origin() != kTopLeft_GrSurfaceOrigin;
+ settings.fFlipY = this->origin() != kTopLeft_GrSurfaceOrigin;
settings.fSharpenTextures = this->gpu()->getContext()->contextPriv().sharpenMipmappedTextures();
SkASSERT(!this->fragColorIsInOut());
@@ -326,7 +330,8 @@
this->storeShadersInCache(vert, vertInputs, frag, fragInputs, geom, geomInputs);
}
}
- GrVkPipeline* pipeline = resourceProvider.createPipeline(fPrimProc,
+ GrVkPipeline* pipeline = resourceProvider.createPipeline(this->numColorSamples(),
+ fPrimProc,
fPipeline,
stencil,
shaderStageInfo,
@@ -386,13 +391,14 @@
}
bool GrVkPipelineStateBuilder::Desc::Build(Desc* desc,
+ GrRenderTarget* renderTarget,
const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrStencilSettings& stencil,
GrPrimitiveType primitiveType,
GrVkGpu* gpu) {
- if (!INHERITED::Build(desc, primProc, primitiveType == GrPrimitiveType::kPoints, pipeline,
- gpu)) {
+ if (!INHERITED::Build(desc, renderTarget->config(), primProc,
+ primitiveType == GrPrimitiveType::kPoints, pipeline, gpu)) {
return false;
}
@@ -403,7 +409,7 @@
SkASSERT(0 == (keyLength % 4));
desc->fShaderKeyLength = SkToU32(keyLength);
- GrVkRenderTarget* vkRT = (GrVkRenderTarget*)pipeline.renderTarget();
+ GrVkRenderTarget* vkRT = (GrVkRenderTarget*)renderTarget;
vkRT->simpleRenderPass()->genKey(&b);
stencil.genKey(&b);
diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.h b/src/gpu/vk/GrVkPipelineStateBuilder.h
index 7351789..355d62c 100644
--- a/src/gpu/vk/GrVkPipelineStateBuilder.h
+++ b/src/gpu/vk/GrVkPipelineStateBuilder.h
@@ -38,6 +38,7 @@
class Desc : public GrProgramDesc {
public:
static bool Build(Desc*,
+ GrRenderTarget*,
const GrPrimitiveProcessor&,
const GrPipeline&,
const GrStencilSettings&,
@@ -61,6 +62,7 @@
* @return true if generation was successful.
*/
static GrVkPipelineState* CreatePipelineState(GrVkGpu*,
+ GrRenderTarget*, GrSurfaceOrigin,
const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
const GrPipeline&,
@@ -77,7 +79,7 @@
void finalizeFragmentSecondaryColor(GrShaderVar& outputColor) override;
private:
- GrVkPipelineStateBuilder(GrVkGpu*,
+ GrVkPipelineStateBuilder(GrVkGpu*, GrRenderTarget*, GrSurfaceOrigin,
const GrPipeline&,
const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
diff --git a/src/gpu/vk/GrVkPipelineStateCache.cpp b/src/gpu/vk/GrVkPipelineStateCache.cpp
index d2fd352..fff410e 100644
--- a/src/gpu/vk/GrVkPipelineStateCache.cpp
+++ b/src/gpu/vk/GrVkPipelineStateCache.cpp
@@ -75,6 +75,8 @@
}
GrVkPipelineState* GrVkResourceProvider::PipelineStateCache::refPipelineState(
+ GrRenderTarget* renderTarget,
+ GrSurfaceOrigin origin,
const GrPrimitiveProcessor& primProc,
const GrTextureProxy* const primProcProxies[],
const GrPipeline& pipeline,
@@ -85,17 +87,16 @@
#endif
GrStencilSettings stencil;
if (pipeline.isStencilEnabled()) {
- GrRenderTarget* rt = pipeline.renderTarget();
// TODO: attach stencil and create settings during render target flush.
- SkASSERT(rt->renderTargetPriv().getStencilAttachment());
+ SkASSERT(renderTarget->renderTargetPriv().getStencilAttachment());
stencil.reset(*pipeline.getUserStencil(), pipeline.hasStencilClip(),
- rt->renderTargetPriv().numStencilBits());
+ renderTarget->renderTargetPriv().numStencilBits());
}
// Get GrVkProgramDesc
GrVkPipelineStateBuilder::Desc desc;
- if (!GrVkPipelineStateBuilder::Desc::Build(&desc, primProc, pipeline, stencil, primitiveType,
- fGpu)) {
+ if (!GrVkPipelineStateBuilder::Desc::Build(&desc, renderTarget, primProc, pipeline, stencil,
+ primitiveType, fGpu)) {
GrCapsDebugf(fGpu->caps(), "Failed to build vk program descriptor!\n");
return nullptr;
}
@@ -103,7 +104,6 @@
std::unique_ptr<Entry>* entry = fMap.find(desc);
if (!entry) {
// Didn't find an origin-independent version, check with the specific origin
- GrSurfaceOrigin origin = pipeline.proxy()->origin();
desc.setSurfaceOriginKey(GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(origin));
entry = fMap.find(desc);
}
@@ -112,8 +112,8 @@
++fCacheMisses;
#endif
GrVkPipelineState* pipelineState(GrVkPipelineStateBuilder::CreatePipelineState(
- fGpu, primProc, primProcProxies, pipeline, stencil, primitiveType, &desc,
- compatibleRenderPass));
+ fGpu, renderTarget, origin, primProc, primProcProxies, pipeline, stencil,
+ primitiveType, &desc, compatibleRenderPass));
if (nullptr == pipelineState) {
return nullptr;
}
diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp
index 74e2491..042cbc9 100644
--- a/src/gpu/vk/GrVkResourceProvider.cpp
+++ b/src/gpu/vk/GrVkResourceProvider.cpp
@@ -92,7 +92,8 @@
fUniformDSHandle = GrVkDescriptorSetManager::Handle(0);
}
-GrVkPipeline* GrVkResourceProvider::createPipeline(const GrPrimitiveProcessor& primProc,
+GrVkPipeline* GrVkResourceProvider::createPipeline(int numColorSamples,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrStencilSettings& stencil,
VkPipelineShaderStageCreateInfo* shaderStageInfo,
@@ -100,7 +101,7 @@
GrPrimitiveType primitiveType,
VkRenderPass compatibleRenderPass,
VkPipelineLayout layout) {
- return GrVkPipeline::Create(fGpu, primProc, pipeline, stencil, shaderStageInfo,
+ return GrVkPipeline::Create(fGpu, numColorSamples, primProc, pipeline, stencil, shaderStageInfo,
shaderStageCount, primitiveType, compatibleRenderPass, layout,
this->pipelineCache());
}
@@ -254,11 +255,12 @@
}
GrVkPipelineState* GrVkResourceProvider::findOrCreateCompatiblePipelineState(
+ GrRenderTarget* renderTarget, GrSurfaceOrigin origin,
const GrPipeline& pipeline, const GrPrimitiveProcessor& proc,
const GrTextureProxy* const primProcProxies[], GrPrimitiveType primitiveType,
VkRenderPass compatibleRenderPass) {
- return fPipelineStateCache->refPipelineState(proc, primProcProxies, pipeline, primitiveType,
- compatibleRenderPass);
+ return fPipelineStateCache->refPipelineState(renderTarget, origin, proc, primProcProxies,
+ pipeline, primitiveType, compatibleRenderPass);
}
void GrVkResourceProvider::getSamplerDescriptorSetHandle(VkDescriptorType type,
diff --git a/src/gpu/vk/GrVkResourceProvider.h b/src/gpu/vk/GrVkResourceProvider.h
index 97f11b1..57481f9 100644
--- a/src/gpu/vk/GrVkResourceProvider.h
+++ b/src/gpu/vk/GrVkResourceProvider.h
@@ -44,7 +44,8 @@
// Set up any initial vk objects
void init();
- GrVkPipeline* createPipeline(const GrPrimitiveProcessor& primProc,
+ GrVkPipeline* createPipeline(int numColorSamples,
+ const GrPrimitiveProcessor& primProc,
const GrPipeline& pipeline,
const GrStencilSettings& stencil,
VkPipelineShaderStageCreateInfo* shaderStageInfo,
@@ -110,6 +111,7 @@
const GrVkYcbcrConversionInfo& ycbcrInfo);
GrVkPipelineState* findOrCreateCompatiblePipelineState(
+ GrRenderTarget*, GrSurfaceOrigin,
const GrPipeline&,
const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
@@ -188,7 +190,8 @@
void abandon();
void release();
- GrVkPipelineState* refPipelineState(const GrPrimitiveProcessor&,
+ GrVkPipelineState* refPipelineState(GrRenderTarget*, GrSurfaceOrigin,
+ const GrPrimitiveProcessor&,
const GrTextureProxy* const primProcProxies[],
const GrPipeline&,
GrPrimitiveType,