1 /* $Id: imports.h,v 1.11 2003/01/14 03:05:38 brianp Exp $ */
4 * Mesa 3-D graphics library
7 * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 * This file provides wrappers for all the standard C library functions
30 * like malloc, free, printf, getenv, etc.
38 #define MALLOC(BYTES) _mesa_malloc(BYTES)
39 #define CALLOC(BYTES) _mesa_calloc(BYTES)
40 #define MALLOC_STRUCT(T) (struct T *) _mesa_malloc(sizeof(struct T))
41 #define CALLOC_STRUCT(T) (struct T *) _mesa_calloc(sizeof(struct T))
42 #define FREE(PTR) _mesa_free(PTR)
44 #define ALIGN_MALLOC(BYTES, N) _mesa_align_malloc(BYTES, N)
45 #define ALIGN_CALLOC(BYTES, N) _mesa_align_calloc(BYTES, N)
46 #define ALIGN_MALLOC_STRUCT(T, N) (struct T *) _mesa_align_malloc(sizeof(struct T), N)
47 #define ALIGN_CALLOC_STRUCT(T, N) (struct T *) _mesa_align_calloc(sizeof(struct T), N)
48 #define ALIGN_FREE(PTR) _mesa_align_free(PTR)
50 #define MEMCPY( DST, SRC, BYTES) _mesa_memcpy(DST, SRC, BYTES)
51 #define MEMSET( DST, VAL, N ) _mesa_memset(DST, VAL, N)
52 extern void _mesa_memset16( GLushort
*dst
, GLushort val
, size_t n
);
54 #define MEMSET16( DST, VAL, N ) \
55 _mesa_memset16( (GLushort *) (DST), (GLushort) (VAL), (size_t) (N) )
58 /* MACs and BeOS don't support static larger than 32kb, so... */
59 #if defined(macintosh) && !defined(__MRC__)
60 /*extern char *AGLAlloc(int size);*/
61 /*extern void AGLFree(char* ptr);*/
62 # define DEFARRAY(TYPE,NAME,SIZE) TYPE *NAME = (TYPE*)_mesa_alloc(sizeof(TYPE)*(SIZE))
63 # define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2) TYPE (*NAME)[SIZE2] = (TYPE(*)[SIZE2])_mesa_alloc(sizeof(TYPE)*(SIZE1)*(SIZE2))
64 # define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3) TYPE (*NAME)[SIZE2][SIZE3] = (TYPE(*)[SIZE2][SIZE3])_mesa_alloc(sizeof(TYPE)*(SIZE1)*(SIZE2)*(SIZE3))
66 # define CHECKARRAY(NAME,CMD) do {if (!(NAME)) {CMD;}} while (0)
67 # define UNDEFARRAY(NAME) do {if ((NAME)) {_mesa_free((char*)NAME);} }while (0)
68 #elif defined(__BEOS__)
69 # define DEFARRAY(TYPE,NAME,SIZE) TYPE *NAME = (TYPE*)_mesa_malloc(sizeof(TYPE)*(SIZE))
70 # define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2) TYPE (*NAME)[SIZE2] = (TYPE(*)[SIZE2])_mesa_malloc(sizeof(TYPE)*(SIZE1)*(SIZE2))
71 # define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3) TYPE (*NAME)[SIZE2][SIZE3] = (TYPE(*)[SIZE2][SIZE3])_mesa_malloc(sizeof(TYPE)*(SIZE1)*(SIZE2)*(SIZE3))
72 # define CHECKARRAY(NAME,CMD) do {if (!(NAME)) {CMD;}} while (0)
73 # define UNDEFARRAY(NAME) do {if ((NAME)) {_mesa_free((char*)NAME);} }while (0)
75 # define DEFARRAY(TYPE,NAME,SIZE) TYPE NAME[SIZE]
76 # define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2) TYPE NAME[SIZE1][SIZE2]
77 # define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3) TYPE NAME[SIZE1][SIZE2][SIZE3]
78 # define CHECKARRAY(NAME,CMD) do {} while(0)
79 # define UNDEFARRAY(NAME)
83 #ifdef MESA_EXTERNAL_BUFFERALLOC
85 * If you want Mesa's depth/stencil/accum/etc buffers to be allocated
86 * with a specialized allocator you can define MESA_EXTERNAL_BUFFERALLOC
87 * and implement _ext_mesa_alloc/free_pixelbuffer() in your app.
88 * Contributed by Gerk Huisma (gerk@five-d.demon.nl).
90 extern void *_ext_mesa_alloc_pixelbuffer( unsigned int size
);
91 extern void _ext_mesa_free_pixelbuffer( void *pb
);
93 #define MESA_PBUFFER_ALLOC(BYTES) (void *) _ext_mesa_alloc_pixelbuffer(BYTES)
94 #define MESA_PBUFFER_FREE(PTR) _ext_mesa_free_pixelbuffer(PTR)
96 /* Default buffer allocation uses the aligned allocation routines: */
97 #define MESA_PBUFFER_ALLOC(BYTES) (void *) _mesa_align_malloc(BYTES, 512)
98 #define MESA_PBUFFER_FREE(PTR) _mesa_align_free(PTR)
103 _mesa_malloc( size_t bytes
);
106 _mesa_calloc( size_t bytes
);
109 _mesa_free( void *ptr
);
112 _mesa_align_malloc( size_t bytes
, unsigned long alignment
);
115 _mesa_align_calloc( size_t bytes
, unsigned long alignment
);
118 _mesa_align_free( void *ptr
);
121 _mesa_memcpy( void *dest
, const void *src
, size_t n
);
124 _mesa_memset( void *dst
, int val
, size_t n
);
127 _mesa_memset16( unsigned short *dst
, unsigned short val
, size_t n
);
130 _mesa_bzero( void *dst
, size_t n
);
140 _mesa_sqrt(double x
);
143 _mesa_pow(double x
, double y
);
147 _mesa_getenv( const char *var
);
150 _mesa_strstr( const char *haystack
, const char *needle
);
153 _mesa_strncat( char *dest
, const char *src
, size_t n
);
156 _mesa_strcpy( char *dest
, const char *src
);
159 _mesa_strncpy( char *dest
, const char *src
, size_t n
);
162 _mesa_strlen( const char *s
);
165 _mesa_strcmp( const char *s1
, const char *s2
);
168 _mesa_strncmp( const char *s1
, const char *s2
, size_t n
);
171 _mesa_strdup( const char *s
);
174 _mesa_atoi( const char *s
);
177 _mesa_strtof( const char *s
, char **end
);
180 _mesa_sprintf( char *str
, const char *fmt
, ... );
183 _mesa_printf( const char *fmtString
, ... );
187 _mesa_warning( __GLcontext
*gc
, const char *fmtString
, ... );
190 _mesa_problem( const __GLcontext
*ctx
, const char *fmtString
, ... );
193 _mesa_error( __GLcontext
*ctx
, GLenum error
, const char *fmtString
, ... );
196 _mesa_debug( const __GLcontext
*ctx
, const char *fmtString
, ... );
200 _mesa_init_default_imports( __GLimports
*imports
, void *driverCtx
);
203 #endif /* IMPORTS_H */