Revert "Move GrGeometryProcessor's textures out of classes and into"
This reverts commit af87483873f0b370b90ebe956301a13cc8662cbe.
Revert "GrGeometryProcessor derives from GrNonAtomicRef not GrProgramElement."
This reverts commit 607be37e3d4ddbe2163c200d6e13bcee981f6bf7.
Revert "Store GrMeshDrawOps' meshes in GrOpFlushState's arena."
This reverts commit b948572c7862214fe2e1fa6cdfcab4fc7b1666ac.
Revert "Remove multitexturing support from GrTextureOp."
This reverts commit 986f64c601f3ed99f84f0c392d1a42e298f6d618.
Revert "Make result of GrOp::combineIfPossible be an enum."
This reverts commit 641ac7daa81cbfca06b310803fb1a607d0fc2b32.
Bug: b/112244393
Change-Id: I579491a3f2f2f2093f1e2a6141fa1e4cc7b760a4
Reviewed-on: https://skia-review.googlesource.com/145646
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
index ee38f43..32da45c 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
+++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
@@ -86,12 +86,13 @@
fColor = btgp.color();
}
- const SkISize& atlasSize = btgp.atlasSize();
- SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight));
+ SkASSERT(btgp.numTextureSamplers() >= 1);
+ GrTexture* atlas = btgp.textureSampler(0).peekTexture();
+ SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()));
- if (fAtlasSize != atlasSize) {
- pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight);
- fAtlasSize = atlasSize;
+ if (fAtlasSize.fWidth != atlas->width() || fAtlasSize.fHeight != atlas->height()) {
+ pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlas->width(), 1.0f / atlas->height());
+ fAtlasSize.set(atlas->width(), atlas->height());
}
this->setTransformDataHelper(btgp.localMatrix(), pdman, &transformIter);
}
@@ -148,13 +149,9 @@
this->setVertexAttributeCnt(cnt);
- if (numActiveProxies) {
- fAtlasSize = proxies[0]->isize();
- }
for (int i = 0; i < numActiveProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
this->setTextureSamplerCnt(numActiveProxies);
}
@@ -168,16 +165,11 @@
const GrSamplerState& params) {
SkASSERT(numActiveProxies <= kMaxTextures);
- if (!fTextureSamplers[0].isInitialized()) {
- fAtlasSize = proxies[0]->isize();
- }
-
for (int i = 0; i < numActiveProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
if (!fTextureSamplers[i].isInitialized()) {
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
}
this->setTextureSamplerCnt(numActiveProxies);
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.h b/src/gpu/effects/GrBitmapTextGeoProc.h
index d2d530e..1bc0620 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.h
+++ b/src/gpu/effects/GrBitmapTextGeoProc.h
@@ -21,7 +21,6 @@
*/
class GrBitmapTextGeoProc : public GrGeometryProcessor {
public:
- static constexpr int kMaxTextures = 4;
static sk_sp<GrGeometryProcessor> Make(GrColor color,
const sk_sp<GrTextureProxy>* proxies,
@@ -45,7 +44,6 @@
bool hasVertexColor() const { return fInColor.isInitialized(); }
const SkMatrix& localMatrix() const { return fLocalMatrix; }
bool usesW() const { return fUsesW; }
- const SkISize& atlasSize() const { return fAtlasSize; }
void addNewProxies(const sk_sp<GrTextureProxy>*, int numActiveProxies, const GrSamplerState&);
@@ -54,6 +52,8 @@
GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps& caps) const override;
private:
+ static constexpr int kMaxTextures = 4;
+
GrBitmapTextGeoProc(GrColor, const sk_sp<GrTextureProxy>* proxies, int numProxies,
const GrSamplerState& params, GrMaskFormat format,
const SkMatrix& localMatrix, bool usesW);
@@ -64,7 +64,6 @@
GrColor fColor;
SkMatrix fLocalMatrix;
bool fUsesW;
- SkISize fAtlasSize; // size for all textures used with fTextureSamplers[].
TextureSampler fTextureSamplers[kMaxTextures];
Attribute fInPosition;
Attribute fInColor;
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp
index 099cc7e..b9e5681 100644
--- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp
+++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp
@@ -172,13 +172,15 @@
}
#endif
- const SkISize& atlasSize = dfa8gp.atlasSize();
- SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight));
+ SkASSERT(dfa8gp.numTextureSamplers() >= 1);
+ GrTexture* atlas = dfa8gp.textureSampler(0).peekTexture();
+ SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()));
- if (fAtlasSize != atlasSize) {
- pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight);
- fAtlasSize = atlasSize;
+ if (fAtlasSize.fWidth != atlas->width() || fAtlasSize.fHeight != atlas->height()) {
+ fAtlasSize.set(atlas->width(), atlas->height());
+ pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlas->width(), 1.0f / atlas->height());
}
+
this->setTransformDataHelper(dfa8gp.localMatrix(), pdman, &transformIter);
}
@@ -232,13 +234,9 @@
}
this->setVertexAttributeCnt(3);
- if (numProxies) {
- fAtlasSize = proxies[0]->isize();
- }
for (int i = 0; i < numProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
this->setTextureSamplerCnt(numProxies);
}
@@ -248,15 +246,10 @@
const GrSamplerState& params) {
SkASSERT(numProxies <= kMaxTextures);
- if (!fTextureSamplers[0].isInitialized()) {
- fAtlasSize = proxies[0]->isize();
- }
-
for (int i = 0; i < numProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
if (!fTextureSamplers[i].isInitialized()) {
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
}
this->setTextureSamplerCnt(numProxies);
@@ -467,11 +460,13 @@
pdman.setMatrix3f(fMatrixUniform, matrix);
}
- const SkISize& atlasSize = dfpgp.atlasSize();
- SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight));
- if (fAtlasSize != atlasSize) {
- pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight);
- fAtlasSize = atlasSize;
+ SkASSERT(dfpgp.numTextureSamplers() >= 1);
+ GrTexture* atlas = dfpgp.textureSampler(0).peekTexture();
+ SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()));
+
+ if (fAtlasSize.fWidth != atlas->width() || fAtlasSize.fHeight != atlas->height()) {
+ fAtlasSize.set(atlas->width(), atlas->height());
+ pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlas->width(), 1.0f / atlas->height());
}
if (dfpgp.matrix().hasPerspective()) {
@@ -520,15 +515,9 @@
SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
this->setVertexAttributeCnt(3);
-
- if (numProxies) {
- fAtlasSize = proxies[0]->isize();
- }
-
for (int i = 0; i < numProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
this->setTextureSamplerCnt(numProxies);
}
@@ -538,16 +527,11 @@
const GrSamplerState& params) {
SkASSERT(numProxies <= kMaxTextures);
- if (!fTextureSamplers[0].isInitialized()) {
- fAtlasSize = proxies[0]->isize();
- }
-
for (int i = 0; i < numProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
if (!fTextureSamplers[i].isInitialized()) {
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
}
this->setTextureSamplerCnt(numProxies);
@@ -789,11 +773,13 @@
fDistanceAdjust = wa;
}
- const SkISize& atlasSize = dflcd.atlasSize();
- SkASSERT(SkIsPow2(atlasSize.fWidth) && SkIsPow2(atlasSize.fHeight));
- if (fAtlasSize != atlasSize) {
- pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlasSize.fWidth, 1.0f / atlasSize.fHeight);
- fAtlasSize = atlasSize;
+ SkASSERT(dflcd.numTextureSamplers() >= 1);
+ GrTexture* atlas = dflcd.textureSampler(0).peekTexture();
+ SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()));
+
+ if (fAtlasSize.fWidth != atlas->width() || fAtlasSize.fHeight != atlas->height()) {
+ fAtlasSize.set(atlas->width(), atlas->height());
+ pdman.set2f(fAtlasSizeInvUniform, 1.0f / atlas->width(), 1.0f / atlas->height());
}
this->setTransformDataHelper(dflcd.localMatrix(), pdman, &transformIter);
}
@@ -843,14 +829,9 @@
}
this->setVertexAttributeCnt(3);
- if (numProxies) {
- fAtlasSize = proxies[0]->isize();
- }
-
for (int i = 0; i < numProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
this->setTextureSamplerCnt(numProxies);
}
@@ -860,16 +841,11 @@
const GrSamplerState& params) {
SkASSERT(numProxies <= kMaxTextures);
- if (!fTextureSamplers[0].isInitialized()) {
- fAtlasSize = proxies[0]->isize();
- }
-
for (int i = 0; i < numProxies; ++i) {
SkASSERT(proxies[i]);
- SkASSERT(proxies[i]->isize() == fAtlasSize);
if (!fTextureSamplers[i].isInitialized()) {
- fTextureSamplers[i].reset(proxies[i]->textureType(), proxies[i]->config(), params);
+ fTextureSamplers[i].reset(std::move(proxies[i]), params);
}
}
this->setTextureSamplerCnt(numProxies);
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.h b/src/gpu/effects/GrDistanceFieldGeoProc.h
index fcd98aa..a0fb9d7 100644
--- a/src/gpu/effects/GrDistanceFieldGeoProc.h
+++ b/src/gpu/effects/GrDistanceFieldGeoProc.h
@@ -53,8 +53,6 @@
*/
class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor {
public:
- static constexpr int kMaxTextures = 4;
-
/** The local matrix should be identity if local coords are not required by the GrPipeline. */
#ifdef SK_GAMMA_APPLY_TO_A8
static sk_sp<GrGeometryProcessor> Make(const sk_sp<GrTextureProxy>* proxies,
@@ -86,7 +84,6 @@
float getDistanceAdjust() const { return fDistanceAdjust; }
#endif
uint32_t getFlags() const { return fFlags; }
- const SkISize& atlasSize() const { return fAtlasSize; }
void addNewProxies(const sk_sp<GrTextureProxy>* proxies, int numProxies, const GrSamplerState&);
@@ -109,8 +106,9 @@
const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; }
+ static constexpr int kMaxTextures = 4;
+
TextureSampler fTextureSamplers[kMaxTextures];
- SkISize fAtlasSize; // size for all textures used with fTextureSamplers[].
SkMatrix fLocalMatrix;
Attribute fInPosition;
uint32_t fFlags;
@@ -134,7 +132,6 @@
*/
class GrDistanceFieldPathGeoProc : public GrGeometryProcessor {
public:
- static constexpr int kMaxTextures = 4;
/** The local matrix should be identity if local coords are not required by the GrPipeline. */
static sk_sp<GrGeometryProcessor> Make(const SkMatrix& matrix,
@@ -154,7 +151,6 @@
const Attribute& inTextureCoords() const { return kInTextureCoords; }
const SkMatrix& matrix() const { return fMatrix; }
uint32_t getFlags() const { return fFlags; }
- const SkISize& atlasSize() const { return fAtlasSize; }
void addNewProxies(const sk_sp<GrTextureProxy>*, int numActiveProxies, const GrSamplerState&);
@@ -163,6 +159,8 @@
GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
private:
+ static constexpr int kMaxTextures = 4;
+
GrDistanceFieldPathGeoProc(const SkMatrix& matrix,
const sk_sp<GrTextureProxy>* proxies,
int numActiveProxies,
@@ -171,9 +169,8 @@
const Attribute& onVertexAttribute(int i) const override;
const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; }
- SkMatrix fMatrix; // view matrix if perspective, local matrix otherwise
+ SkMatrix fMatrix; // view matrix if perspective, local matrix otherwise
TextureSampler fTextureSamplers[kMaxTextures];
- SkISize fAtlasSize; // size for all textures used with fTextureSamplers[].
uint32_t fFlags;
static constexpr Attribute kInPosition = {"inPosition", kFloat2_GrVertexAttribType};
static constexpr Attribute kInColor = {"inColor", kUByte4_norm_GrVertexAttribType};
@@ -192,8 +189,6 @@
*/
class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor {
public:
- static constexpr int kMaxTextures = 4;
-
struct DistanceAdjust {
SkScalar fR, fG, fB;
static DistanceAdjust Make(SkScalar r, SkScalar g, SkScalar b) {
@@ -230,7 +225,6 @@
DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; }
uint32_t getFlags() const { return fFlags; }
const SkMatrix& localMatrix() const { return fLocalMatrix; }
- const SkISize& atlasSize() const { return fAtlasSize; }
void addNewProxies(const sk_sp<GrTextureProxy>*, int numActiveProxies, const GrSamplerState&);
@@ -246,8 +240,9 @@
const Attribute& onVertexAttribute(int) const override;
const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; }
+ static constexpr int kMaxTextures = 4;
+
TextureSampler fTextureSamplers[kMaxTextures];
- SkISize fAtlasSize; // size for all textures used with fTextureSamplers[].
const SkMatrix fLocalMatrix;
DistanceAdjust fDistanceAdjust;
Attribute fInPosition;