[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:22:19 UTC 2017


I sent a nitpick for the first one, but in any case, series:
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>

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.
> +    *
> +    * 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