Add GrProgramInfo to centralize management of program information
This is the first step in moving the marshaling of program information earlier in renderTask processing (i.e., to onPrePrepare).
Change-Id: I91e3baed9a128e845bd32f9dbbacd9b21d852a3d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/244118
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h
index dec6d11..b9bc61b 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.h
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.h
@@ -11,6 +11,7 @@
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrGeometryProcessor.h"
#include "src/gpu/GrProgramDesc.h"
+#include "src/gpu/GrProgramInfo.h"
#include "src/gpu/GrRenderTarget.h"
#include "src/gpu/GrRenderTargetPriv.h"
#include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
@@ -36,8 +37,13 @@
virtual const GrCaps* caps() const = 0;
const GrShaderCaps* shaderCaps() const { return this->caps()->shaderCaps(); }
- const GrPrimitiveProcessor& primitiveProcessor() const { return fPrimProc; }
- const GrTextureProxy* const* primProcProxies() const { return fPrimProcProxies; }
+ int numSamples() const { return fProgramInfo.numSamples(); }
+ GrSurfaceOrigin origin() const { return fProgramInfo.origin(); }
+ const GrPipeline& pipeline() const { return fProgramInfo.pipeline(); }
+ const GrPrimitiveProcessor& primitiveProcessor() const { return fProgramInfo.primProc(); }
+ const GrTextureProxy* const* primProcProxies() const { return fProgramInfo.primProcProxies(); }
+
+ // TODO: stop passing in the renderTarget for just the sampleLocations
int effectiveSampleCnt() const {
SkASSERT(GrProcessor::CustomFeatures::kSampleLocations & header().processorFeatures());
return fRenderTarget->renderTargetPriv().getSampleLocations().count();
@@ -45,10 +51,8 @@
const SkTArray<SkPoint>& getSampleLocations() const {
return fRenderTarget->renderTargetPriv().getSampleLocations();
}
- int numSamples() const { return fNumSamples; }
- GrSurfaceOrigin origin() const { return fOrigin; }
- const GrPipeline& pipeline() const { return fPipeline; }
- GrProgramDesc* desc() { return fDesc; }
+
+ const GrProgramDesc* desc() const { return fDesc; }
const GrProgramDesc::KeyHeader& header() const { return fDesc->header(); }
void appendUniformDecls(GrShaderFlags visibility, SkString*) const;
@@ -95,14 +99,10 @@
int fStageIndex;
- const GrRenderTarget* fRenderTarget;
- const int fNumSamples;
- const GrSurfaceOrigin fOrigin;
- const GrPipeline& fPipeline;
- const GrPrimitiveProcessor& fPrimProc;
- const GrTextureProxy* const* fPrimProcProxies;
+ const GrRenderTarget* fRenderTarget; // TODO: remove this
+ const GrProgramInfo& fProgramInfo;
- GrProgramDesc* fDesc;
+ const GrProgramDesc* fDesc;
GrGLSLBuiltinUniformHandles fUniformHandles;
@@ -112,13 +112,7 @@
int fFragmentProcessorCnt;
protected:
- explicit GrGLSLProgramBuilder(GrRenderTarget* renderTarget,
- int numSamples,
- GrSurfaceOrigin origin,
- const GrPrimitiveProcessor&,
- const GrTextureProxy* const primProcProxies[],
- const GrPipeline&,
- GrProgramDesc*);
+ explicit GrGLSLProgramBuilder(GrRenderTarget*, const GrProgramInfo&, const GrProgramDesc*);
void addFeature(GrShaderFlags shaders, uint32_t featureBit, const char* extensionName);