translate: fix several bugs
authorKeith Whitwell <keith@tungstengraphics.com>
Sat, 19 Apr 2008 19:18:40 +0000 (20:18 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Sat, 19 Apr 2008 19:18:40 +0000 (20:18 +0100)
- specify cdecl calling convention on WIN32
- fix load bgra8 function
- fix previous don't crash fix.

src/gallium/auxiliary/translate/translate_generic.c
src/gallium/auxiliary/translate/translate_sse.c

index 9de007c767e4fb5b970972f602a4cd3417061a70..402780ee53957d7af24e22f6032b1e569d37429b 100644 (file)
@@ -568,13 +568,11 @@ static void generic_run_elts( struct translate *translate,
 
         tg->attrib[attr].fetch( src, data );
 
-         debug_printf("vert %d/%d attr %d: %f %f %f %f\n",
-                      i, elt, attr, data[0], data[1], data[2], data[3]);
-
+         if (0) debug_printf("vert %d/%d attr %d: %f %f %f %f\n",
+                             i, elt, attr, data[0], data[1], data[2], data[3]);
 
         tg->attrib[attr].emit( data, dst );
       }
-      debug_printf("\n");
       
       vert += tg->translate.key.output_stride;
    }
@@ -609,12 +607,11 @@ static void generic_run( struct translate *translate,
 
         tg->attrib[attr].fetch( src, data );
 
-         debug_printf("vert %d attr %d: %f %f %f %f\n",
-                      i, attr, data[0], data[1], data[2], data[3]);
+         if (0) debug_printf("vert %d attr %d: %f %f %f %f\n",
+                             i, attr, data[0], data[1], data[2], data[3]);
 
         tg->attrib[attr].emit( data, dst );
       }
-      debug_printf("\n");
       
       vert += tg->translate.key.output_stride;
    }
index 575852d22209638ec3a19e049aa5e08d06398fd7..e587e5afece9e636bbe13939267bbeb4c6ab50be 100644 (file)
 #define W    3
 
 
-typedef void (*run_func)( struct translate *translate,
-                         unsigned start,
-                         unsigned count,
-                         void *output_buffer );
+#ifdef WIN32
+#define RTASM __cdecl
+#else
+#define RTASM
+#endif
+
+typedef void (RTASM *run_func)( struct translate *translate,
+                                unsigned start,
+                                unsigned count,
+                                void *output_buffer );
 
-typedef void (*run_elts_func)( struct translate *translate,
-                              const unsigned *elts,
-                              unsigned count,
-                              void *output_buffer );
+typedef void (RTASM *run_elts_func)( struct translate *translate,
+                                     const unsigned *elts,
+                                     unsigned count,
+                                     void *output_buffer );
 
 
 
@@ -212,17 +218,17 @@ static void emit_load_R8G8B8A8_UNORM( struct translate_sse *p,
    /* Load and unpack twice:
     */
    sse_movss(p->func, data, src);
-   sse2_punpcklbw(p->func, src, get_identity(p));
-   sse2_punpcklbw(p->func, src, get_identity(p));
+   sse2_punpcklbw(p->func, data, get_identity(p));
+   sse2_punpcklbw(p->func, data, get_identity(p));
 
    /* Convert to float:
     */
-   sse2_cvtdq2ps(p->func, src, src);
+   sse2_cvtdq2ps(p->func, data, data);
 
 
    /* Scale by 1/255.0
     */
-   sse_mulps(p->func, src, get_inv_255(p));
+   sse_mulps(p->func, data, get_inv_255(p));
 }
 
 
@@ -551,7 +557,6 @@ static void translate_sse_run_elts( struct translate *translate,
                    elts,
                    count,
                    output_buffer );
-
 }
 
 static void translate_sse_run( struct translate *translate,
@@ -570,26 +575,27 @@ static void translate_sse_run( struct translate *translate,
 
 struct translate *translate_sse2_create( const struct translate_key *key )
 {
-   struct translate_sse *p = CALLOC_STRUCT( translate_sse );
+   struct translate_sse *p = NULL;
+
+   if (!rtasm_cpu_has_sse() || !rtasm_cpu_has_sse2())
+      goto fail;
 
+   p = CALLOC_STRUCT( translate_sse );
    if (p == NULL) 
       goto fail;
 
+   p->translate.key = *key;
    p->translate.release = translate_sse_release;
    p->translate.set_buffer = translate_sse_set_buffer;
    p->translate.run_elts = translate_sse_run_elts;
    p->translate.run = translate_sse_run;
 
-   if (!rtasm_cpu_has_sse() || !rtasm_cpu_has_sse2())
-      goto fail;
-
    if (!build_vertex_emit(p, &p->linear_func, TRUE))
       goto fail;
 
    if (!build_vertex_emit(p, &p->elt_func, FALSE))
       goto fail;
 
-   p->translate.key = *key;
    p->gen_run = (run_func)x86_get_func(&p->linear_func);
    p->gen_run_elts = (run_elts_func)x86_get_func(&p->elt_func);