[Mesa-dev] [PATCH 1/6] main: Added entry point for glCreateTransformFeedbacks
Fredrik Höglund
fredrik at kde.org
Thu Jan 29 05:37:39 PST 2015
On Thursday 29 January 2015, Martin Peres wrote:
> v2: Review from Laura Ekstrand
> - generate the name of the gl method once
> - shorten some lines to stay in the 78 chars limit
>
> 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 | 63 ++++++++++++++++++++------
> src/mesa/main/transformfeedback.h | 6 +++
> 4 files changed, 62 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..b0fca48 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* gl_mthd_name;
I would prefer it if you used a simpler name for this variable, such
as "func".
> + if (dsa)
> + gl_mthd_name = "glCreateTransformFeedbacks";
> + else
> + gl_mthd_name = "glGenTransformFeedbacks";
>
> if (n < 0) {
> - _mesa_error(ctx, GL_INVALID_VALUE, "glGenTransformFeedbacks(n < 0)");
> + _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", gl_mthd_name);
> return;
> }
>
> - if (!names)
> + if (!ids)
> return;
>
> /* we don't need contiguous IDs, but this might be faster */
> @@ -854,18 +853,52 @@ _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", gl_mthd_name);
> return;
> }
> - names[i] = first + i;
> + ids[i] = first + i;
> _mesa_HashInsert(ctx->TransformFeedback.Objects, first + i, obj);
You have to set EverBound to true when dsa is true. Otherwise
glIsTransformFeedback() will return false when it's passed an ID that
was created by glCreateTransformFeedbacks().
> }
> }
> else {
> - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenTransformFeedbacks");
> + _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", gl_mthd_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)
> +{
> + 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);
>
>
More information about the mesa-dev
mailing list