[Mesa-dev] [PATCH 1/6] main: Added entry point for glCreateTransformFeedbacks
Martin Peres
martin.peres at linux.intel.com
Thu Jan 29 06:09:18 PST 2015
On 29/01/15 15:37, Fredrik Höglund wrote:
> 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".
Func seems like a good name. Thanks.
>
>> + 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().
Good catch! I'm going to modify my piglit test to check for this
behaviour. Thanks.
>
>> }
>> }
>> 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