[Mesa-dev] [PATCH 2/6] mesa: inline _mesa_align_{re, c}alloc into their only users

Emil Velikov emil.l.velikov at gmail.com
Fri Mar 6 08:32:51 PST 2015


Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
 src/mesa/main/imports.c           | 74 +--------------------------------------
 src/mesa/main/imports.h           |  7 ----
 src/mesa/program/prog_parameter.c | 18 +++++++---
 src/mesa/tnl/t_vertex.c           |  5 ++-
 4 files changed, 18 insertions(+), 86 deletions(-)

diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c
index a7ffe22..5961587 100644
--- a/src/mesa/main/imports.c
+++ b/src/mesa/main/imports.c
@@ -115,57 +115,7 @@ _mesa_align_malloc(size_t bytes, unsigned long alignment)
 }
 
 /**
- * Same as _mesa_align_malloc(), but using calloc(1, ) instead of
- * malloc()
- */
-void *
-_mesa_align_calloc(size_t bytes, unsigned long alignment)
-{
-#if defined(HAVE_POSIX_MEMALIGN)
-   void *mem;
-   
-   mem = _mesa_align_malloc(bytes, alignment);
-   if (mem != NULL) {
-      (void) memset(mem, 0, bytes);
-   }
-
-   return mem;
-#elif defined(_WIN32) && defined(_MSC_VER)
-   void *mem;
-
-   mem = _aligned_malloc(bytes, alignment);
-   if (mem != NULL) {
-      (void) memset(mem, 0, bytes);
-   }
-
-   return mem;
-#else
-   uintptr_t ptr, buf;
-
-   assert( alignment > 0 );
-
-   ptr = (uintptr_t)calloc(1, bytes + alignment + sizeof(void *));
-   if (!ptr)
-      return NULL;
-
-   buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1);
-   *(uintptr_t *)(buf - sizeof(void *)) = ptr;
-
-#ifdef DEBUG
-   /* mark the non-aligned area */
-   while ( ptr < buf - sizeof(void *) ) {
-      *(unsigned long *)ptr = 0xcdcdcdcd;
-      ptr += sizeof(unsigned long);
-   }
-#endif
-
-   return (void *)buf;
-#endif /* defined(HAVE_POSIX_MEMALIGN) */
-}
-
-/**
- * Free memory which was allocated with either _mesa_align_malloc()
- * or _mesa_align_calloc().
+ * Free memory which was allocated with either _mesa_align_malloc().
  * \param ptr pointer to the memory to be freed.
  * The actual address to free is stored in the word immediately before the
  * address the client sees.
@@ -188,28 +138,6 @@ _mesa_align_free(void *ptr)
 #endif /* defined(HAVE_POSIX_MEMALIGN) */
 }
 
-/**
- * Reallocate memory, with alignment.
- */
-void *
-_mesa_align_realloc(void *oldBuffer, size_t oldSize, size_t newSize,
-                    unsigned long alignment)
-{
-#if defined(_WIN32) && defined(_MSC_VER)
-   (void) oldSize;
-   return _aligned_realloc(oldBuffer, newSize, alignment);
-#else
-   const size_t copySize = (oldSize < newSize) ? oldSize : newSize;
-   void *newBuf = _mesa_align_malloc(newSize, alignment);
-   if (newBuf && oldBuffer && copySize > 0) {
-      memcpy(newBuf, oldBuffer, copySize);
-   }
-
-   _mesa_align_free(oldBuffer);
-   return newBuf;
-#endif
-}
-
 /*@}*/
 
 
diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h
index 7921000..a3767fd 100644
--- a/src/mesa/main/imports.h
+++ b/src/mesa/main/imports.h
@@ -363,17 +363,10 @@ _mesa_little_endian(void)
 extern void *
 _mesa_align_malloc( size_t bytes, unsigned long alignment );
 
-extern void *
-_mesa_align_calloc( size_t bytes, unsigned long alignment );
-
 extern void
 _mesa_align_free( void *ptr );
 
 extern void *
-_mesa_align_realloc(void *oldBuffer, size_t oldSize, size_t newSize,
-                    unsigned long alignment);
-
-extern void *
 _mesa_exec_malloc( GLuint size );
 
 extern void 
diff --git a/src/mesa/program/prog_parameter.c b/src/mesa/program/prog_parameter.c
index 5939f6f..edb5389 100644
--- a/src/mesa/program/prog_parameter.c
+++ b/src/mesa/program/prog_parameter.c
@@ -116,19 +116,27 @@ _mesa_add_parameter(struct gl_program_parameter_list *paramList,
    assert(size > 0);
 
    if (oldNum + sz4 > paramList->Size) {
+      size_t newSize, copySize;
+      void *newBuf;
+
       /* Need to grow the parameter list array (alloc some extra) */
       paramList->Size = paramList->Size + 4 * sz4;
 
+      newSize = paramList->Size * 4 * sizeof(gl_constant_value);
+      copySize = MIN2(oldNum * 4 * sizeof(gl_constant_value), newSize);
+
       /* realloc arrays */
       paramList->Parameters =
          realloc(paramList->Parameters,
                  paramList->Size * sizeof(struct gl_program_parameter));
 
-      paramList->ParameterValues = (gl_constant_value (*)[4])
-         _mesa_align_realloc(paramList->ParameterValues,         /* old buf */
-                             oldNum * 4 * sizeof(gl_constant_value),/* old sz */
-                             paramList->Size*4*sizeof(gl_constant_value),/*new*/
-                             16);
+      newBuf = _mesa_align_malloc(newSize, 16);
+      if (newBuf && paramList->ParameterValues && copySize > 0) {
+         memcpy(newBuf, paramList->ParameterValues, copySize);
+      }
+
+      _mesa_align_free(paramList->ParameterValues);
+      paramList->ParameterValues = (gl_constant_value (*)[4]) newBuf;
    }
 
    if (!paramList->Parameters ||
diff --git a/src/mesa/tnl/t_vertex.c b/src/mesa/tnl/t_vertex.c
index 369d6d9..607977c 100644
--- a/src/mesa/tnl/t_vertex.c
+++ b/src/mesa/tnl/t_vertex.c
@@ -26,6 +26,7 @@
  */
 
 #include <stdio.h>
+#include <string.h>
 #include "main/glheader.h"
 #include "main/context.h"
 #include "main/colormac.h"
@@ -509,9 +510,11 @@ void _tnl_init_vertices( struct gl_context *ctx,
 
    vtx->need_extras = GL_TRUE;
    if (max_vertex_size > vtx->max_vertex_size) {
+      const size_t total_vb_size = vb_size * max_vertex_size;
       _tnl_free_vertices( ctx );
       vtx->max_vertex_size = max_vertex_size;
-      vtx->vertex_buf = _mesa_align_calloc(vb_size * max_vertex_size, 32 );
+      vtx->vertex_buf =
+         memset(_mesa_align_malloc(total_vb_size, 32), 0, total_vb_size);
       invalidate_funcs(vtx);
    }
 
-- 
2.1.3



More information about the mesa-dev mailing list