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 limitSigned-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 | 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);
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev