Port Mesa to build on a P64 platform (e.g., Win64). P64 platforms
authorKarl Schultz <kschultz@freedesktop.org>
Thu, 5 May 2005 21:08:07 +0000 (21:08 +0000)
committerKarl Schultz <kschultz@freedesktop.org>
Thu, 5 May 2005 21:08:07 +0000 (21:08 +0000)
use 64-bit pointers and 32-bit longs.  So, operations like casting pointers
to unsigned long and back to pointer won't work.  glheader.h now
includes files to define uintptr_t, which should instead be used for
this sort of operation.  It is an integer type that is the same size
as a pointer.

15 files changed:
src/mesa/main/api_arrayelt.c
src/mesa/main/bufferobj.c
src/mesa/main/extensions.c
src/mesa/main/glheader.h
src/mesa/main/imports.c
src/mesa/main/imports.h
src/mesa/main/texstore.c
src/mesa/math/m_translate.c
src/mesa/shader/arbprogparse.c
src/mesa/shader/arbprogram.c
src/mesa/shader/grammar.h
src/mesa/shader/grammar_mesa.c
src/mesa/shader/nvfragparse.c
src/mesa/shader/nvprogram.c
src/mesa/shader/nvvertparse.c

index cb827c2ec9c8ee7d03914b27790f503748c88c3c..6a531aa2aad8e731dc66b39a4a4d272b12ba0ef0 100644 (file)
@@ -989,7 +989,7 @@ void GLAPIENTRY _ae_loopback_array_elt( GLint elt )
    /* generic attributes */
    for (at = actx->attribs; at->func; at++) {
       const GLubyte *src = at->array->BufferObj->Data
-                         + (unsigned long) at->array->Ptr
+                         + (uintptr_t) at->array->Ptr
                          + elt * at->array->StrideB;
       at->func( at->index, src );
    }
@@ -997,7 +997,7 @@ void GLAPIENTRY _ae_loopback_array_elt( GLint elt )
    /* conventional arrays */
    for (aa = actx->arrays; aa->func ; aa++) {
       const GLubyte *src = aa->array->BufferObj->Data
-                         + (unsigned long) aa->array->Ptr
+                         + (uintptr_t) aa->array->Ptr
                          + elt * aa->array->StrideB;
       aa->func( src );
    }
index 07b2341ff7a4f9f03b6e0982e000cc6f15970b6d..a1d4c0190a133141763d939a4db84c493edf7bc3 100644 (file)
@@ -449,11 +449,11 @@ _mesa_validate_pbo_access(GLuint dimensions,
                               format, type, depth-1, height-1, width);
 
 
-   if ((const GLubyte *) start > (const GLubyte *) pack->BufferObj->Size) {
+   if ((const GLubyte *) start > (const GLubyte *)(uintptr_t) pack->BufferObj->Size) {
       /* This will catch negative values / wrap-around */
       return GL_FALSE;
    }
-   if ((const GLubyte *) end > (const GLubyte *) pack->BufferObj->Size) {
+   if ((const GLubyte *) end > (const GLubyte *)(uintptr_t) pack->BufferObj->Size) {
       /* Image read goes beyond end of buffer */
       return GL_FALSE;
    }
index 150492e7c30bd01b4415ce94fa84653b16ff71b5..8f6b554a47818f1df91e70ddc5d37b63e812f4c6 100644 (file)
@@ -31,7 +31,7 @@
 #include "mtypes.h"
 
 
-#define F(x) (int)(unsigned long)&(((struct gl_extensions *)0)->x)
+#define F(x) (int)(uintptr_t)&(((struct gl_extensions *)0)->x)
 #define ON GL_TRUE
 #define OFF GL_FALSE
 
@@ -489,7 +489,7 @@ _mesa_make_extension_string( GLcontext *ctx )
    for (i = 0 ; i < Elements(default_extensions) ; i++) {
       if (!default_extensions[i].flag_offset ||
           *(base + default_extensions[i].flag_offset)) {
-         extStrLen += _mesa_strlen(default_extensions[i].name) + 1;
+         extStrLen += (GLuint)_mesa_strlen(default_extensions[i].name) + 1;
       }
    }
    s = (GLubyte *) _mesa_malloc(extStrLen);
@@ -499,7 +499,7 @@ _mesa_make_extension_string( GLcontext *ctx )
    for (i = 0 ; i < Elements(default_extensions) ; i++) {
       if (!default_extensions[i].flag_offset ||
           *(base + default_extensions[i].flag_offset)) {
-         GLuint len = _mesa_strlen(default_extensions[i].name);
+         GLuint len = (GLuint)_mesa_strlen(default_extensions[i].name);
          _mesa_memcpy(s + extStrLen, default_extensions[i].name, len);
          extStrLen += len;
          s[extStrLen] = (GLubyte) ' ';
index 7855fd63fa36be7b7203ce44b2a89063b1ac084a..0b1c16d2444c7813bf34e228999150ddeab1f06c 100644 (file)
 #endif
 
 
+/* Get typedefs for uintptr_t and friends */
+#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP)
+#include <BaseTsd.h>
+#else
+#include <inttypes.h>
+#endif
+
 #if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP)
 #  define __WIN32__
 #  define finite _finite
  */
 /* compatibility guard so we don't need to change client code */
 #if defined(_WIN32) && !defined(_WINDEF_) && !defined(_WINDEF_H) && !defined(_GNU_H_WINDOWS32_BASE) && !defined(OPENSTEP) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP)
-typedef int (GLAPIENTRY *PROC)();
+typedef INT_PTR (GLAPIENTRY *PROC)();
 typedef unsigned long COLORREF;
 #endif
 
index 50bc1510b1c49b5e71da8325d8b702e58ecc4ca4..767cef59e2e3cc53c4362ee9a95733e20043c78c 100644 (file)
@@ -124,16 +124,16 @@ _mesa_free(void *ptr)
 void *
 _mesa_align_malloc(size_t bytes, unsigned long alignment)
 {
-   unsigned long ptr, buf;
+   uintptr_t ptr, buf;
 
    ASSERT( alignment > 0 );
 
-   ptr = (unsigned long) _mesa_malloc(bytes + alignment + sizeof(void *));
+   ptr = (uintptr_t) _mesa_malloc(bytes + alignment + sizeof(void *));
    if (!ptr)
       return NULL;
 
-   buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1);
-   *(unsigned long *)(buf - sizeof(void *)) = ptr;
+   buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1);
+   *(uintptr_t *)(buf - sizeof(void *)) = ptr;
 
 #ifdef DEBUG
    /* mark the non-aligned area */
@@ -151,16 +151,16 @@ _mesa_align_malloc(size_t bytes, unsigned long alignment)
 void *
 _mesa_align_calloc(size_t bytes, unsigned long alignment)
 {
-   unsigned long ptr, buf;
+   uintptr_t ptr, buf;
 
    ASSERT( alignment > 0 );
 
-   ptr = (unsigned long) _mesa_calloc(bytes + alignment + sizeof(void *));
+   ptr = (uintptr_t) _mesa_calloc(bytes + alignment + sizeof(void *));
    if (!ptr)
       return NULL;
 
-   buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1);
-   *(unsigned long *)(buf - sizeof(void *)) = ptr;
+   buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1);
+   *(uintptr_t *)(buf - sizeof(void *)) = ptr;
 
 #ifdef DEBUG
    /* mark the non-aligned area */
@@ -777,7 +777,7 @@ _mesa_strncmp( const char *s1, const char *s2, size_t n )
 char *
 _mesa_strdup( const char *s )
 {
-   int l = _mesa_strlen(s);
+   size_t l = _mesa_strlen(s);
    char *s2 = (char *) _mesa_malloc(l + 1);
    if (s2)
       _mesa_strcpy(s2, s);
index 5158bcd8b252e1a66d548f3a6c969e3ea8bab1dd..2ae1116f4128500f1a09ded55eb181edd993db74 100644 (file)
@@ -100,7 +100,7 @@ extern "C" {
  * this macro.
  * Both pointers/offsets are expressed in bytes.
  */
-#define ADD_POINTERS(A, B)  ( (GLubyte *) (A) + (unsigned long) (B) )
+#define ADD_POINTERS(A, B)  ( (GLubyte *) (A) + (uintptr_t) (B) )
 
 
 /**********************************************************************/
index 02f2dbe69fe95bf8589ec5a03438552080841b13..e4c3f6651d69770c0d9d25f157ec883fef4b6542 100644 (file)
@@ -2127,7 +2127,7 @@ _mesa_validate_pbo_compressed_teximage(GLcontext *ctx,
       return pixels;
    }
    if ((const GLubyte *) pixels + imageSize >
-       (const GLubyte *) packing->BufferObj->Size) {
+       (const GLubyte *)(uintptr_t) packing->BufferObj->Size) {
       /* out of bounds read! */
       _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(invalid PBO access");
       return NULL;
index 14beabb978d8f554eac71e8149f02d3987ed1bbc..1bce0f3a0ca2251abe39889b67b09b75c50c06df 100644 (file)
@@ -530,7 +530,7 @@ static void trans_4_GLubyte_4ub_raw(GLubyte (*t)[4],
    const GLubyte *f = (GLubyte *) Ptr + SRC_START * stride;
    GLuint i;
 
-   if (((((long) f | (long) stride)) & 3L) == 0L) {
+   if (((((uintptr_t) f | (uintptr_t) stride)) & 3L) == 0L) {
       /* Aligned.
        */
       for (i = DST_START ; i < n ; i++, f += stride) {
index d46e5a3a8387805e1e18e9dd4560719a825f3c04..ffb451d8ae1e80c72ec69a8d4d815ec61ee33135 100644 (file)
@@ -3884,7 +3884,7 @@ static int extension_is_supported (const GLubyte *ext)
 {
    const GLubyte *extensions = GL_CALL(GetString)(GL_EXTENSIONS);
    const GLubyte *end = extensions + _mesa_strlen ((const char *) extensions);
-   const GLint ext_len = _mesa_strlen ((const char *) ext);
+   const GLint ext_len = (GLint)_mesa_strlen ((const char *) ext);
 
    while (extensions < end)
    {
index ad8683f00b2aaaf44177acc4c497561d661b4de9..43baab4b0fd8842cd32d22df95c39bcfa0b8b9e0 100644 (file)
@@ -509,7 +509,7 @@ _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params)
 
    switch (pname) {
       case GL_PROGRAM_LENGTH_ARB:
-         *params = prog->String ? _mesa_strlen((char *) prog->String) : 0;
+         *params = prog->String ? (GLint)_mesa_strlen((char *) prog->String) : 0;
          break;
       case GL_PROGRAM_FORMAT_ARB:
          *params = prog->Format;
index 622cdb2398322d4a5c2da1a4e8921b71d313b88f..3b537f60403d5d4ca1e6484e760aeff3b8e00079 100644 (file)
@@ -36,13 +36,13 @@ extern "C" {
 #endif
 
 void grammar_alloc_free (void *);
-void *grammar_alloc_malloc (unsigned int);
-void *grammar_alloc_realloc (void *, unsigned int, unsigned int);
+void *grammar_alloc_malloc (size_t);
+void *grammar_alloc_realloc (void *, size_t, size_t);
 void *grammar_memory_copy (void *, const void *, unsigned int);
 int grammar_string_compare (const byte *, const byte *);
-int grammar_string_compare_n (const byte *, const byte *, unsigned int);
+int grammar_string_compare_n (const byte *, const byte *, size_t);
 byte *grammar_string_copy (byte *, const byte *);
-byte *grammar_string_copy_n (byte *, const byte *, unsigned int);
+byte *grammar_string_copy_n (byte *, const byte *, size_t);
 byte *grammar_string_duplicate (const byte *);
 unsigned int grammar_string_length (const byte *);
 
index 0aadac58bc51fd33612d5c38b82161e71db3281e..eb962505bfed2ff5c2a676577b3d4aa9f7d95c9c 100644 (file)
@@ -40,17 +40,17 @@ void grammar_alloc_free (void *ptr)
     _mesa_free (ptr);
 }
 
-void *grammar_alloc_malloc (unsigned int size)
+void *grammar_alloc_malloc (size_t size)
 {
     return _mesa_malloc (size);
 }
 
-void *grammar_alloc_realloc (void *ptr, unsigned int old_size, unsigned int size)
+void *grammar_alloc_realloc (void *ptr, size_t old_size, size_t size)
 {
     return _mesa_realloc (ptr, old_size, size);
 }
 
-void *grammar_memory_copy (void *dst, const void * src, unsigned int size)
+void *grammar_memory_copy (void *dst, const void * src, size_t size)
 {
     return _mesa_memcpy (dst, src, size);
 }
@@ -60,7 +60,7 @@ int grammar_string_compare (const byte *str1, const byte *str2)
     return _mesa_strcmp ((const char *) str1, (const char *) str2);
 }
 
-int grammar_string_compare_n (const byte *str1, const byte *str2, unsigned int n)
+int grammar_string_compare_n (const byte *str1, const byte *str2, size_t n)
 {
     return _mesa_strncmp ((const char *) str1, (const char *) str2, n);
 }
@@ -70,7 +70,7 @@ byte *grammar_string_copy (byte *dst, const byte *src)
     return (byte *) _mesa_strcpy ((char *) dst, (const char *) src);
 }
 
-byte *grammar_string_copy_n (byte *dst, const byte *src, unsigned int n)
+byte *grammar_string_copy_n (byte *dst, const byte *src, size_t n)
 {
     return (byte *) _mesa_strncpy ((char *) dst, (const char *) src, n);
 }
@@ -82,6 +82,6 @@ byte *grammar_string_duplicate (const byte *src)
 
 unsigned int grammar_string_length (const byte *str)
 {
-    return _mesa_strlen ((const char *) str);
+    return (unsigned int)_mesa_strlen ((const char *) str);
 }
 
index e51ba314f54a72e47f85650e5a087218d5cddb2f..f7e10b8242522b2320490ef9fb8d55184f283cdb 100644 (file)
@@ -373,7 +373,7 @@ Peek_Token(struct parse_state *parseState, GLubyte *token)
       parseState->pos += (-i);
       return GL_FALSE;
    }
-   len = _mesa_strlen((const char *) token);
+   len = (GLint)_mesa_strlen((const char *) token);
    parseState->pos += (i - len);
    return GL_TRUE;
 }
index 4db78a8cc7442e40d70e93bf343542eb23855b8f..4b893017649e1b2130889e444c930a2ffdce9af7 100644 (file)
@@ -266,7 +266,7 @@ _mesa_GetProgramivNV(GLuint id, GLenum pname, GLint *params)
          *params = prog->Target;
          return;
       case GL_PROGRAM_LENGTH_NV:
-         *params = prog->String ? _mesa_strlen((char *) prog->String) : 0;
+         *params = prog->String ?(GLint)_mesa_strlen((char *) prog->String) : 0;
          return;
       case GL_PROGRAM_RESIDENT_NV:
          *params = prog->Resident;
index 23a01c7617f4ddebc0472e3377d299a94ed71a39..c6fb72d931e8fcb87af718f1a1bdd455afdbc423 100644 (file)
@@ -233,7 +233,7 @@ Peek_Token(struct parse_state *parseState, GLubyte *token)
       parseState->pos += (-i);
       return GL_FALSE;
    }
-   len = _mesa_strlen((const char *) token);
+   len = (GLint)_mesa_strlen((const char *) token);
    parseState->pos += (i - len);
    return GL_TRUE;
 }