Commit f3325dd8 by Khushal Committed by Commit Bot

Add uniform location checks for ignored/invalid location

R=geofflang@chromium.org Bug: chromium:1028418 Change-Id: Iae257fbfa8d58f9a0aa7b876fba416bb060fbe54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2068127 Commit-Queue: Khushal <khushalsagar@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 8df46810
...@@ -2639,9 +2639,29 @@ GLuint Program::getUniformIndex(const std::string &name) const ...@@ -2639,9 +2639,29 @@ GLuint Program::getUniformIndex(const std::string &name) const
return mState.getUniformIndexFromName(name); return mState.getUniformIndexFromName(name);
} }
bool Program::shouldIgnoreUniform(UniformLocation location) const
{
if (location.value == -1)
{
return true;
}
if (mState.mUniformLocations[static_cast<size_t>(location.value)].ignored)
{
return true;
}
return false;
}
void Program::setUniform1fv(UniformLocation location, GLsizei count, const GLfloat *v) void Program::setUniform1fv(UniformLocation location, GLsizei count, const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 1, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 1, v);
mProgram->setUniform1fv(location.value, clampedCount, v); mProgram->setUniform1fv(location.value, clampedCount, v);
...@@ -2650,6 +2670,11 @@ void Program::setUniform1fv(UniformLocation location, GLsizei count, const GLflo ...@@ -2650,6 +2670,11 @@ void Program::setUniform1fv(UniformLocation location, GLsizei count, const GLflo
void Program::setUniform2fv(UniformLocation location, GLsizei count, const GLfloat *v) void Program::setUniform2fv(UniformLocation location, GLsizei count, const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 2, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 2, v);
mProgram->setUniform2fv(location.value, clampedCount, v); mProgram->setUniform2fv(location.value, clampedCount, v);
...@@ -2658,6 +2683,11 @@ void Program::setUniform2fv(UniformLocation location, GLsizei count, const GLflo ...@@ -2658,6 +2683,11 @@ void Program::setUniform2fv(UniformLocation location, GLsizei count, const GLflo
void Program::setUniform3fv(UniformLocation location, GLsizei count, const GLfloat *v) void Program::setUniform3fv(UniformLocation location, GLsizei count, const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 3, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 3, v);
mProgram->setUniform3fv(location.value, clampedCount, v); mProgram->setUniform3fv(location.value, clampedCount, v);
...@@ -2666,6 +2696,11 @@ void Program::setUniform3fv(UniformLocation location, GLsizei count, const GLflo ...@@ -2666,6 +2696,11 @@ void Program::setUniform3fv(UniformLocation location, GLsizei count, const GLflo
void Program::setUniform4fv(UniformLocation location, GLsizei count, const GLfloat *v) void Program::setUniform4fv(UniformLocation location, GLsizei count, const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 4, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 4, v);
mProgram->setUniform4fv(location.value, clampedCount, v); mProgram->setUniform4fv(location.value, clampedCount, v);
...@@ -2677,6 +2712,11 @@ void Program::setUniform1iv(Context *context, ...@@ -2677,6 +2712,11 @@ void Program::setUniform1iv(Context *context,
const GLint *v) const GLint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 1, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 1, v);
...@@ -2691,6 +2731,11 @@ void Program::setUniform1iv(Context *context, ...@@ -2691,6 +2731,11 @@ void Program::setUniform1iv(Context *context,
void Program::setUniform2iv(UniformLocation location, GLsizei count, const GLint *v) void Program::setUniform2iv(UniformLocation location, GLsizei count, const GLint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 2, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 2, v);
mProgram->setUniform2iv(location.value, clampedCount, v); mProgram->setUniform2iv(location.value, clampedCount, v);
...@@ -2699,6 +2744,11 @@ void Program::setUniform2iv(UniformLocation location, GLsizei count, const GLint ...@@ -2699,6 +2744,11 @@ void Program::setUniform2iv(UniformLocation location, GLsizei count, const GLint
void Program::setUniform3iv(UniformLocation location, GLsizei count, const GLint *v) void Program::setUniform3iv(UniformLocation location, GLsizei count, const GLint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 3, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 3, v);
mProgram->setUniform3iv(location.value, clampedCount, v); mProgram->setUniform3iv(location.value, clampedCount, v);
...@@ -2707,6 +2757,11 @@ void Program::setUniform3iv(UniformLocation location, GLsizei count, const GLint ...@@ -2707,6 +2757,11 @@ void Program::setUniform3iv(UniformLocation location, GLsizei count, const GLint
void Program::setUniform4iv(UniformLocation location, GLsizei count, const GLint *v) void Program::setUniform4iv(UniformLocation location, GLsizei count, const GLint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 4, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 4, v);
mProgram->setUniform4iv(location.value, clampedCount, v); mProgram->setUniform4iv(location.value, clampedCount, v);
...@@ -2715,6 +2770,11 @@ void Program::setUniform4iv(UniformLocation location, GLsizei count, const GLint ...@@ -2715,6 +2770,11 @@ void Program::setUniform4iv(UniformLocation location, GLsizei count, const GLint
void Program::setUniform1uiv(UniformLocation location, GLsizei count, const GLuint *v) void Program::setUniform1uiv(UniformLocation location, GLsizei count, const GLuint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 1, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 1, v);
mProgram->setUniform1uiv(location.value, clampedCount, v); mProgram->setUniform1uiv(location.value, clampedCount, v);
...@@ -2723,6 +2783,11 @@ void Program::setUniform1uiv(UniformLocation location, GLsizei count, const GLui ...@@ -2723,6 +2783,11 @@ void Program::setUniform1uiv(UniformLocation location, GLsizei count, const GLui
void Program::setUniform2uiv(UniformLocation location, GLsizei count, const GLuint *v) void Program::setUniform2uiv(UniformLocation location, GLsizei count, const GLuint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 2, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 2, v);
mProgram->setUniform2uiv(location.value, clampedCount, v); mProgram->setUniform2uiv(location.value, clampedCount, v);
...@@ -2731,6 +2796,11 @@ void Program::setUniform2uiv(UniformLocation location, GLsizei count, const GLui ...@@ -2731,6 +2796,11 @@ void Program::setUniform2uiv(UniformLocation location, GLsizei count, const GLui
void Program::setUniform3uiv(UniformLocation location, GLsizei count, const GLuint *v) void Program::setUniform3uiv(UniformLocation location, GLsizei count, const GLuint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 3, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 3, v);
mProgram->setUniform3uiv(location.value, clampedCount, v); mProgram->setUniform3uiv(location.value, clampedCount, v);
...@@ -2739,6 +2809,11 @@ void Program::setUniform3uiv(UniformLocation location, GLsizei count, const GLui ...@@ -2739,6 +2809,11 @@ void Program::setUniform3uiv(UniformLocation location, GLsizei count, const GLui
void Program::setUniform4uiv(UniformLocation location, GLsizei count, const GLuint *v) void Program::setUniform4uiv(UniformLocation location, GLsizei count, const GLuint *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
const VariableLocation &locationInfo = mState.mUniformLocations[location.value]; const VariableLocation &locationInfo = mState.mUniformLocations[location.value];
GLsizei clampedCount = clampUniformCount(locationInfo, count, 4, v); GLsizei clampedCount = clampUniformCount(locationInfo, count, 4, v);
mProgram->setUniform4uiv(location.value, clampedCount, v); mProgram->setUniform4uiv(location.value, clampedCount, v);
...@@ -2750,6 +2825,11 @@ void Program::setUniformMatrix2fv(UniformLocation location, ...@@ -2750,6 +2825,11 @@ void Program::setUniformMatrix2fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<2, 2>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<2, 2>(location, count, transpose, v);
mProgram->setUniformMatrix2fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix2fv(location.value, clampedCount, transpose, v);
} }
...@@ -2760,6 +2840,11 @@ void Program::setUniformMatrix3fv(UniformLocation location, ...@@ -2760,6 +2840,11 @@ void Program::setUniformMatrix3fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<3, 3>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<3, 3>(location, count, transpose, v);
mProgram->setUniformMatrix3fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix3fv(location.value, clampedCount, transpose, v);
} }
...@@ -2770,6 +2855,11 @@ void Program::setUniformMatrix4fv(UniformLocation location, ...@@ -2770,6 +2855,11 @@ void Program::setUniformMatrix4fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<4, 4>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<4, 4>(location, count, transpose, v);
mProgram->setUniformMatrix4fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix4fv(location.value, clampedCount, transpose, v);
} }
...@@ -2780,6 +2870,11 @@ void Program::setUniformMatrix2x3fv(UniformLocation location, ...@@ -2780,6 +2870,11 @@ void Program::setUniformMatrix2x3fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<2, 3>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<2, 3>(location, count, transpose, v);
mProgram->setUniformMatrix2x3fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix2x3fv(location.value, clampedCount, transpose, v);
} }
...@@ -2790,6 +2885,11 @@ void Program::setUniformMatrix2x4fv(UniformLocation location, ...@@ -2790,6 +2885,11 @@ void Program::setUniformMatrix2x4fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<2, 4>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<2, 4>(location, count, transpose, v);
mProgram->setUniformMatrix2x4fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix2x4fv(location.value, clampedCount, transpose, v);
} }
...@@ -2800,6 +2900,11 @@ void Program::setUniformMatrix3x2fv(UniformLocation location, ...@@ -2800,6 +2900,11 @@ void Program::setUniformMatrix3x2fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<3, 2>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<3, 2>(location, count, transpose, v);
mProgram->setUniformMatrix3x2fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix3x2fv(location.value, clampedCount, transpose, v);
} }
...@@ -2810,6 +2915,11 @@ void Program::setUniformMatrix3x4fv(UniformLocation location, ...@@ -2810,6 +2915,11 @@ void Program::setUniformMatrix3x4fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<3, 4>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<3, 4>(location, count, transpose, v);
mProgram->setUniformMatrix3x4fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix3x4fv(location.value, clampedCount, transpose, v);
} }
...@@ -2820,6 +2930,11 @@ void Program::setUniformMatrix4x2fv(UniformLocation location, ...@@ -2820,6 +2930,11 @@ void Program::setUniformMatrix4x2fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<4, 2>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<4, 2>(location, count, transpose, v);
mProgram->setUniformMatrix4x2fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix4x2fv(location.value, clampedCount, transpose, v);
} }
...@@ -2830,6 +2945,11 @@ void Program::setUniformMatrix4x3fv(UniformLocation location, ...@@ -2830,6 +2945,11 @@ void Program::setUniformMatrix4x3fv(UniformLocation location,
const GLfloat *v) const GLfloat *v)
{ {
ASSERT(mLinkResolved); ASSERT(mLinkResolved);
if (shouldIgnoreUniform(location))
{
return;
}
GLsizei clampedCount = clampMatrixUniformCount<4, 3>(location, count, transpose, v); GLsizei clampedCount = clampMatrixUniformCount<4, 3>(location, count, transpose, v);
mProgram->setUniformMatrix4x3fv(location.value, clampedCount, transpose, v); mProgram->setUniformMatrix4x3fv(location.value, clampedCount, transpose, v);
} }
......
...@@ -1057,6 +1057,7 @@ class Program final : angle::NonCopyable, public LabeledObject ...@@ -1057,6 +1057,7 @@ class Program final : angle::NonCopyable, public LabeledObject
GLuint combinedShaderStorageBlocksCount); GLuint combinedShaderStorageBlocksCount);
void setUniformValuesFromBindingQualifiers(); void setUniformValuesFromBindingQualifiers();
bool shouldIgnoreUniform(UniformLocation location) const;
void initInterfaceBlockBindings(); void initInterfaceBlockBindings();
......
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