[Mesa-dev] [PATCH 1/5] mesa: Do (TCS && !TES) draw time validation in ES as well.

Alejandro PiƱeiro apinheiro at igalia.com
Sat Feb 11 08:21:36 UTC 2017


On 11/02/17 08:52, Kenneth Graunke wrote:
> Now that we have OES_tessellation_shader, the same situation can occur
> in ES too, not just GL core profile.
>
> Having a TCS but no TES may confuse drivers - i965 crashes, for example.
>
> This prevents regressions in
> ES31-CTS.core.tessellation_shader.single.xfb_captures_data_from_correct_stage
> with some SSO pipeline validation changes I'm making.
>
> Cc: "17.0" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/main/api_validate.c | 38 +++++++++++++++++++-------------------
>  1 file changed, 19 insertions(+), 19 deletions(-)
>
> diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
> index 6c95701ea0e..d64264fe1e9 100644
> --- a/src/mesa/main/api_validate.c
> +++ b/src/mesa/main/api_validate.c
> @@ -236,6 +236,25 @@ check_valid_to_render(struct gl_context *ctx, const char *function)
>        return false;
>     }
>  
> +   /* The spec argues that this is allowed because a tess ctrl shader
> +    * without a tess eval shader can be used with transform feedback.
> +    * However, glBeginTransformFeedback doesn't allow GL_PATCHES and
> +    * therefore doesn't allow tessellation.
> +    *
> +    * Further investigation showed that this is indeed a spec bug and
> +    * a tess ctrl shader without a tess eval shader shouldn't have been
> +    * allowed, because there is no API in GL 4.0 that can make use this
> +    * to produce something useful.

As the check is done for both OpenGL and OpenGL ES, how about update the
comment to include both, as right now only mentions desktop?

In any case, this is a nitpick, feel free to ignore if you think that
increases the comment without good reason.

> +    *
> +    * Also, all vendors except one don't support a tess ctrl shader without
> +    * a tess eval shader anyway.
> +    */
> +   if (ctx->TessCtrlProgram._Current && !ctx->TessEvalProgram._Current) {
> +      _mesa_error(ctx, GL_INVALID_OPERATION,
> +                  "%s(tess eval shader is missing)", function);
> +      return false;
> +   }
> +
>     switch (ctx->API) {
>     case API_OPENGLES2:
>        /* For ES2, we can draw if we have a vertex program/shader). */
> @@ -260,25 +279,6 @@ check_valid_to_render(struct gl_context *ctx, const char *function)
>           return false;
>        }
>  
> -      /* The spec argues that this is allowed because a tess ctrl shader
> -       * without a tess eval shader can be used with transform feedback.
> -       * However, glBeginTransformFeedback doesn't allow GL_PATCHES and
> -       * therefore doesn't allow tessellation.
> -       *
> -       * Further investigation showed that this is indeed a spec bug and
> -       * a tess ctrl shader without a tess eval shader shouldn't have been
> -       * allowed, because there is no API in GL 4.0 that can make use this
> -       * to produce something useful.
> -       *
> -       * Also, all vendors except one don't support a tess ctrl shader without
> -       * a tess eval shader anyway.
> -       */
> -      if (ctx->TessCtrlProgram._Current && !ctx->TessEvalProgram._Current) {
> -         _mesa_error(ctx, GL_INVALID_OPERATION,
> -                     "%s(tess eval shader is missing)", function);
> -         return false;
> -      }
> -
>        /* Section 7.3 (Program Objects) of the OpenGL 4.5 Core Profile spec
>         * says:
>         *



More information about the mesa-dev mailing list