Looks good to me Reviewed-by: Laura Ekstrand <la...@jlekstrand.net>
On Mon, Feb 16, 2015 at 6:13 AM, Martin Peres <martin.pe...@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 <fred...@kde.org> > - rename gl_mthd_name to func > - set EverBound in _mesa_create_transform_feedbacks in the dsa case > > v4: > - rename _mesa_create_transform_feedbacks to create_transform_feedbacks and > make it static > > Signed-off-by: Martin Peres <martin.pe...@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 | 3 ++ > 4 files changed, 63 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 1f1a3a8..bf320bf 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..10bb6a1 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) > +static void > +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); > return; > } > - names[i] = first + i; > + ids[i] = first + i; > _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); > } > } > > +/** > + * 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. > + */ > + > + 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); > + > + 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..9de1fef 100644 > --- a/src/mesa/main/transformfeedback.h > +++ b/src/mesa/main/transformfeedback.h > @@ -102,6 +102,9 @@ _mesa_lookup_transform_feedback_object(struct > gl_context *ctx, GLuint name); > 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.3.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev