summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2017-02-10 20:40:22 -0800
committerEmil Velikov <emil.l.velikov@gmail.com>2017-03-14 00:13:16 +0000
commit95c038ee4e47bd15a478ed759c75f2a5544ccd4b (patch)
treef79793f012631077e2d66630fb13ce6eddc23b71 /src
parent457a408134ffea65d191541a749e9092381f43fc (diff)
mesa: Do (TCS && !TES) draw time validation in ES as well.
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. v2: Add an ES spec citation (suggested by Alejandro) Cc: "17.0" <mesa-stable@lists.freedesktop.org> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com> (cherry picked from commit 05a56893aa2570cb1f6e61e3c9cf365266ea1d3a)
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/api_validate.c45
1 files changed, 26 insertions, 19 deletions
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 071c16d1a1d..3140ba8d64b 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -240,6 +240,32 @@ check_valid_to_render(struct gl_context *ctx, const char *function)
return false;
}
+ /* 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."
+ *
+ * The OpenGL 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). */
@@ -264,25 +290,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:
*