[Mesa-dev] [PATCH 3/3] mesa: return initial value for VALIDATE_STATUS if pipe not bound

Timothy Arceri t_arceri at yahoo.com.au
Sat Nov 21 19:25:31 PST 2015


On Tue, 2015-09-01 at 13:53 +0300, Tapani Pälli wrote:
> From OpenGL 4.5 Core spec (7.13):
> 
>     "If pipeline is a name that has been generated (without
> subsequent
>     deletion) by GenProgramPipelines, but refers to a program
> pipeline
>     object that has not been previously bound, the GL first creates a
>     new state vector in the same manner as when BindProgramPipeline
>     creates a new program pipeline object."
> 
> I interpret this as "If GetProgramPipelineiv gets called without a
> bound (but valid) pipeline object, the state should reflect initial
> state of a new pipeline object." This is also expected behaviour by
> ES31-CTS.sepshaderobjs.PipelineApi conformance test.
> 
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
>  src/mesa/main/pipelineobj.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/main/pipelineobj.c
> b/src/mesa/main/pipelineobj.c
> index 07acbf1..c2e1d29 100644
> --- a/src/mesa/main/pipelineobj.c
> +++ b/src/mesa/main/pipelineobj.c
> @@ -614,7 +614,8 @@ _mesa_GetProgramPipelineiv(GLuint pipeline,
> GLenum pname, GLint *params)
>        *params = pipe->InfoLog ? strlen(pipe->InfoLog) + 1 : 0;
>        return;
>     case GL_VALIDATE_STATUS:
> -      *params = pipe->Validated;
> +      /* If pipeline is not bound, return initial value 0. */
> +      *params = (ctx->_Shader->Name != pipe->Name)
> ? 0 : pipe->Validated;

Hi Tapani,

As Gregory has pointed out this change causes a large number of the SSO
deqp tests to fail.

I'm not sure what the solution is yet but one thing I have noticed is
that with this change we will always return a value of 0 as nothing
ever sets the value of ctx->_Shader->Name.

I did try setting it when the bind is done but the deqp tests still
fail as the bind is done after the validate in those tests. Are you
sure that this must return 0 if the pipe is not bound?

Tim

>        return;
>     case GL_VERTEX_SHADER:
>        *params = pipe->CurrentProgram[MESA_SHADER_VERTEX]


More information about the mesa-dev mailing list