[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