OSDN Git Service

mesa: Document reasons for allowing XFB drawing modes in GLES 3.1 w/GL_OES_geometry_s...
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 23 May 2016 22:29:14 +0000 (15:29 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 26 Aug 2016 22:03:14 +0000 (15:03 -0700)
Originally this patch added the checks to allow the draw calls with XFB,
but commit 2dabd497 beat me to it.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/main/api_validate.c

index 384a885..b35751e 100644 (file)
@@ -396,12 +396,30 @@ validate_DrawElements_common(struct gl_context *ctx,
                              const GLvoid *indices,
                              const char *caller)
 {
-   /* From the GLES3 specification, section 2.14.2 (Transform Feedback
-    * Primitive Capture):
+   /* Section 2.14.2 (Transform Feedback Primitive Capture) of the OpenGL ES
+    * 3.1 spec says:
     *
     *   The error INVALID_OPERATION is also generated by DrawElements,
     *   DrawElementsInstanced, and DrawRangeElements while transform feedback
     *   is active and not paused, regardless of mode.
+    *
+    * The OES_geometry_shader_spec says:
+    *
+    *    Issues:
+    *
+    *    ...
+    *
+    *    (13) Does this extension change how transform feedback operates
+    *    compared to unextended OpenGL ES 3.0 or 3.1?
+    *
+    *    RESOLVED: Yes... Since we no longer require being able to predict how
+    *    much geometry will be generated, we also lift the restriction that
+    *    only DrawArray* commands are supported and also support the
+    *    DrawElements* commands for transform feedback.
+    *
+    * This should also be reflected in the body of the spec, but that appears
+    * to have been overlooked.  The body of the spec only explicitly allows
+    * the indirect versions.
     */
    if (_mesa_is_gles3(ctx) && !ctx->Extensions.OES_geometry_shader &&
        _mesa_is_xfb_active_and_unpaused(ctx)) {
@@ -730,6 +748,17 @@ valid_draw_indirect(struct gl_context *ctx,
     *
     *      "An INVALID_OPERATION error is generated if
     *      transform feedback is active and not paused."
+    *
+    * The OES_geometry_shader spec says:
+    *
+    *    On p. 250 in the errors section for the DrawArraysIndirect command,
+    *    and on p. 254 in the errors section for the DrawElementsIndirect
+    *    command, delete the errors which state:
+    *
+    *    "An INVALID_OPERATION error is generated if transform feedback is
+    *    active and not paused."
+    *
+    *    (thus allowing transform feedback to work with indirect draw commands).
     */
    if (_mesa_is_gles31(ctx) && !ctx->Extensions.OES_geometry_shader &&
        _mesa_is_xfb_active_and_unpaused(ctx)) {