[Mesa-dev] [PATCH 2/2] mesa: move GL_INVALID_OPERATION error to rendering call
Tapani Pälli
tapani.palli at intel.com
Sun Dec 6 21:49:15 PST 2015
Yes, nice cleanup
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
On 12/06/2015 06:36 AM, Timothy Arceri wrote:
> The validation api doesn't trigger this error so just move it to the
> code called during rendering.
>
> Cc: Tapani Pälli <tapani.palli at intel.com>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> ---
> src/mesa/main/context.c | 7 ++++---
> src/mesa/main/pipelineobj.c | 30 +++++++++---------------------
> src/mesa/main/pipelineobj.h | 3 ++-
> 3 files changed, 15 insertions(+), 25 deletions(-)
>
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index be542dd..b3fc3bd 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -2031,9 +2031,10 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where)
>
> /* A pipeline object is bound */
> if (ctx->_Shader->Name && !ctx->_Shader->Validated) {
> - /* Error message will be printed inside _mesa_validate_program_pipeline.
> - */
> - if (!_mesa_validate_program_pipeline(ctx, ctx->_Shader, GL_TRUE)) {
> + if (!_mesa_validate_program_pipeline(ctx, ctx->_Shader)) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glValidateProgramPipeline failed to validate the "
> + "pipeline");
> return GL_FALSE;
> }
> }
> diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c
> index d8c9ded..5eda4e5 100644
> --- a/src/mesa/main/pipelineobj.c
> +++ b/src/mesa/main/pipelineobj.c
> @@ -757,8 +757,7 @@ program_stages_interleaved_illegally(const struct gl_pipeline_object *pipe)
>
> extern GLboolean
> _mesa_validate_program_pipeline(struct gl_context* ctx,
> - struct gl_pipeline_object *pipe,
> - GLboolean IsBound)
> + struct gl_pipeline_object *pipe)
> {
> unsigned i;
> bool program_empty = true;
> @@ -789,7 +788,7 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
> */
> for (i = 0; i < MESA_SHADER_STAGES; i++) {
> if (!program_stages_all_active(pipe, pipe->CurrentProgram[i])) {
> - goto err;
> + return GL_FALSE;
> }
> }
>
> @@ -810,7 +809,7 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
> ralloc_strdup(pipe,
> "Program is active for multiple shader stages with an "
> "intervening stage provided by another program");
> - goto err;
> + return GL_FALSE;
> }
>
> /* Section 2.11.11 (Shader Execution), subheading "Validation," of the
> @@ -831,7 +830,7 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
> pipe->CurrentProgram[MESA_SHADER_TESS_CTRL] ||
> pipe->CurrentProgram[MESA_SHADER_TESS_EVAL])) {
> pipe->InfoLog = ralloc_strdup(pipe, "Program lacks a vertex shader");
> - goto err;
> + return GL_FALSE;
> }
>
> /* Section 2.11.11 (Shader Execution), subheading "Validation," of the
> @@ -854,7 +853,7 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
> "Program %d was relinked without "
> "PROGRAM_SEPARABLE state",
> pipe->CurrentProgram[i]->Name);
> - goto err;
> + return GL_FALSE;
> }
> }
>
> @@ -878,7 +877,7 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
> }
>
> if (program_empty) {
> - goto err;
> + return GL_FALSE;
> }
>
> /* Section 2.11.11 (Shader Execution), subheading "Validation," of the
> @@ -896,7 +895,7 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
> * maximum number of texture image units allowed."
> */
> if (!_mesa_sampler_uniforms_pipeline_are_valid(pipe))
> - goto err;
> + return GL_FALSE;
>
> /* Validate inputs against outputs, this cannot be done during linking
> * since programs have been linked separately from each other.
> @@ -911,17 +910,10 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
> * OpenGL ES 3.1 specification has the same text.
> */
> if (!_mesa_validate_pipeline_io(pipe))
> - goto err;
> + return GL_FALSE;
>
> pipe->Validated = GL_TRUE;
> return GL_TRUE;
> -
> -err:
> - if (IsBound)
> - _mesa_error(ctx, GL_INVALID_OPERATION,
> - "glValidateProgramPipeline failed to validate the pipeline");
> -
> - return GL_FALSE;
> }
>
> /**
> @@ -943,11 +935,7 @@ _mesa_ValidateProgramPipeline(GLuint pipeline)
> return;
> }
>
> - /* ValidateProgramPipeline should not throw errors when pipeline validation
> - * fails and should instead only update the validation status. We pass
> - * false for IsBound to avoid an error being thrown.
> - */
> - _mesa_validate_program_pipeline(ctx, pipe, false);
> + _mesa_validate_program_pipeline(ctx, pipe);
> }
>
> void GLAPIENTRY
> diff --git a/src/mesa/main/pipelineobj.h b/src/mesa/main/pipelineobj.h
> index 6dee775..fbcb765 100644
> --- a/src/mesa/main/pipelineobj.h
> +++ b/src/mesa/main/pipelineobj.h
> @@ -67,7 +67,8 @@ _mesa_bind_pipeline(struct gl_context *ctx,
> struct gl_pipeline_object *pipe);
>
> extern GLboolean
> -_mesa_validate_program_pipeline(struct gl_context * ctx, struct gl_pipeline_object *pipe, GLboolean IsBound);
> +_mesa_validate_program_pipeline(struct gl_context * ctx,
> + struct gl_pipeline_object *pipe);
>
>
> extern void GLAPIENTRY
>
More information about the mesa-dev
mailing list