Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: src/gpu/gl/builders/GrGLProgramBuilder.cpp

Issue 815643005: Move program descriptor and primitive processor off of optstate (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: bug fix Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/builders/GrGLProgramBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/builders/GrGLProgramBuilder.cpp
diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
index c88efac9f0bc379372defb70aff3558ec8f91e0d..e81c079d4a3b2b33398e979f79ad1a83fa020bfe 100644
--- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp
+++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
@@ -24,8 +24,8 @@
class GrGLNvprProgramBuilder : public GrGLProgramBuilder {
public:
- GrGLNvprProgramBuilder(GrGLGpu* gpu, const GrOptDrawState& optState)
- : INHERITED(gpu, optState) {}
+ GrGLNvprProgramBuilder(GrGLGpu* gpu, const DrawArgs& args)
+ : INHERITED(gpu, args) {}
GrGLProgram* createProgram(GrGLuint programID) SK_OVERRIDE {
// this is just for nvpr es, which has separable varyings that are plugged in after
@@ -33,7 +33,8 @@ public:
GrGLPathProcessor* pathProc =
static_cast<GrGLPathProcessor*>(fGeometryProcessor->fGLProc.get());
pathProc->resolveSeparableVaryings(fGpu, programID);
- return SkNEW_ARGS(GrGLNvprProgram, (fGpu, fDesc, fUniformHandles, programID, fUniforms,
+ return SkNEW_ARGS(GrGLNvprProgram, (fGpu, this->desc(), fUniformHandles, programID,
+ fUniforms,
fGeometryProcessor,
fXferProcessor, fFragmentProcessors.get()));
}
@@ -48,10 +49,10 @@ private:
const int GrGLProgramBuilder::kVarsPerBlock = 8;
-GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState, GrGLGpu* gpu) {
+GrGLProgram* GrGLProgramBuilder::CreateProgram(const DrawArgs& args, GrGLGpu* gpu) {
// create a builder. This will be handed off to effects so they can use it to add
// uniforms, varyings, textures, etc
- SkAutoTDelete<GrGLProgramBuilder> builder(CreateProgramBuilder(optState, gpu));
+ SkAutoTDelete<GrGLProgramBuilder> builder(CreateProgramBuilder(args, gpu));
GrGLProgramBuilder* pb = builder.get();
@@ -71,30 +72,29 @@ GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState, G
return pb->finalize();
}
-GrGLProgramBuilder* GrGLProgramBuilder::CreateProgramBuilder(const GrOptDrawState& optState,
+GrGLProgramBuilder* GrGLProgramBuilder::CreateProgramBuilder(const DrawArgs& args,
GrGLGpu* gpu) {
- if (GrGpu::IsPathRenderingDrawType(optState.drawType())) {
+ if (GrGpu::IsPathRenderingDrawType(args.fOptState->drawType())) {
SkASSERT(gpu->glCaps().pathRenderingSupport() &&
- !optState.getPrimitiveProcessor()->willUseGeoShader() &&
- optState.getPrimitiveProcessor()->numAttribs() == 0);
- return SkNEW_ARGS(GrGLNvprProgramBuilder, (gpu, optState));
+ !args.fPrimitiveProcessor->willUseGeoShader() &&
+ args.fPrimitiveProcessor->numAttribs() == 0);
+ return SkNEW_ARGS(GrGLNvprProgramBuilder, (gpu, args));
} else {
- return SkNEW_ARGS(GrGLProgramBuilder, (gpu, optState));
+ return SkNEW_ARGS(GrGLProgramBuilder, (gpu, args));
}
}
/////////////////////////////////////////////////////////////////////////////
-GrGLProgramBuilder::GrGLProgramBuilder(GrGLGpu* gpu, const GrOptDrawState& optState)
+GrGLProgramBuilder::GrGLProgramBuilder(GrGLGpu* gpu, const DrawArgs& args)
: fVS(this)
, fGS(this)
- , fFS(this, optState.programDesc().header().fFragPosKey)
+ , fFS(this, args.fDesc->header().fFragPosKey)
, fOutOfStage(true)
, fStageIndex(-1)
, fGeometryProcessor(NULL)
, fXferProcessor(NULL)
- , fOptState(optState)
- , fDesc(optState.programDesc())
+ , fArgs(args)
, fGpu(gpu)
, fUniforms(kVarsPerBlock) {
}
@@ -106,7 +106,7 @@ void GrGLProgramBuilder::addVarying(const char* name,
if (varying->vsVarying()) {
fVS.addVarying(name, varying);
}
- if (fOptState.getPrimitiveProcessor()->willUseGeoShader()) {
+ if (this->primitiveProcessor().willUseGeoShader()) {
fGS.addVarying(name, varying);
}
if (varying->fsVarying()) {
@@ -193,22 +193,22 @@ void GrGLProgramBuilder::emitAndInstallProcs(GrGLSLExpr4* inputColor, GrGLSLExpr
// First we loop over all of the installed processors and collect coord transforms. These will
// be sent to the GrGLPrimitiveProcessor in its emitCode function
SkSTArray<8, GrGLProcessor::TransformedCoordsArray> outCoords;
- for (int i = 0; i < fOptState.numFragmentStages(); i++) {
- const GrFragmentProcessor* processor = fOptState.getFragmentStage(i).processor();
+ for (int i = 0; i < this->optState().numFragmentStages(); i++) {
+ const GrFragmentProcessor* processor = this->optState().getFragmentStage(i).processor();
SkSTArray<2, const GrCoordTransform*, true>& procCoords = fCoordTransforms.push_back();
for (int t = 0; t < processor->numTransforms(); t++) {
procCoords.push_back(&processor->coordTransform(t));
}
}
- const GrPrimitiveProcessor& primProc = *fOptState.getPrimitiveProcessor();
+ const GrPrimitiveProcessor& primProc = this->primitiveProcessor();
this->emitAndInstallProc(primProc, inputColor, inputCoverage);
fFragmentProcessors.reset(SkNEW(GrGLInstalledFragProcs));
- int numProcs = fOptState.numFragmentStages();
- this->emitAndInstallFragProcs(0, fOptState.numColorStages(), inputColor);
- this->emitAndInstallFragProcs(fOptState.numColorStages(), numProcs, inputCoverage);
- this->emitAndInstallXferProc(*fOptState.getXferProcessor(), *inputColor, *inputCoverage);
+ int numProcs = this->optState().numFragmentStages();
+ this->emitAndInstallFragProcs(0, this->optState().numColorStages(), inputColor);
+ this->emitAndInstallFragProcs(this->optState().numColorStages(), numProcs, inputCoverage);
+ this->emitAndInstallXferProc(*this->optState().getXferProcessor(), *inputColor, *inputCoverage);
}
void GrGLProgramBuilder::emitAndInstallFragProcs(int procOffset,
@@ -216,7 +216,7 @@ void GrGLProgramBuilder::emitAndInstallFragProcs(int procOffset,
GrGLSLExpr4* inOut) {
for (int e = procOffset; e < numProcs; ++e) {
GrGLSLExpr4 output;
- const GrPendingFragmentStage& stage = fOptState.getFragmentStage(e);
+ const GrPendingFragmentStage& stage = this->optState().getFragmentStage(e);
this->emitAndInstallProc(stage, e, *inOut, &output);
*inOut = output;
}
@@ -300,7 +300,7 @@ void GrGLProgramBuilder::emitAndInstallProc(const GrPrimitiveProcessor& gp,
SkASSERT(!fGeometryProcessor);
fGeometryProcessor = SkNEW(GrGLInstalledGeoProc);
- const GrBatchTracker& bt = fOptState.getBatchTracker();
+ const GrBatchTracker& bt = this->batchTracker();
fGeometryProcessor->fGLProc.reset(gp.createGLInstance(bt, fGpu->glCaps()));
SkSTArray<4, GrGLProcessor::TextureSampler> samplers(gp.numTextures());
@@ -396,7 +396,7 @@ GrGLProgram* GrGLProgramBuilder::finalize() {
// Legacy nvpr will not compile with a vertex shader, but newer nvpr requires a dummy vertex
// shader
- bool useNvpr = GrGpu::IsPathRenderingDrawType(fOptState.drawType());
+ bool useNvpr = GrGpu::IsPathRenderingDrawType(this->optState().drawType());
if (!(useNvpr && fGpu->glCaps().nvprSupport() == GrGLCaps::kLegacy_NvprSupport)) {
if (!fVS.compileAndAttachShaders(programID, &shadersToDelete)) {
this->cleanupProgram(programID, shadersToDelete);
@@ -490,7 +490,7 @@ void GrGLProgramBuilder::cleanupShaders(const SkTDArray<GrGLuint>& shaderIDs) {
}
GrGLProgram* GrGLProgramBuilder::createProgram(GrGLuint programID) {
- return SkNEW_ARGS(GrGLProgram, (fGpu, fDesc, fUniformHandles, programID, fUniforms,
+ return SkNEW_ARGS(GrGLProgram, (fGpu, this->desc(), fUniformHandles, programID, fUniforms,
fGeometryProcessor, fXferProcessor, fFragmentProcessors.get()));
}
« no previous file with comments | « src/gpu/gl/builders/GrGLProgramBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698