Set correct coord transform visibility initially rather than update.
Aside from being simpler it also makes the matrix uniforms for
explicitly sampled FPs appear only in the FS and not both VS and FS.
Change-Id: I0f7a4e83b77decacfd0567600dd2d3bc8ce5240f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/278137
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/dawn/GrDawnUniformHandler.cpp b/src/gpu/dawn/GrDawnUniformHandler.cpp
index 71a1613..005a91c 100644
--- a/src/gpu/dawn/GrDawnUniformHandler.cpp
+++ b/src/gpu/dawn/GrDawnUniformHandler.cpp
@@ -227,10 +227,6 @@
return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1);
}
-void GrDawnUniformHandler::updateUniformVisibility(UniformHandle u, uint32_t visibility) {
- fUniforms[u.toIndex()].fVisibility |= visibility;
-}
-
GrGLSLUniformHandler::SamplerHandle GrDawnUniformHandler::addSampler(const GrBackendFormat&,
GrSamplerState,
const GrSwizzle& swizzle,
diff --git a/src/gpu/dawn/GrDawnUniformHandler.h b/src/gpu/dawn/GrDawnUniformHandler.h
index 361dd21..feb44bb 100644
--- a/src/gpu/dawn/GrDawnUniformHandler.h
+++ b/src/gpu/dawn/GrDawnUniformHandler.h
@@ -46,8 +46,6 @@
int arrayCount,
const char** outName) override;
- void updateUniformVisibility(UniformHandle u, uint32_t visibility) override;
-
UniformInfoArray fUniforms;
UniformInfoArray fSamplers;
UniformInfoArray fTextures;
diff --git a/src/gpu/gl/GrGLUniformHandler.h b/src/gpu/gl/GrGLUniformHandler.h
index ad79d2b..5ac235f 100644
--- a/src/gpu/gl/GrGLUniformHandler.h
+++ b/src/gpu/gl/GrGLUniformHandler.h
@@ -38,10 +38,6 @@
int arrayCount,
const char** outName) override;
- void updateUniformVisibility(UniformHandle u, uint32_t visibility) override {
- fUniforms[u.toIndex()].fVisibility |= visibility;
- }
-
SamplerHandle addSampler(const GrBackendFormat&, GrSamplerState, const GrSwizzle&,
const char* name, const GrShaderCaps*) override;
diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
index a83277e..914626e1 100644
--- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
@@ -166,10 +166,7 @@
if (args.fFp.isSampledWithExplicitCoords() && args.fTransformedCoords.count() > 0) {
// we currently only support overriding a single coordinate pair
SkASSERT(args.fTransformedCoords.count() == 1);
- const GrGLSLProgramDataManager::UniformHandle& mat =
- args.fTransformedCoords[0].fUniformMatrix;
- if (mat.isValid()) {
- args.fUniformHandler->updateUniformVisibility(mat, kFragment_GrShaderFlag);
+ if (args.fTransformedCoords[0].fUniformMatrix.isValid()) {
this->codeAppendf("_coords = (%s * float3(_coords, 1)).xy;\n",
args.fTransformedCoords[0].fMatrixCode.c_str());
}
diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp
index 0eba2cd..0c493d0 100644
--- a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp
+++ b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp
@@ -87,12 +87,12 @@
if (!fp.isSampledWithExplicitCoords() || !coordTransform.isNoOp()) {
SkString strUniName;
strUniName.printf("CoordTransformMatrix_%d", i);
- fInstalledTransforms.push_back().fHandle = uniformHandler
- ->addUniform(kVertex_GrShaderFlag,
- kFloat3x3_GrSLType,
- strUniName.c_str(),
- &matrixName)
- .toIndex();
+ auto flag = fp.isSampledWithExplicitCoords() ? kFragment_GrShaderFlag
+ : kVertex_GrShaderFlag;
+ fInstalledTransforms.push_back().fHandle =
+ uniformHandler
+ ->addUniform(flag, kFloat3x3_GrSLType, strUniName.c_str(), &matrixName)
+ .toIndex();
} else {
// Install a coord transform that will be skipped.
fInstalledTransforms.push_back();
diff --git a/src/gpu/glsl/GrGLSLUniformHandler.h b/src/gpu/glsl/GrGLSLUniformHandler.h
index f0878f7..c06c08b 100644
--- a/src/gpu/glsl/GrGLSLUniformHandler.h
+++ b/src/gpu/glsl/GrGLSLUniformHandler.h
@@ -64,11 +64,6 @@
virtual const GrShaderVar& getUniformVariable(UniformHandle u) const = 0;
/**
- * 'Or's the visibility parameter with the current uniform visibililty.
- */
- virtual void updateUniformVisibility(UniformHandle u, uint32_t visibility) = 0;
-
- /**
* Shortcut for getUniformVariable(u).c_str()
*/
virtual const char* getUniformCStr(UniformHandle u) const = 0;
diff --git a/src/gpu/mtl/GrMtlUniformHandler.h b/src/gpu/mtl/GrMtlUniformHandler.h
index 4db6738..0ee41bc 100644
--- a/src/gpu/mtl/GrMtlUniformHandler.h
+++ b/src/gpu/mtl/GrMtlUniformHandler.h
@@ -57,10 +57,6 @@
int arrayCount,
const char** outName) override;
- void updateUniformVisibility(UniformHandle u, uint32_t visibility) override {
- fUniforms[u.toIndex()].fVisibility |= visibility;
- }
-
SamplerHandle addSampler(const GrBackendFormat&,
GrSamplerState,
const GrSwizzle&,
diff --git a/src/gpu/vk/GrVkUniformHandler.h b/src/gpu/vk/GrVkUniformHandler.h
index ac217ea..c974c06 100644
--- a/src/gpu/vk/GrVkUniformHandler.h
+++ b/src/gpu/vk/GrVkUniformHandler.h
@@ -73,10 +73,6 @@
int arrayCount,
const char** outName) override;
- void updateUniformVisibility(UniformHandle u, uint32_t visibility) override {
- fUniforms[u.toIndex()].fVisibility |= visibility;
- }
-
SamplerHandle addSampler(const GrBackendFormat&,
GrSamplerState,
const GrSwizzle&,