Add "meshCount" to GrProgramInfo
This improves the encapsulation of the GrProgramInfo class.
Bug: skia:9455
Change-Id: Ic241ba4a2c2edea3e774522065371e5ed8cc2da3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/247438
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/GrProgramInfo.h b/src/gpu/GrProgramInfo.h
index 63f5e1a..671147a 100644
--- a/src/gpu/GrProgramInfo.h
+++ b/src/gpu/GrProgramInfo.h
@@ -12,29 +12,32 @@
#include "src/gpu/GrPipeline.h"
#include "src/gpu/GrPrimitiveProcessor.h"
+class GrMesh;
+
class GrProgramInfo {
public:
- // TODO: it seems like this object should also get the number of copies in
- // dynamicStateArrays. If that were true a portion of checkAllInstantiated could be moved
- // to validate.
GrProgramInfo(int numSamples,
GrSurfaceOrigin origin,
const GrPipeline& pipeline,
const GrPrimitiveProcessor& primProc,
const GrPipeline::FixedDynamicState* fixedDynamicState,
- const GrPipeline::DynamicStateArrays* dynamicStateArrays)
+ const GrPipeline::DynamicStateArrays* dynamicStateArrays,
+ int numDynamicStateArrays)
: fNumSamples(numSamples)
, fOrigin(origin)
, fPipeline(pipeline)
, fPrimProc(primProc)
, fFixedDynamicState(fixedDynamicState)
- , fDynamicStateArrays(dynamicStateArrays) {
+ , fDynamicStateArrays(dynamicStateArrays)
+ , fNumDynamicStateArrays(numDynamicStateArrays) {
fRequestedFeatures = fPrimProc.requestedFeatures();
for (int i = 0; i < fPipeline.numFragmentProcessors(); ++i) {
fRequestedFeatures |= fPipeline.getFragmentProcessor(i).requestedFeatures();
}
fRequestedFeatures |= fPipeline.getXferProcessor().requestedFeatures();
+
SkDEBUGCODE(this->validate();)
+ (void) fNumDynamicStateArrays; // touch this to quiet unused member warnings
}
GrProcessor::CustomFeatures requestedFeatures() const { return fRequestedFeatures; }
@@ -44,7 +47,6 @@
const GrPipeline& pipeline() const { return fPipeline; }
const GrPrimitiveProcessor& primProc() const { return fPrimProc; }
const GrPipeline::FixedDynamicState* fixedDynamicState() const { return fFixedDynamicState; }
- const GrPipeline::DynamicStateArrays* dynamicStateArrays() const { return fDynamicStateArrays; }
// TODO: can this be removed?
const GrTextureProxy* const* primProcProxies() const {
@@ -84,6 +86,7 @@
const GrTextureProxy* const* dynamicPrimProcTextures(int i) const {
SkASSERT(this->hasDynamicPrimProcTextures());
+ SkASSERT(i < fNumDynamicStateArrays);
return fDynamicStateArrays->fPrimitiveProcessorTextures +
i * fPrimProc.numTextureSamplers();
@@ -101,8 +104,9 @@
#ifdef SK_DEBUG
void validate() const;
- void checkAllInstantiated(int meshCount) const;
- void checkMSAAAndMIPSAreResolved(int meshCount) const;
+ void checkAllInstantiated() const;
+ void checkMSAAAndMIPSAreResolved() const;
+ void compatibleWithMeshes(const GrMesh meshes[], int meshCount) const;
bool isNVPR() const {
return fPrimProc.isPathRendering() && !fPrimProc.willUseGeoShader() &&
@@ -117,6 +121,7 @@
const GrPrimitiveProcessor& fPrimProc;
const GrPipeline::FixedDynamicState* fFixedDynamicState;
const GrPipeline::DynamicStateArrays* fDynamicStateArrays;
+ const int fNumDynamicStateArrays;
GrProcessor::CustomFeatures fRequestedFeatures;
};