[Mesa-dev] [PATCH 03/14] mesa: add begin_transform_feedback() helper
Timothy Arceri
tarceri at itsqueeze.com
Fri Aug 25 00:36:16 UTC 2017
On 24/08/17 23:21, Samuel Pitoiset wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/mesa/main/transformfeedback.c | 49 ++++++++++++++++++++++++---------------
> 1 file changed, 30 insertions(+), 19 deletions(-)
>
> diff --git a/src/mesa/main/transformfeedback.c b/src/mesa/main/transformfeedback.c
> index 307728c399..b217d0d84a 100644
> --- a/src/mesa/main/transformfeedback.c
> +++ b/src/mesa/main/transformfeedback.c
> @@ -381,22 +381,22 @@ get_xfb_source(struct gl_context *ctx)
> }
>
>
> -void GLAPIENTRY
> -_mesa_BeginTransformFeedback(GLenum mode)
> +static ALWAYS_INLINE void
> +begin_transform_feedback(struct gl_context *ctx, GLenum mode, bool no_error)
> {
> struct gl_transform_feedback_object *obj;
> struct gl_transform_feedback_info *info = NULL;
> + struct gl_program *source;
> GLuint i;
> unsigned vertices_per_prim;
> - GET_CURRENT_CONTEXT(ctx);
>
> obj = ctx->TransformFeedback.CurrentObject;
>
> /* Figure out what pipeline stage is the source of data for transform
> * feedback.
> */
> - struct gl_program *source = get_xfb_source(ctx);
> - if (source == NULL) {
> + source = get_xfb_source(ctx);
Personally I would rather this left as is. We no longer have to bend to
MCVSs refusal to support C99 for so many years.
> + if (!no_error && source == NULL) {
> _mesa_error(ctx, GL_INVALID_OPERATION,
> "glBeginTransformFeedback(no program active)");
> return;
> @@ -404,7 +404,7 @@ _mesa_BeginTransformFeedback(GLenum mode)
>
> info = source->sh.LinkedTransformFeedback;
>
> - if (info->NumOutputs == 0) {
> + if (!no_error && info->NumOutputs == 0) {
> _mesa_error(ctx, GL_INVALID_OPERATION,
> "glBeginTransformFeedback(no varyings to record)");
> return;
> @@ -421,23 +421,26 @@ _mesa_BeginTransformFeedback(GLenum mode)
> vertices_per_prim = 3;
> break;
> default:
> - _mesa_error(ctx, GL_INVALID_ENUM, "glBeginTransformFeedback(mode)");
> + if (!no_error)
> + _mesa_error(ctx, GL_INVALID_ENUM, "glBeginTransformFeedback(mode)");
You should be able to make this something like:
if (!no_error) {
_mesa_error(ctx, GL_INVALID_ENUM, "glBeginTransformFeedback(mode)");
return;
} else {
/* Stop compiler warnings */
unreachable("Error in API use when using KHR_no_error");
}
> return;
> }
>
> - if (obj->Active) {
> - _mesa_error(ctx, GL_INVALID_OPERATION,
> - "glBeginTransformFeedback(already active)");
> - return;
> - }
> + if (!no_error) {
> + if (obj->Active) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glBeginTransformFeedback(already active)");
> + return;
> + }
>
> - for (i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) {
> - if ((info->ActiveBuffers >> i) & 1) {
> - if (obj->BufferNames[i] == 0) {
> - _mesa_error(ctx, GL_INVALID_OPERATION,
> - "glBeginTransformFeedback(binding point %d does not "
> - "have a buffer object bound)", i);
> - return;
> + for (i = 0; i < ctx->Const.MaxTransformFeedbackBuffers; i++) {
> + if ((info->ActiveBuffers >> i) & 1) {
> + if (obj->BufferNames[i] == 0) {
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glBeginTransformFeedback(binding point %d does not "
> + "have a buffer object bound)", i);
> + return;
> + }
> }
> }
> }
> @@ -472,6 +475,14 @@ _mesa_BeginTransformFeedback(GLenum mode)
> }
>
>
> +void GLAPIENTRY
> +_mesa_BeginTransformFeedback(GLenum mode)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> + begin_transform_feedback(ctx, mode, false);
> +}
> +
> +
> void GLAPIENTRY
> _mesa_EndTransformFeedback(void)
> {
>
More information about the mesa-dev
mailing list