Commit 06cbb283 by Courtney Goeltzenleuchter Committed by Commit Bot

Validate uniform location size, fix unlink cleanup

Also cleanup shader storage blocks. Test: angle_deqp_khr_gles31_tests --use-angle=swiftshader --gtest_filter=dEQP.KHR_GLES31/core_explicit_uniform_location_uniform* Bug: angleproject:4132 Bug: angleproject:4217 Change-Id: Ie0375ab9226f3f49cb0c0d208ac08f99d98dad8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1963139Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
parent 8f619682
......@@ -1487,8 +1487,9 @@ angle::Result Program::link(const Context *context)
&mState.mShaderStorageBlocks, &mState.mBufferVariables, &mState.mAtomicCounterBuffers));
GLuint combinedImageUniforms = 0u;
if (!linkUniforms(context->getCaps(), mInfoLog, mUniformLocationBindings,
&combinedImageUniforms, &resources->unusedUniforms))
if (!linkUniforms(context->getCaps(), context->getClientVersion(), mInfoLog,
mUniformLocationBindings, &combinedImageUniforms,
&resources->unusedUniforms))
{
return angle::Result::Continue;
}
......@@ -1551,8 +1552,9 @@ angle::Result Program::link(const Context *context)
}
GLuint combinedImageUniforms = 0u;
if (!linkUniforms(context->getCaps(), mInfoLog, mUniformLocationBindings,
&combinedImageUniforms, &resources->unusedUniforms))
if (!linkUniforms(context->getCaps(), context->getClientVersion(), mInfoLog,
mUniformLocationBindings, &combinedImageUniforms,
&resources->unusedUniforms))
{
return angle::Result::Continue;
}
......@@ -1856,6 +1858,7 @@ void Program::unlink()
mState.mUniforms.clear();
mState.mUniformLocations.clear();
mState.mUniformBlocks.clear();
mState.mShaderStorageBlocks.clear();
mState.mActiveUniformBlockBindings.reset();
mState.mAtomicCounterBuffers.clear();
mState.mOutputVariables.clear();
......@@ -3500,6 +3503,7 @@ bool Program::linkValidateFragmentInputBindings(gl::InfoLog &infoLog) const
}
bool Program::linkUniforms(const Caps &caps,
const Version &version,
InfoLog &infoLog,
const ProgramAliasedBindings &uniformLocationBindings,
GLuint *combinedImageUniformsCount,
......@@ -3520,6 +3524,17 @@ bool Program::linkUniforms(const Caps &caps,
return false;
}
if (version >= Version(3, 1))
{
GLint locationSize = static_cast<GLint>(mState.getUniformLocations().size());
if (locationSize > caps.maxUniformLocations)
{
infoLog << "Exceeded maximum uniform location size";
return false;
}
}
return true;
}
......
......@@ -992,6 +992,7 @@ class Program final : angle::NonCopyable, public LabeledObject
bool linkVaryings(InfoLog &infoLog) const;
bool linkUniforms(const Caps &caps,
const Version &version,
InfoLog &infoLog,
const ProgramAliasedBindings &uniformLocationBindings,
GLuint *combinedImageUniformsCount,
......
......@@ -102,9 +102,9 @@
4146 : KHR-GLES31.core.vertex_attrib_binding.advanced-bindingUpdate = FAIL
4146 : KHR-GLES31.core.vertex_attrib_binding.advanced-largeStrideAndOffsetsNewAndLegacyAPI = FAIL
// Explicit uniform locations: triggers ASSERT.
4132 : KHR-GLES31.core.explicit_uniform_location.* = SKIP
// Explicit uniform locations:
4219 VULKAN PIXEL2ORXL : KHR-GLES31.core.explicit_uniform_location.uniform-loc-mix-with-implicit-max = FAIL
4219 VULKAN PIXEL2ORXL : KHR-GLES31.core.explicit_uniform_location.uniform-loc-mix-with-implicit-max-array = FAIL
// Program interface query.
3596 VULKAN : KHR-GLES31.core.program_interface_query.* = FAIL
......
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