Vulkan: Keep unused uniforms list to fix glslang issues
We we're unable to cleanup the unused uniforms if we did not keep
a list of them while parsing them in ProgramLinkResource. Now
that we keep a history of them, we're able to clean them up and
fix a few dEQP tests.
Bug: angleproject:2582
Bug: angleproject:2585
Bug: angleproject:2587
Bug: angleproject:2589
Bug: angleproject:2590
Bug: angleproject:2593
Change-Id: Ic1f9151e356a3d05e83f1031cc7b187b370284e5
Reviewed-on: https://chromium-review.googlesource.com/1085644
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/ProgramLinkedResources.cpp b/src/libANGLE/ProgramLinkedResources.cpp
index 2263544..605d1bd 100644
--- a/src/libANGLE/ProgramLinkedResources.cpp
+++ b/src/libANGLE/ProgramLinkedResources.cpp
@@ -253,9 +253,11 @@
UniformLinker::~UniformLinker() = default;
void UniformLinker::getResults(std::vector<LinkedUniform> *uniforms,
+ std::vector<UnusedUniform> *unusedUniforms,
std::vector<VariableLocation> *uniformLocations)
{
uniforms->swap(mUniforms);
+ unusedUniforms->swap(mUnusedUniforms);
uniformLocations->swap(mUniformLocations);
}
@@ -501,6 +503,7 @@
}
else
{
+ mUnusedUniforms.emplace_back(uniformIter->name, uniformIter->isSampler());
uniformIter = mUniforms.erase(uniformIter);
}
}
@@ -513,13 +516,15 @@
std::vector<LinkedUniform> &samplerUniforms,
std::vector<LinkedUniform> &imageUniforms,
std::vector<LinkedUniform> &atomicCounterUniforms,
+ std::vector<UnusedUniform> &unusedUniforms,
InfoLog &infoLog)
{
ShaderUniformCount shaderUniformCount;
for (const sh::Uniform &uniform : shader->getUniforms(context))
{
- shaderUniformCount += flattenUniform(uniform, &samplerUniforms, &imageUniforms,
- &atomicCounterUniforms, shader->getType());
+ shaderUniformCount +=
+ flattenUniform(uniform, &samplerUniforms, &imageUniforms, &atomicCounterUniforms,
+ &unusedUniforms, shader->getType());
}
ShaderType shaderType = shader->getType();
@@ -573,6 +578,7 @@
std::vector<LinkedUniform> samplerUniforms;
std::vector<LinkedUniform> imageUniforms;
std::vector<LinkedUniform> atomicCounterUniforms;
+ std::vector<UnusedUniform> unusedUniforms;
const Caps &caps = context->getCaps();
for (ShaderType shaderType : AllShaderTypes())
@@ -584,7 +590,8 @@
}
if (!flattenUniformsAndCheckCapsForShader(context, shader, caps, samplerUniforms,
- imageUniforms, atomicCounterUniforms, infoLog))
+ imageUniforms, atomicCounterUniforms,
+ unusedUniforms, infoLog))
{
return false;
}
@@ -593,6 +600,7 @@
mUniforms.insert(mUniforms.end(), samplerUniforms.begin(), samplerUniforms.end());
mUniforms.insert(mUniforms.end(), imageUniforms.begin(), imageUniforms.end());
mUniforms.insert(mUniforms.end(), atomicCounterUniforms.begin(), atomicCounterUniforms.end());
+ mUnusedUniforms.insert(mUnusedUniforms.end(), unusedUniforms.begin(), unusedUniforms.end());
return true;
}
@@ -601,17 +609,22 @@
std::vector<LinkedUniform> *samplerUniforms,
std::vector<LinkedUniform> *imageUniforms,
std::vector<LinkedUniform> *atomicCounterUniforms,
+ std::vector<UnusedUniform> *unusedUniforms,
ShaderType shaderType)
{
- int location = uniform.location;
- ShaderUniformCount shaderUniformCount =
- flattenUniformImpl(uniform, uniform.name, uniform.mappedName, samplerUniforms,
- imageUniforms, atomicCounterUniforms, shaderType, uniform.active,
- uniform.staticUse, uniform.binding, uniform.offset, &location);
+ int location = uniform.location;
+ ShaderUniformCount shaderUniformCount = flattenUniformImpl(
+ uniform, uniform.name, uniform.mappedName, samplerUniforms, imageUniforms,
+ atomicCounterUniforms, unusedUniforms, shaderType, uniform.active, uniform.staticUse,
+ uniform.binding, uniform.offset, &location);
if (uniform.active)
{
return shaderUniformCount;
}
+ else
+ {
+ unusedUniforms->emplace_back(uniform.name, IsSamplerType(uniform.type));
+ }
return ShaderUniformCount();
}
@@ -623,6 +636,7 @@
std::vector<LinkedUniform> *samplerUniforms,
std::vector<LinkedUniform> *imageUniforms,
std::vector<LinkedUniform> *atomicCounterUniforms,
+ std::vector<UnusedUniform> *unusedUniforms,
ShaderType shaderType,
bool markActive,
bool markStaticUse,
@@ -642,15 +656,15 @@
{
shaderUniformCount += flattenArrayOfStructsUniform(
uniform, arrayNestingIndex + 1u, elementName, elementMappedName, samplerUniforms,
- imageUniforms, atomicCounterUniforms, shaderType, markActive, markStaticUse,
- binding, offset, location);
+ imageUniforms, atomicCounterUniforms, unusedUniforms, shaderType, markActive,
+ markStaticUse, binding, offset, location);
}
else
{
shaderUniformCount += flattenStructUniform(
uniform.fields, elementName, elementMappedName, samplerUniforms, imageUniforms,
- atomicCounterUniforms, shaderType, markActive, markStaticUse, binding, offset,
- location);
+ atomicCounterUniforms, unusedUniforms, shaderType, markActive, markStaticUse,
+ binding, offset, location);
}
}
return shaderUniformCount;
@@ -663,6 +677,7 @@
std::vector<LinkedUniform> *samplerUniforms,
std::vector<LinkedUniform> *imageUniforms,
std::vector<LinkedUniform> *atomicCounterUniforms,
+ std::vector<UnusedUniform> *unusedUniforms,
ShaderType shaderType,
bool markActive,
bool markStaticUse,
@@ -676,9 +691,10 @@
const std::string &fieldName = namePrefix + "." + field.name;
const std::string &fieldMappedName = mappedNamePrefix + "." + field.mappedName;
- shaderUniformCount += flattenUniformImpl(field, fieldName, fieldMappedName, samplerUniforms,
- imageUniforms, atomicCounterUniforms, shaderType,
- markActive, markStaticUse, -1, -1, location);
+ shaderUniformCount +=
+ flattenUniformImpl(field, fieldName, fieldMappedName, samplerUniforms, imageUniforms,
+ atomicCounterUniforms, unusedUniforms, shaderType, markActive,
+ markStaticUse, -1, -1, location);
}
return shaderUniformCount;
}
@@ -690,6 +706,7 @@
std::vector<LinkedUniform> *samplerUniforms,
std::vector<LinkedUniform> *imageUniforms,
std::vector<LinkedUniform> *atomicCounterUniforms,
+ std::vector<UnusedUniform> *unusedUniforms,
ShaderType shaderType,
bool markActive,
bool markStaticUse,
@@ -710,8 +727,8 @@
shaderUniformCount +=
flattenUniformImpl(uniformElement, elementName, elementMappedName, samplerUniforms,
- imageUniforms, atomicCounterUniforms, shaderType, markActive,
- markStaticUse, binding, offset, location);
+ imageUniforms, atomicCounterUniforms, unusedUniforms, shaderType,
+ markActive, markStaticUse, binding, offset, location);
}
return shaderUniformCount;
}
@@ -723,6 +740,7 @@
std::vector<LinkedUniform> *samplerUniforms,
std::vector<LinkedUniform> *imageUniforms,
std::vector<LinkedUniform> *atomicCounterUniforms,
+ std::vector<UnusedUniform> *unusedUniforms,
ShaderType shaderType,
bool markActive,
bool markStaticUse,
@@ -737,17 +755,17 @@
{
if (uniform.isArray())
{
- shaderUniformCount +=
- flattenArrayOfStructsUniform(uniform, 0u, fullName, fullMappedName, samplerUniforms,
- imageUniforms, atomicCounterUniforms, shaderType,
- markActive, markStaticUse, binding, offset, location);
+ shaderUniformCount += flattenArrayOfStructsUniform(
+ uniform, 0u, fullName, fullMappedName, samplerUniforms, imageUniforms,
+ atomicCounterUniforms, unusedUniforms, shaderType, markActive, markStaticUse,
+ binding, offset, location);
}
else
{
- shaderUniformCount +=
- flattenStructUniform(uniform.fields, fullName, fullMappedName, samplerUniforms,
- imageUniforms, atomicCounterUniforms, shaderType, markActive,
- markStaticUse, binding, offset, location);
+ shaderUniformCount += flattenStructUniform(
+ uniform.fields, fullName, fullMappedName, samplerUniforms, imageUniforms,
+ atomicCounterUniforms, unusedUniforms, shaderType, markActive, markStaticUse,
+ binding, offset, location);
}
return shaderUniformCount;
}
@@ -757,8 +775,8 @@
// "For an active variable declared as an array of an aggregate data type (structures or
// arrays), a separate entry will be generated for each active array element"
return flattenArrayUniform(uniform, fullName, fullMappedName, samplerUniforms,
- imageUniforms, atomicCounterUniforms, shaderType, markActive,
- markStaticUse, binding, offset, location);
+ imageUniforms, atomicCounterUniforms, unusedUniforms, shaderType,
+ markActive, markStaticUse, binding, offset, location);
}
// Not a struct
@@ -829,6 +847,10 @@
{
linkedUniform.setActive(shaderType, true);
}
+ else
+ {
+ unusedUniforms->emplace_back(linkedUniform.name, linkedUniform.isSampler());
+ }
uniformList->push_back(linkedUniform);
}