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, ...@@ -6497,14 +6497,13 @@ void Context::getIntegervRobust(GLenum pname, GLsizei bufSize, GLsizei *length,
void Context::getProgramiv(ShaderProgramID program, GLenum pname, GLint *params) void Context::getProgramiv(ShaderProgramID program, GLenum pname, GLint *params)
{ {
Program *programObject = nullptr; // Don't resolve link if checking the link completion status.
if (!isContextLost()) Program *programObject = getProgramNoResolveLink(program);
if (!isContextLost() && pname != GL_COMPLETION_STATUS_KHR)
{ {
// Don't resolve link if checking the link completion status. programObject = getProgramResolveLink(program);
programObject = (pname == GL_COMPLETION_STATUS_KHR ? getProgramNoResolveLink(program)
: getProgramResolveLink(program));
ASSERT(programObject);
} }
ASSERT(programObject);
QueryProgramiv(this, programObject, pname, params); QueryProgramiv(this, programObject, pname, params);
} }
......
...@@ -1195,7 +1195,7 @@ void QueryProgramiv(Context *context, const Program *program, GLenum pname, GLin ...@@ -1195,7 +1195,7 @@ void QueryProgramiv(Context *context, const Program *program, GLenum pname, GLin
*params = program->isFlaggedForDeletion(); *params = program->isFlaggedForDeletion();
return; return;
case GL_LINK_STATUS: case GL_LINK_STATUS:
*params = program ? program->isLinked() : false; *params = program->isLinked();
return; return;
case GL_COMPLETION_STATUS_KHR: case GL_COMPLETION_STATUS_KHR:
if (context->isContextLost()) 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