summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/api_validate.c
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2015-10-29 00:21:18 -0700
committerKenneth Graunke <kenneth@whitecape.org>2016-08-08 10:01:30 -0700
commit7314007925a25f65d178345dfc6d086c82e9a71e (patch)
treedf692a7b10eac04cc9fee69453c6c0685cf1c612 /src/mesa/main/api_validate.c
parent23b2bcd460c5e91b528913526f16b8e5fd7d4278 (diff)
downloadexternal_mesa3d-7314007925a25f65d178345dfc6d086c82e9a71e.zip
external_mesa3d-7314007925a25f65d178345dfc6d086c82e9a71e.tar.gz
external_mesa3d-7314007925a25f65d178345dfc6d086c82e9a71e.tar.bz2
mesa: Skip ES 3.0/3.1 transform feedback primitive counting error.
This error condition is not implementable when using tessellation or geometry shaders. The text was also removed from the ES 3.2 spec. I believe the intended behavior is to remove the error condition when either OES_geometry_shader or OES_tessellation_shader are exposed. v2: Quote a better part of issue 13 (suggested by Ian). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Diffstat (limited to 'src/mesa/main/api_validate.c')
-rw-r--r--src/mesa/main/api_validate.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 2ee2cd8..ec3cc1b 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -546,8 +546,24 @@ validate_draw_arrays(struct gl_context *ctx, const char *func,
*
* This is in contrast to the behaviour of desktop GL, where the extra
* primitives are silently dropped from the transform feedback buffer.
+ *
+ * This text is removed in ES 3.2, presumably because it's not really
+ * implementable with geometry and tessellation shaders. In fact,
+ * the OES_geometry_shader spec says:
+ *
+ * "(13) Does this extension change how transform feedback operates
+ * compared to unextended OpenGL ES 3.0 or 3.1?
+ *
+ * RESOLVED: Yes. Because dynamic geometry amplification in a geometry
+ * shader can make it difficult if not impossible to predict the amount
+ * of geometry that may be generated in advance of executing the shader,
+ * the draw-time error for transform feedback buffer overflow conditions
+ * is removed and replaced with the GL behavior (primitives are not
+ * written and the corresponding counter is not updated)..."
*/
- if (_mesa_is_gles3(ctx) && _mesa_is_xfb_active_and_unpaused(ctx)) {
+ if (_mesa_is_gles3(ctx) && _mesa_is_xfb_active_and_unpaused(ctx) &&
+ !_mesa_has_OES_geometry_shader(ctx) &&
+ !_mesa_has_OES_tessellation_shader(ctx)) {
size_t prim_count = vbo_count_tessellated_primitives(mode, count, 1);
if (xfb_obj->GlesRemainingPrims < prim_count) {
_mesa_error(ctx, GL_INVALID_OPERATION,