mesa: Do a draw time check for TES && !TCS in ES 3.x.

ES 3.x requires both TCS and TES to be present.  We already checked
the TCS && !TES case above, so we just have to check !TCS && TES here.

Note that this is allowed in OpenGL, just not ES.

This fixes a subcase of:
dEQP-GLES31.functional.debug.negative_coverage.*.tessellation.single_tessellation_stage

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
This commit is contained in:
Kenneth Graunke 2017-02-01 23:02:03 -08:00
parent 05a56893aa
commit 365afbdaef

View file

@ -264,6 +264,20 @@ check_valid_to_render(struct gl_context *ctx, const char *function)
switch (ctx->API) {
case API_OPENGLES2:
/* Section 11.2 (Tessellation) of the ES 3.2 spec says:
*
* "An INVALID_OPERATION error is generated by any command that
* transfers vertices to the GL if the current program state has
* one but not both of a tessellation control shader and tessellation
* evaluation shader."
*/
if (_mesa_is_gles3(ctx) &&
ctx->TessEvalProgram._Current && !ctx->TessCtrlProgram._Current) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(tess ctrl shader is missing)", function);
return false;
}
/* For ES2, we can draw if we have a vertex program/shader). */
return ctx->VertexProgram._Current != NULL;