mesa: don't report 1 for GL_VALIDATE_STATUS if user didn't validate pipeline

dEQP expects GL_VALIDATE_STATUS to be set to 0 if the user didn't call
glValidateProgramPipeline even if the pipeline is valid, but we will
validate pipeline objects in state changes, not draw calls.

This will fix a failure in this test caused by the next commit:
dEQP-GLES31.functional.state_query.program_pipeline.validate_status_get_program_pipelineiv

Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8798>
This commit is contained in:
Marek Olšák 2021-01-30 23:22:10 -05:00 committed by Marge Bot
parent b6e84f56f7
commit d45043d3b8
3 changed files with 5 additions and 3 deletions

View file

@ -3236,6 +3236,7 @@ struct gl_pipeline_object
GLbitfield Flags; /**< Mask of GLSL_x flags */
GLboolean EverBound; /**< Has the pipeline object been created */
GLboolean Validated; /**< Pipeline Validation status */
GLboolean UserValidated; /**< Validation status initiated by the user */
GLchar *InfoLog;
};

View file

@ -253,7 +253,7 @@ use_program_stages(struct gl_context *ctx, struct gl_shader_program *shProg,
if ((stages & GL_COMPUTE_SHADER_BIT) != 0)
use_program_stage(ctx, GL_COMPUTE_SHADER, shProg, pipe);
pipe->Validated = false;
pipe->Validated = pipe->UserValidated = false;
}
void GLAPIENTRY
@ -734,7 +734,7 @@ _mesa_GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
strlen(pipe->InfoLog) + 1 : 0;
return;
case GL_VALIDATE_STATUS:
*params = pipe->Validated;
*params = pipe->UserValidated;
return;
case GL_VERTEX_SHADER:
*params = pipe->CurrentProgram[MESA_SHADER_VERTEX]
@ -1055,6 +1055,7 @@ _mesa_ValidateProgramPipeline(GLuint pipeline)
}
_mesa_validate_program_pipeline(ctx, pipe);
pipe->UserValidated = pipe->Validated;
}
void GLAPIENTRY

View file

@ -1013,7 +1013,7 @@ validate_uniform(GLint location, GLsizei count, const GLvoid *values,
/* We need to reset the validate flag on changes to samplers in case
* two different sampler types are set to the same texture unit.
*/
ctx->_Shader->Validated = GL_FALSE;
ctx->_Shader->Validated = ctx->_Shader->UserValidated = GL_FALSE;
}
if (uni->type->is_image()) {