translate: don't crash on failure to create sse version
authorKeith Whitwell <keith@tungstengraphics.com>
Sat, 19 Apr 2008 17:26:39 +0000 (18:26 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Sat, 19 Apr 2008 17:27:30 +0000 (18:27 +0100)
src/gallium/auxiliary/translate/translate_generic.c
src/gallium/auxiliary/translate/translate_sse.c

index e7fb1dcb2d5624388bfba0439072c789c1c16557..9de007c767e4fb5b970972f602a4cd3417061a70 100644 (file)
@@ -567,8 +567,14 @@ static void generic_run_elts( struct translate *translate,
                      tg->attrib[attr].output_offset);
 
         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]);
+
+
         tg->attrib[attr].emit( data, dst );
       }
+      debug_printf("\n");
       
       vert += tg->translate.key.output_stride;
    }
@@ -602,8 +608,13 @@ static void generic_run( struct translate *translate,
                      tg->attrib[attr].output_offset);
 
         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]);
+
         tg->attrib[attr].emit( data, dst );
       }
+      debug_printf("\n");
       
       vert += tg->translate.key.output_stride;
    }
index cb8815c173b0f6ede352171977a4c69e97c04876..575852d22209638ec3a19e049aa5e08d06398fd7 100644 (file)
@@ -145,7 +145,7 @@ static struct x86_reg get_inv_255( struct translate_sse *p )
       p->inv_255[0] =
         p->inv_255[1] =
         p->inv_255[2] =
-        p->inv_255[3] = 1.0 / 255.0f;
+        p->inv_255[3] = 1.0f / 255.0f;
 
       sse_movups(p->func, reg, 
                 x86_make_disp(translateESI, 
@@ -575,22 +575,21 @@ struct translate *translate_sse2_create( const struct translate_key *key )
    if (p == NULL) 
       goto fail;
 
-   if (!rtasm_cpu_has_sse() || !rtasm_cpu_has_sse2())
-      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);
 
@@ -598,7 +597,7 @@ struct translate *translate_sse2_create( const struct translate_key *key )
 
  fail:
    if (p)
-      p->translate.release( &p->translate );
+      translate_sse_release( &p->translate );
 
    return NULL;
 }