[Mesa-dev] [PATCH 2/2] mesa: move glDraw-related functions into new draw.[ch] files

Ian Romanick idr at freedesktop.org
Thu Nov 14 15:14:41 PST 2013


	On 11/13/2013 10:38 AM, Brian Paul wrote:
> To trim down the varray.c file so it's just vertex array functions.

Is that the only motivation?  This will prevent us from optimizing the
implementation of, say, _mesa_MultiDrawArrays.  It also seems weird that
_mesa_MultiDrawModeDrawArraysIBM and _mesa_MultiDrawElementsEXT are in
different .c files but the same .h file.

> ---
>  src/mapi/glapi/gen/gl_genexec.py     |    1 +
>  src/mesa/Makefile.sources            |    1 +
>  src/mesa/SConscript                  |    1 +
>  src/mesa/drivers/common/meta.c       |    1 +
>  src/mesa/main/draw.c                 |  136 ++++++++++++++++++++++++++++++++++
>  src/mesa/main/draw.h                 |   87 ++++++++++++++++++++++
>  src/mesa/main/varray.c               |  105 --------------------------
>  src/mesa/main/varray.h               |   55 --------------
>  src/mesa/vbo/vbo_exec_array.c        |    1 +
>  src/mesa/vbo/vbo_primitive_restart.c |    2 +-
>  10 files changed, 229 insertions(+), 161 deletions(-)
>  create mode 100644 src/mesa/main/draw.c
>  create mode 100644 src/mesa/main/draw.h
> 
> diff --git a/src/mapi/glapi/gen/gl_genexec.py b/src/mapi/glapi/gen/gl_genexec.py
> index 3ce190f..516acc3 100644
> --- a/src/mapi/glapi/gen/gl_genexec.py
> +++ b/src/mapi/glapi/gen/gl_genexec.py
> @@ -62,6 +62,7 @@ header = """/**
>  #include "main/convolve.h"
>  #include "main/depth.h"
>  #include "main/dlist.h"
> +#include "main/draw.h"
>  #include "main/drawpix.h"
>  #include "main/drawtex.h"
>  #include "main/rastpos.h"
> diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
> index a84f8a7..d400fb9 100644
> --- a/src/mesa/Makefile.sources
> +++ b/src/mesa/Makefile.sources
> @@ -30,6 +30,7 @@ MAIN_FILES = \
>  	$(SRCDIR)main/debug.c \
>  	$(SRCDIR)main/depth.c \
>  	$(SRCDIR)main/dlist.c \
> +	$(SRCDIR)main/draw.c \
>  	$(SRCDIR)main/drawpix.c \
>  	$(SRCDIR)main/drawtex.c \
>  	$(SRCDIR)main/enable.c \
> diff --git a/src/mesa/SConscript b/src/mesa/SConscript
> index 4213498..64e19aa 100644
> --- a/src/mesa/SConscript
> +++ b/src/mesa/SConscript
> @@ -61,6 +61,7 @@ main_sources = [
>      'main/debug.c',
>      'main/depth.c',
>      'main/dlist.c',
> +    'main/draw.c',
>      'main/drawpix.c',
>      'main/drawtex.c',
>      'main/enable.c',
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index 99b02ba..d04d9eb 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -42,6 +42,7 @@
>  #include "main/colortab.h"
>  #include "main/condrender.h"
>  #include "main/depth.h"
> +#include "main/draw.h"
>  #include "main/enable.h"
>  #include "main/fbobject.h"
>  #include "main/feedback.h"
> diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c
> new file mode 100644
> index 0000000..6b8c58b
> --- /dev/null
> +++ b/src/mesa/main/draw.c
> @@ -0,0 +1,136 @@
> +/*
> + * Mesa 3-D graphics library
> + *
> + * Copyright (C) 2013  VMware, Inc.  All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included
> + * in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + * OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +
> +#include "context.h"
> +#include "dispatch.h"
> +#include "draw.h"
> +
> +
> +/* GL_EXT_multi_draw_arrays */
> +void GLAPIENTRY
> +_mesa_MultiDrawArrays(GLenum mode, const GLint *first,
> +                      const GLsizei *count, GLsizei primcount)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +   GLint i;
> +
> +   FLUSH_VERTICES(ctx, 0);
> +
> +   for (i = 0; i < primcount; i++) {
> +      if (count[i] > 0) {
> +         CALL_DrawArrays(ctx->Exec, (mode, first[i], count[i]));
> +      }
> +   }
> +}
> +
> +
> +/* GL_IBM_multimode_draw_arrays */
> +void GLAPIENTRY
> +_mesa_MultiModeDrawArraysIBM(const GLenum *mode, const GLint *first,
> +			     const GLsizei *count,
> +			     GLsizei primcount, GLint modestride)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +   GLint i;
> +
> +   FLUSH_VERTICES(ctx, 0);
> +
> +   for (i = 0 ; i < primcount ; i++) {
> +      if (count[i] > 0) {
> +         GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride));
> +	 CALL_DrawArrays(ctx->Exec, (m, first[i], count[i]));
> +      }
> +   }
> +}
> +
> +
> +/* GL_IBM_multimode_draw_arrays */
> +void GLAPIENTRY
> +_mesa_MultiModeDrawElementsIBM(const GLenum *mode, const GLsizei *count,
> +                               GLenum type, const GLvoid * const *indices,
> +                               GLsizei primcount, GLint modestride)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +   GLint i;
> +
> +   FLUSH_VERTICES(ctx, 0);
> +
> +   /* XXX not sure about ARB_vertex_buffer_object handling here */
> +
> +   for (i = 0 ; i < primcount ; i++) {
> +      if (count[i] > 0) {
> +         GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride));
> +	 CALL_DrawElements(ctx->Exec, (m, count[i], type, indices[i]));
> +      }
> +   }
> +}
> +
> +
> +/**
> + * GL_NV_primitive_restart and GL 3.1
> + */
> +void GLAPIENTRY
> +_mesa_PrimitiveRestartIndex(GLuint index)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +
> +   if (!ctx->Extensions.NV_primitive_restart && ctx->Version < 31) {
> +      _mesa_error(ctx, GL_INVALID_OPERATION, "glPrimitiveRestartIndexNV()");
> +      return;
> +   }
> +
> +   if (ctx->Array.RestartIndex != index) {
> +      FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
> +      ctx->Array.RestartIndex = index;
> +   }
> +}
> +
> +
> +/**
> + * Returns the current/active primitive restart index value.
> + */
> +unsigned
> +_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type)
> +{
> +   /* From the OpenGL 4.3 core specification, page 302:
> +    * "If both PRIMITIVE_RESTART and PRIMITIVE_RESTART_FIXED_INDEX are
> +    *  enabled, the index value determined by PRIMITIVE_RESTART_FIXED_INDEX
> +    *  is used."
> +    */
> +   if (ctx->Array.PrimitiveRestartFixedIndex) {
> +      switch (ib_type) {
> +      case GL_UNSIGNED_BYTE:
> +         return 0xff;
> +      case GL_UNSIGNED_SHORT:
> +         return 0xffff;
> +      case GL_UNSIGNED_INT:
> +         return 0xffffffff;
> +      default:
> +         assert(!"_mesa_primitive_restart_index: Invalid index buffer type.");
> +      }
> +   }
> +
> +   return ctx->Array.RestartIndex;
> +}
> diff --git a/src/mesa/main/draw.h b/src/mesa/main/draw.h
> new file mode 100644
> index 0000000..fc5679c
> --- /dev/null
> +++ b/src/mesa/main/draw.h
> @@ -0,0 +1,87 @@
> +/*
> + * Mesa 3-D graphics library
> + *
> + * Copyright (C) 2013  VMware, Inc.  All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included
> + * in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + * OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +
> +#ifndef DRAW_H
> +#define DRAW_H
> +
> +
> +#include "glheader.h"
> +
> +
> +extern void GLAPIENTRY
> +_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count);
> +
> +extern void GLAPIENTRY
> +_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type,
> +                   const GLvoid *indices);
> +
> +extern void GLAPIENTRY
> +_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count,
> +                        GLenum type, const GLvoid *indices);
> +
> +extern void GLAPIENTRY
> +_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
> +			     const GLvoid *indices, GLint basevertex);
> +
> +extern void GLAPIENTRY
> +_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end,
> +				  GLsizei count, GLenum type,
> +				  const GLvoid *indices, GLint basevertex);
> +
> +extern void GLAPIENTRY
> +_mesa_DrawTransformFeedback(GLenum mode, GLuint name);
> +
> +
> +extern void GLAPIENTRY
> +_mesa_MultiDrawArrays(GLenum mode, const GLint *first,
> +                      const GLsizei *count, GLsizei primcount);
> +
> +extern void GLAPIENTRY
> +_mesa_MultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type,
> +                           const GLvoid **indices, GLsizei primcount);
> +
> +extern void GLAPIENTRY
> +_mesa_MultiDrawElementsBaseVertex(GLenum mode, const GLsizei *count,
> +                                  GLenum type, const GLvoid **indices,
> +                                  GLsizei primcount, const GLint *basevertex);
> +
> +extern void GLAPIENTRY
> +_mesa_MultiModeDrawArraysIBM(const GLenum *mode, const GLint *first,
> +                             const GLsizei *count,
> +                             GLsizei primcount, GLint modestride);
> +
> +
> +extern void GLAPIENTRY
> +_mesa_MultiModeDrawElementsIBM(const GLenum *mode, const GLsizei *count,
> +                               GLenum type, const GLvoid * const *indices,
> +                               GLsizei primcount, GLint modestride);
> +
> +extern void GLAPIENTRY
> +_mesa_PrimitiveRestartIndex(GLuint index);
> +
> +extern unsigned
> +_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type);
> +
> +#endif /* DRAW_H */
> diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
> index 0f38270..3786c74 100644
> --- a/src/mesa/main/varray.c
> +++ b/src/mesa/main/varray.c
> @@ -1211,86 +1211,6 @@ _mesa_UnlockArraysEXT( void )
>  }
>  
>  
> -/* GL_EXT_multi_draw_arrays */
> -void GLAPIENTRY
> -_mesa_MultiDrawArrays( GLenum mode, const GLint *first,
> -                          const GLsizei *count, GLsizei primcount )
> -{
> -   GET_CURRENT_CONTEXT(ctx);
> -   GLint i;
> -
> -   FLUSH_VERTICES(ctx, 0);
> -
> -   for (i = 0; i < primcount; i++) {
> -      if (count[i] > 0) {
> -         CALL_DrawArrays(ctx->Exec, (mode, first[i], count[i]));
> -      }
> -   }
> -}
> -
> -
> -/* GL_IBM_multimode_draw_arrays */
> -void GLAPIENTRY
> -_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first,
> -			      const GLsizei * count,
> -			      GLsizei primcount, GLint modestride )
> -{
> -   GET_CURRENT_CONTEXT(ctx);
> -   GLint i;
> -
> -   FLUSH_VERTICES(ctx, 0);
> -
> -   for ( i = 0 ; i < primcount ; i++ ) {
> -      if ( count[i] > 0 ) {
> -         GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride));
> -	 CALL_DrawArrays(ctx->Exec, ( m, first[i], count[i] ));
> -      }
> -   }
> -}
> -
> -
> -/* GL_IBM_multimode_draw_arrays */
> -void GLAPIENTRY
> -_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
> -				GLenum type, const GLvoid * const * indices,
> -				GLsizei primcount, GLint modestride )
> -{
> -   GET_CURRENT_CONTEXT(ctx);
> -   GLint i;
> -
> -   FLUSH_VERTICES(ctx, 0);
> -
> -   /* XXX not sure about ARB_vertex_buffer_object handling here */
> -
> -   for ( i = 0 ; i < primcount ; i++ ) {
> -      if ( count[i] > 0 ) {
> -         GLenum m = *((GLenum *) ((GLubyte *) mode + i * modestride));
> -	 CALL_DrawElements(ctx->Exec, ( m, count[i], type, indices[i] ));
> -      }
> -   }
> -}
> -
> -
> -/**
> - * GL_NV_primitive_restart and GL 3.1
> - */
> -void GLAPIENTRY
> -_mesa_PrimitiveRestartIndex(GLuint index)
> -{
> -   GET_CURRENT_CONTEXT(ctx);
> -
> -   if (!ctx->Extensions.NV_primitive_restart && ctx->Version < 31) {
> -      _mesa_error(ctx, GL_INVALID_OPERATION, "glPrimitiveRestartIndexNV()");
> -      return;
> -   }
> -
> -   if (ctx->Array.RestartIndex != index) {
> -      FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
> -      ctx->Array.RestartIndex = index;
> -   }
> -}
> -
> -
>  /**
>   * See GL_ARB_instanced_arrays.
>   * Note that the instance divisor only applies to generic arrays, not
> @@ -1332,31 +1252,6 @@ _mesa_VertexAttribDivisor(GLuint index, GLuint divisor)
>  }
>  
>  
> -unsigned
> -_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type)
> -{
> -   /* From the OpenGL 4.3 core specification, page 302:
> -    * "If both PRIMITIVE_RESTART and PRIMITIVE_RESTART_FIXED_INDEX are
> -    *  enabled, the index value determined by PRIMITIVE_RESTART_FIXED_INDEX
> -    *  is used."
> -    */
> -   if (ctx->Array.PrimitiveRestartFixedIndex) {
> -      switch (ib_type) {
> -      case GL_UNSIGNED_BYTE:
> -         return 0xff;
> -      case GL_UNSIGNED_SHORT:
> -         return 0xffff;
> -      case GL_UNSIGNED_INT:
> -         return 0xffffffff;
> -      default:
> -         assert(!"_mesa_primitive_restart_index: Invalid index buffer type.");
> -      }
> -   }
> -
> -   return ctx->Array.RestartIndex;
> -}
> -
> -
>  /**
>   * GL_ARB_vertex_attrib_binding
>   */
> diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
> index bc820ed..83ebcc1 100644
> --- a/src/mesa/main/varray.h
> +++ b/src/mesa/main/varray.h
> @@ -221,31 +221,6 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer);
>  
>  
>  extern void GLAPIENTRY
> -_mesa_MultiDrawArrays( GLenum mode, const GLint *first,
> -                          const GLsizei *count, GLsizei primcount );
> -
> -extern void GLAPIENTRY
> -_mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type,
> -                            const GLvoid **indices, GLsizei primcount );
> -
> -extern void GLAPIENTRY
> -_mesa_MultiDrawElementsBaseVertex( GLenum mode,
> -				   const GLsizei *count, GLenum type,
> -				   const GLvoid **indices, GLsizei primcount,
> -				   const GLint *basevertex);
> -
> -extern void GLAPIENTRY
> -_mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first,
> -			      const GLsizei * count,
> -			      GLsizei primcount, GLint modestride );
> -
> -
> -extern void GLAPIENTRY
> -_mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
> -				GLenum type, const GLvoid * const * indices,
> -				GLsizei primcount, GLint modestride );
> -
> -extern void GLAPIENTRY
>  _mesa_LockArraysEXT(GLint first, GLsizei count);
>  
>  extern void GLAPIENTRY
> @@ -253,38 +228,8 @@ _mesa_UnlockArraysEXT( void );
>  
>  
>  extern void GLAPIENTRY
> -_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count);
> -
> -extern void GLAPIENTRY
> -_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type,
> -                   const GLvoid *indices);
> -
> -extern void GLAPIENTRY
> -_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count,
> -                        GLenum type, const GLvoid *indices);
> -
> -extern void GLAPIENTRY
> -_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
> -			     const GLvoid *indices, GLint basevertex);
> -
> -extern void GLAPIENTRY
> -_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end,
> -				  GLsizei count, GLenum type,
> -				  const GLvoid *indices,
> -				  GLint basevertex);
> -
> -extern void GLAPIENTRY
> -_mesa_DrawTransformFeedback(GLenum mode, GLuint name);
> -
> -extern void GLAPIENTRY
> -_mesa_PrimitiveRestartIndex(GLuint index);
> -
> -
> -extern void GLAPIENTRY
>  _mesa_VertexAttribDivisor(GLuint index, GLuint divisor);
>  
> -extern unsigned
> -_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type);
>  
>  extern void GLAPIENTRY
>  _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset,
> diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
> index d723823..286a03c 100644
> --- a/src/mesa/vbo/vbo_exec_array.c
> +++ b/src/mesa/vbo/vbo_exec_array.c
> @@ -28,6 +28,7 @@
>  
>  #include "main/glheader.h"
>  #include "main/context.h"
> +#include "main/draw.h"
>  #include "main/state.h"
>  #include "main/api_validate.h"
>  #include "main/dispatch.h"
> diff --git a/src/mesa/vbo/vbo_primitive_restart.c b/src/mesa/vbo/vbo_primitive_restart.c
> index 418f882..d84ba19 100644
> --- a/src/mesa/vbo/vbo_primitive_restart.c
> +++ b/src/mesa/vbo/vbo_primitive_restart.c
> @@ -30,8 +30,8 @@
>  
>  #include "main/imports.h"
>  #include "main/bufferobj.h"
> +#include "main/draw.h"
>  #include "main/macros.h"
> -#include "main/varray.h"
>  
>  #include "vbo.h"
>  #include "vbo_context.h"
> 



More information about the mesa-dev mailing list