[Mesa-dev] [PATCH 01/17] mesa: Document reasons for allowing XFB drawing modes in GLES 3.1 w/GL_OES_geometry_shader

Ian Romanick idr at freedesktop.org
Wed Aug 24 22:12:27 UTC 2016


From: Ian Romanick <ian.d.romanick at intel.com>

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 at intel.com>
---
 src/mesa/main/api_validate.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 384a8858..b35751e 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -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)) {
-- 
2.5.5



More information about the mesa-dev mailing list