[Mesa-dev] [PATCH 1/6] main: Added entry point for glCreateTransformFeedbacks

Laura Ekstrand laura at jlekstrand.net
Mon Feb 2 13:36:12 PST 2015


On Mon, Feb 2, 2015 at 2:58 AM, Martin Peres <martin.peres at linux.intel.com>
wrote:

> v2: Review from Laura Ekstrand
> - generate the name of the gl method once
> - shorten some lines to stay in the 78 chars limit
>
> v3: Review from Fredrik Höglund <fredrik at kde.org>
> - rename gl_mthd_name to func
> - set EverBound in _mesa_create_transform_feedbacks in the dsa case
>
> Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
> ---
>  src/mapi/glapi/gen/ARB_direct_state_access.xml |  7 +++
>  src/mesa/main/tests/dispatch_sanity.cpp        |  1 +
>  src/mesa/main/transformfeedback.c              | 67
> ++++++++++++++++++++------
>  src/mesa/main/transformfeedback.h              |  6 +++
>  4 files changed, 66 insertions(+), 15 deletions(-)
>
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 2fe1638..15b00c2 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -7,6 +7,13 @@
>     <enum name="QUERY_TARGET"    value="0x82EA"/>
>     <enum name="TEXTURE_BINDING" value="0x82EB"/>
>
> +   <!-- Transform Feedback object functions -->
> +
> +  <function name="CreateTransformFeedbacks" offset="assign">
> +      <param name="n" type="GLsizei" />
> +      <param name="ids" type="GLuint *" />
> +   </function>
> +
>     <!-- Texture object functions -->
>
>     <function name="CreateTextures" offset="assign">
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp
> b/src/mesa/main/tests/dispatch_sanity.cpp
> index ee4db45..5e7f7ae 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -955,6 +955,7 @@ const struct function gl_core_functions_possible[] = {
>     { "glClipControl", 45, -1 },
>
>     /* GL_ARB_direct_state_access */
> +   { "glCreateTransformFeedbacks", 45, -1 },
>     { "glCreateTextures", 45, -1 },
>     { "glTextureStorage1D", 45, -1 },
>     { "glTextureStorage2D", 45, -1 },
> diff --git a/src/mesa/main/transformfeedback.c
> b/src/mesa/main/transformfeedback.c
> index a737463..466d401 100644
> --- a/src/mesa/main/transformfeedback.c
> +++ b/src/mesa/main/transformfeedback.c
> @@ -825,25 +825,24 @@ _mesa_lookup_transform_feedback_object(struct
> gl_context *ctx, GLuint name)
>           _mesa_HashLookup(ctx->TransformFeedback.Objects, name);
>  }
>
> -
> -/**
> - * Create new transform feedback objects.   Transform feedback objects
> - * encapsulate the state related to transform feedback to allow quickly
> - * switching state (and drawing the results, below).
> - * Part of GL_ARB_transform_feedback2.
> - */
> -void GLAPIENTRY
> -_mesa_GenTransformFeedbacks(GLsizei n, GLuint *names)
> +void
> +_mesa_create_transform_feedbacks(struct gl_context *ctx, GLsizei n,
> +                                 GLuint *ids, bool dsa)
>  {
>     GLuint first;
> -   GET_CURRENT_CONTEXT(ctx);
> +   const char* func;
> +
> +   if (dsa)
> +      func = "glCreateTransformFeedbacks";
> +   else
> +      func = "glGenTransformFeedbacks";
>
>     if (n < 0) {
> -      _mesa_error(ctx, GL_INVALID_VALUE, "glGenTransformFeedbacks(n <
> 0)");
> +      _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", func);
>        return;
>     }
>
> -   if (!names)
> +   if (!ids)
>        return;
>
>     /* we don't need contiguous IDs, but this might be faster */
> @@ -854,18 +853,56 @@ _mesa_GenTransformFeedbacks(GLsizei n, GLuint *names)
>           struct gl_transform_feedback_object *obj
>              = ctx->Driver.NewTransformFeedback(ctx, first + i);
>           if (!obj) {
> -            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenTransformFeedbacks");
> +            _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);

                ^^
This doesn't line up with ( above.  Mesa uses 3-space identation.

>              return;
>           }
> -         names[i] = first + i;
> +         ids[i] = first + i;
>
Same thing

>           _mesa_HashInsert(ctx->TransformFeedback.Objects, first + i, obj);
> +         if (dsa) {
> +            /* this is normally done at bind time in the non-dsa case */
> +            obj->EverBound = GL_TRUE;
> +         }
>        }
>     }
>     else {
> -      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenTransformFeedbacks");
> +      _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
>
Same thing.

>     }
>  }
>
> +/**
> + * Create new transform feedback objects.   Transform feedback objects
> + * encapsulate the state related to transform feedback to allow quickly
> + * switching state (and drawing the results, below).
> + * Part of GL_ARB_transform_feedback2.
> + */
> +void GLAPIENTRY
> +_mesa_GenTransformFeedbacks(GLsizei n, GLuint *names)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +
> +   /* GenTransformFeedbacks should just reserve the object names that a
> +    * subsequent call to BindTransformFeedback should actively create. For
> +    * the sake of simplicity, we reserve the names and create the objects
> +    * straight away.
> +    */
> +
> +   _mesa_create_transform_feedbacks(ctx, n, names, false);
> +}
> +
> +/**
> + * Create new transform feedback objects.   Transform feedback objects
> + * encapsulate the state related to transform feedback to allow quickly
> + * switching state (and drawing the results, below).
> + * Part of GL_ARB_direct_state_access.
> + */
> +void GLAPIENTRY
> +_mesa_CreateTransformFeedbacks(GLsizei n, GLuint *names)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +
> +   _mesa_create_transform_feedbacks(ctx, n, names, true);
> +}
> +
>
>  /**
>   * Is the given ID a transform feedback object?
> diff --git a/src/mesa/main/transformfeedback.h
> b/src/mesa/main/transformfeedback.h
> index 87f4080..d598533 100644
> --- a/src/mesa/main/transformfeedback.h
> +++ b/src/mesa/main/transformfeedback.h
> @@ -99,9 +99,15 @@ _mesa_init_transform_feedback_object(struct
> gl_transform_feedback_object *obj,
>  struct gl_transform_feedback_object *
>  _mesa_lookup_transform_feedback_object(struct gl_context *ctx, GLuint
> name);
>
> +extern void
> +_mesa_create_transform_feedbacks(struct gl_context *ctx, GLsizei n,
> GLuint *ids, bool dsa);
> +
>  extern void GLAPIENTRY
>  _mesa_GenTransformFeedbacks(GLsizei n, GLuint *names);
>
> +extern void GLAPIENTRY
> +_mesa_CreateTransformFeedbacks(GLsizei n, GLuint *names);
> +
>  extern GLboolean GLAPIENTRY
>  _mesa_IsTransformFeedback(GLuint name);
>
> --
> 2.2.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150202/9985fadf/attachment-0001.html>


More information about the mesa-dev mailing list