Tracking uniform ownership
This is a prerequisite change for the upcoming sample(child, matrix)
function. By itself, this CL doesn't really change anything; it just
adds an ownership tracking feature which sample(child, matrix) depends
on.
Change-Id: I98b12e5fb062a2535af367931e7a932ea9c63a59
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281337
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/gpu/gl/GrGLUniformHandler.cpp b/src/gpu/gl/GrGLUniformHandler.cpp
index 4a3b564..396a9ac 100644
--- a/src/gpu/gl/GrGLUniformHandler.cpp
+++ b/src/gpu/gl/GrGLUniformHandler.cpp
@@ -25,12 +25,13 @@
}
GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray(
- uint32_t visibility,
- GrSLType type,
- const char* name,
- bool mangleName,
- int arrayCount,
- const char** outName) {
+ const GrFragmentProcessor* owner,
+ uint32_t visibility,
+ GrSLType type,
+ const char* name,
+ bool mangleName,
+ int arrayCount,
+ const char** outName) {
SkASSERT(name && strlen(name));
SkASSERT(valid_name(name));
SkASSERT(0 != visibility);
@@ -47,10 +48,13 @@
prefix = '\0';
}
fProgramBuilder->nameVariable(&resolvedName, prefix, name, mangleName);
-
- UniformInfo& uni = fUniforms.push_back(GrGLProgramDataManager::UniformInfo{
- GrShaderVar{std::move(resolvedName), type, GrShaderVar::TypeModifier::Uniform, arrayCount},
- visibility, -1
+ GLUniformInfo& uni = fUniforms.push_back(GrGLProgramDataManager::GLUniformInfo{
+ {
+ GrShaderVar{std::move(resolvedName), type, GrShaderVar::TypeModifier::Uniform,
+ arrayCount},
+ visibility, owner, SkString(name)
+ },
+ -1
});
if (outName) {
@@ -70,11 +74,13 @@
GrTextureType type = backendFormat.textureType();
- fSamplers.push_back(GrGLProgramDataManager::UniformInfo{
- GrShaderVar{std::move(mangleName),
- GrSLCombinedSamplerTypeForTextureType(type),
- GrShaderVar::TypeModifier::Uniform},
- kFragment_GrShaderFlag, -1
+ fSamplers.push_back(GrGLProgramDataManager::GLUniformInfo{
+ {
+ GrShaderVar{std::move(mangleName), GrSLCombinedSamplerTypeForTextureType(type),
+ GrShaderVar::TypeModifier::Uniform},
+ kFragment_GrShaderFlag, nullptr, SkString(name)
+ },
+ -1
});
if (shaderCaps->textureSwizzleAppliedInShader()) {
@@ -102,12 +108,12 @@
void GrGLUniformHandler::bindUniformLocations(GrGLuint programID, const GrGLCaps& caps) {
if (caps.bindUniformLocationSupport()) {
int currUniform = 0;
- for (UniformInfo& uniform : fUniforms.items()) {
+ for (GLUniformInfo& uniform : fUniforms.items()) {
GL_CALL(BindUniformLocation(programID, currUniform, uniform.fVariable.c_str()));
uniform.fLocation = currUniform;
++currUniform;
}
- for (UniformInfo& sampler : fSamplers.items()) {
+ for (GLUniformInfo& sampler : fSamplers.items()) {
GL_CALL(BindUniformLocation(programID, currUniform, sampler.fVariable.c_str()));
sampler.fLocation = currUniform;
++currUniform;
@@ -117,12 +123,12 @@
void GrGLUniformHandler::getUniformLocations(GrGLuint programID, const GrGLCaps& caps, bool force) {
if (!caps.bindUniformLocationSupport() || force) {
- for (UniformInfo& uniform : fUniforms.items()) {
+ for (GLUniformInfo& uniform : fUniforms.items()) {
GrGLint location;
GL_CALL_RET(location, GetUniformLocation(programID, uniform.fVariable.c_str()));
uniform.fLocation = location;
}
- for (UniformInfo& sampler : fSamplers.items()) {
+ for (GLUniformInfo& sampler : fSamplers.items()) {
GrGLint location;
GL_CALL_RET(location, GetUniformLocation(programID, sampler.fVariable.c_str()));
sampler.fLocation = location;