Commit 84780f7d by shrekshao Committed by Commit Bot

Speculative fix: getProgramiv always returns a valid program

The only possibility with program being nullptr here in the case of GL_LINK_STATUS seems to be if the context gets lost between the validation and usage of `Context::getProgramiv`. Bug: chromium:991020 Change-Id: I50a77ca4a841dea7324344a71e46d4e0bf72858d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2096176Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShrek Shao <shrekshao@google.com> Commit-Queue: Shrek Shao <shrekshao@google.com>
parent 2e5bd9b1
......@@ -6497,14 +6497,13 @@ void Context::getIntegervRobust(GLenum pname, GLsizei bufSize, GLsizei *length,
void Context::getProgramiv(ShaderProgramID program, GLenum pname, GLint *params)
{
Program *programObject = nullptr;
if (!isContextLost())
// Don't resolve link if checking the link completion status.
Program *programObject = getProgramNoResolveLink(program);
if (!isContextLost() && pname != GL_COMPLETION_STATUS_KHR)
{
// Don't resolve link if checking the link completion status.
programObject = (pname == GL_COMPLETION_STATUS_KHR ? getProgramNoResolveLink(program)
: getProgramResolveLink(program));
ASSERT(programObject);
programObject = getProgramResolveLink(program);
}
ASSERT(programObject);
QueryProgramiv(this, programObject, pname, params);
}
......
......@@ -1195,7 +1195,7 @@ void QueryProgramiv(Context *context, const Program *program, GLenum pname, GLin
*params = program->isFlaggedForDeletion();
return;
case GL_LINK_STATUS:
*params = program ? program->isLinked() : false;
*params = program->isLinked();
return;
case GL_COMPLETION_STATUS_KHR:
if (context->isContextLost())
......
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