[Mesa-dev] [PATCH 03/14] mesa: add begin_transform_feedback() helper

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri Aug 25 09:22:51 UTC 2017



On 08/25/2017 02:36 AM, Timothy Arceri wrote:
> 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.

It was for consistency actually, not for C99.

> 
> 
>> +   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");
> }

Okay, looks good to me!

Thanks for the review.

> 
> 
> 
>>         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