use FetchTexelf() in GetTexImage() to return float textures correctly
[mesa.git] / src / mesa / glapi / glapi.c
index acfd6181f2f2ced86639c1af14d8d14e1ce5a32e..eff86f42bef99da51d8d38c5357577da6973a733 100644 (file)
@@ -1,4 +1,3 @@
-/* $Id: glapi.c,v 1.65 2002/10/11 17:41:04 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -96,7 +95,7 @@ warn(void)
 
 
 #define KEYWORD1 static
-#define KEYWORD2
+#define KEYWORD2 GLAPIENTRY
 #define NAME(func)  NoOp##func
 
 #define F NULL
@@ -546,7 +545,7 @@ generate_entrypoint(GLuint functionOffset)
       0xe8, 0x00, 0x00, 0x00, 0x00,
       0xff, 0xa0, 0x00, 0x00, 0x00, 0x00
    };
-   unsigned char *code = malloc(sizeof(insn_template));
+   unsigned char *code = (unsigned char *) malloc(sizeof(insn_template));
    unsigned int next_insn;
    if (code) {
       memcpy(code, insn_template, sizeof(insn_template));
@@ -560,7 +559,7 @@ generate_entrypoint(GLuint functionOffset)
    return code;
 #elif defined(USE_SPARC_ASM)
 
-#ifdef __sparc_v9__
+#if defined(__sparc_v9__) && !defined(__linux__)
    static const unsigned int insn_template[] = {
           0x05000000,  /* sethi        %uhi(_glapi_Dispatch), %g2      */
           0x03000000,  /* sethi        %hi(_glapi_Dispatch), %g1       */
@@ -583,12 +582,12 @@ generate_entrypoint(GLuint functionOffset)
           0x01000000   /*  nop                                           */
    };
 #endif
-   unsigned int *code = malloc(sizeof(insn_template));
+   unsigned int *code = (unsigned int *) malloc(sizeof(insn_template));
    unsigned long glapi_addr = (unsigned long) &_glapi_Dispatch;
    if (code) {
       memcpy(code, insn_template, sizeof(insn_template));
 
-#ifdef __sparc_v9__
+#if defined(__sparc_v9__) && !defined(__linux__)
       code[0] |= (glapi_addr >> (32 + 10));
       code[1] |= ((glapi_addr & 0xffffffff) >> 10);
       __glapi_sparc_icache_flush(&code[0]);
@@ -630,17 +629,17 @@ fill_in_entrypoint_offset(void *entrypoint, GLuint offset)
 
    /* XXX this hasn't been tested! */
    unsigned int *code = (unsigned int *) entrypoint;
-#ifdef __sparc_v9__
+#if defined(__sparc_v9__) && !defined(__linux__)
    code[6] = 0x05000000;  /* sethi     %hi(8 * glapioffset), %g2       */
    code[7] = 0x8410a000;  /* or                %g2, %lo(8 * glapioffset), %g2  */
    code[6] |= ((offset * 8) >> 10);
    code[7] |= ((offset * 8) & ((1 << 10) - 1));
    __glapi_sparc_icache_flush(&code[6]);
-#else /* __sparc_v9__ */
+#else /* __sparc_v9__ && !linux */
    code[2] = 0xc6006000;  /* ld                [%g1 + %lo(4*glapioffset)], %g3   */
-   code[2] |= (functionOffset * 4);
+   code[2] |= (offset * 4);
    __glapi_sparc_icache_flush(&code[2]);
-#endif /* __sparc_v9__ */
+#endif /* __sparc_v9__ && !linux */
 
 #endif /* USE_*_ASM */
 }
@@ -674,10 +673,10 @@ _glapi_add_entrypoint(const char *funcName, GLuint offset)
             if (ExtEntryTable[i].Offset == offset) {
                return GL_TRUE;  /* offsets match */
             }
-            else if (ExtEntryTable[i].Offset == ~0
+            else if (ExtEntryTable[i].Offset == (GLuint) ~0
                      && offset < DISPATCH_TABLE_SIZE) {
                /* need to patch-up the dispatch code */
-               if (offset != ~0) {
+               if (offset != (GLuint) ~0) {
                   fill_in_entrypoint_offset(ExtEntryTable[i].Address, offset);
                   ExtEntryTable[i].Offset = offset;
                }
@@ -741,8 +740,12 @@ _glapi_get_proc_offset(const char *funcName)
 const GLvoid *
 _glapi_get_proc_address(const char *funcName)
 {
-   /* search extension functions first */
    GLuint i;
+
+   if (funcName[0] != 'g' || funcName[1] != 'l')
+      return NULL;
+
+   /* search extension functions first */
    for (i = 0; i < NumExtEntryPoints; i++) {
       if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
          return ExtEntryTable[i].Address;