Commit 60437586 by Jamie Madill Committed by Commit Bot

Vulkan: Fix unused sampler struct uniforms.

These were not being parsed correctly. Turns on all uniform_api dEQP tests. Bug: angleproject:2612 Change-Id: I365bbe4cc52bb6a62fc47c53355962af38298b7f Reviewed-on: https://chromium-review.googlesource.com/1101573 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarLuc Ferron <lucferron@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 3bb2bbea
...@@ -95,6 +95,18 @@ void InsertQualifierSpecifierString(std::string *shaderString, ...@@ -95,6 +95,18 @@ void InsertQualifierSpecifierString(std::string *shaderString,
angle::ReplaceSubstring(shaderString, searchString, replacementString); angle::ReplaceSubstring(shaderString, searchString, replacementString);
} }
std::string GetMappedSamplerName(const std::string &originalName)
{
std::string samplerName = gl::ParseResourceName(originalName, nullptr);
// Samplers in structs are extracted.
std::replace(samplerName.begin(), samplerName.end(), '.', '_');
// Samplers in arrays of structs are also extracted.
std::replace(samplerName.begin(), samplerName.end(), '[', '_');
samplerName.erase(std::remove(samplerName.begin(), samplerName.end(), ']'), samplerName.end());
return samplerName;
}
} // anonymous namespace } // anonymous namespace
// static // static
...@@ -230,15 +242,8 @@ gl::LinkResult GlslangWrapper::linkProgram(const gl::Context *glContext, ...@@ -230,15 +242,8 @@ gl::LinkResult GlslangWrapper::linkProgram(const gl::Context *glContext,
const gl::LinkedUniform &samplerUniform = uniforms[uniformIndex]; const gl::LinkedUniform &samplerUniform = uniforms[uniformIndex];
std::string setBindingString = "set = 1, binding = " + Str(textureCount); std::string setBindingString = "set = 1, binding = " + Str(textureCount);
std::string samplerName = gl::ParseResourceName(samplerUniform.name, nullptr); // Samplers in structs are extracted and renamed.
const std::string samplerName = GetMappedSamplerName(samplerUniform.name);
// Samplers in structs are extracted.
std::replace(samplerName.begin(), samplerName.end(), '.', '_');
// Samplers in arrays of structs are also extracted.
std::replace(samplerName.begin(), samplerName.end(), '[', '_');
samplerName.erase(std::remove(samplerName.begin(), samplerName.end(), ']'),
samplerName.end());
ASSERT(samplerUniform.isActive(gl::ShaderType::Vertex) || ASSERT(samplerUniform.isActive(gl::ShaderType::Vertex) ||
samplerUniform.isActive(gl::ShaderType::Fragment)); samplerUniform.isActive(gl::ShaderType::Fragment));
...@@ -259,12 +264,19 @@ gl::LinkResult GlslangWrapper::linkProgram(const gl::Context *glContext, ...@@ -259,12 +264,19 @@ gl::LinkResult GlslangWrapper::linkProgram(const gl::Context *glContext,
for (const gl::UnusedUniform &unusedUniform : resources.unusedUniforms) for (const gl::UnusedUniform &unusedUniform : resources.unusedUniforms)
{ {
InsertLayoutSpecifierString(&vertexSource, unusedUniform.name, ""); std::string uniformName = unusedUniform.name;
InsertLayoutSpecifierString(&fragmentSource, unusedUniform.name, ""); if (unusedUniform.isSampler)
{
// Samplers in structs are extracted and renamed.
uniformName = GetMappedSamplerName(uniformName);
}
InsertLayoutSpecifierString(&vertexSource, uniformName, "");
InsertLayoutSpecifierString(&fragmentSource, uniformName, "");
std::string qualifierToUse = unusedUniform.isSampler ? kUniformQualifier : ""; const std::string qualifierToUse = unusedUniform.isSampler ? kUniformQualifier : "";
InsertQualifierSpecifierString(&vertexSource, unusedUniform.name, qualifierToUse); InsertQualifierSpecifierString(&vertexSource, uniformName, qualifierToUse);
InsertQualifierSpecifierString(&fragmentSource, unusedUniform.name, qualifierToUse); InsertQualifierSpecifierString(&fragmentSource, uniformName, qualifierToUse);
} }
std::array<const char *, 2> strings = {{vertexSource.c_str(), fragmentSource.c_str()}}; std::array<const char *, 2> strings = {{vertexSource.c_str(), fragmentSource.c_str()}};
......
...@@ -313,7 +313,6 @@ ...@@ -313,7 +313,6 @@
2598 VULKAN : dEQP-GLES2.functional.rasterization.primitives.line* = SKIP 2598 VULKAN : dEQP-GLES2.functional.rasterization.primitives.line* = SKIP
2599 VULKAN : dEQP-GLES2.functional.rasterization.limits.points = SKIP 2599 VULKAN : dEQP-GLES2.functional.rasterization.limits.points = SKIP
2161 VULKAN : dEQP-GLES2.functional.uniform_api.random.* = SKIP
2600 VULKAN : dEQP-GLES2.functional.state_query.shader.uniform_value_sampler = SKIP 2600 VULKAN : dEQP-GLES2.functional.state_query.shader.uniform_value_sampler = SKIP
2601 VULKAN : dEQP-GLES2.functional.clipping.* = SKIP 2601 VULKAN : dEQP-GLES2.functional.clipping.* = SKIP
2353 VULKAN : dEQP-GLES2.functional.polygon_offset.* = SKIP 2353 VULKAN : dEQP-GLES2.functional.polygon_offset.* = SKIP
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment