summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2008-04-19 20:18:40 +0100
committerKeith Whitwell <keith@tungstengraphics.com>2008-04-19 20:18:40 +0100
commitd0a4bf08b1a80d62f81301c5b37723dfca436b62 (patch)
tree378ebb5579b8ef4b2dcf0f89a9782ddad79e531b
parentbfd179776f5ded75c2134a54f0a57a1579118cd0 (diff)
translate: fix several bugs
- specify cdecl calling convention on WIN32 - fix load bgra8 function - fix previous don't crash fix.
-rw-r--r--src/gallium/auxiliary/translate/translate_generic.c11
-rw-r--r--src/gallium/auxiliary/translate/translate_sse.c42
2 files changed, 28 insertions, 25 deletions
diff --git a/src/gallium/auxiliary/translate/translate_generic.c b/src/gallium/auxiliary/translate/translate_generic.c
index 9de007c767..402780ee53 100644
--- a/src/gallium/auxiliary/translate/translate_generic.c
+++ b/src/gallium/auxiliary/translate/translate_generic.c
@@ -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;
}
diff --git a/src/gallium/auxiliary/translate/translate_sse.c b/src/gallium/auxiliary/translate/translate_sse.c
index 575852d222..e587e5afec 100644
--- a/src/gallium/auxiliary/translate/translate_sse.c
+++ b/src/gallium/auxiliary/translate/translate_sse.c
@@ -45,15 +45,21 @@
#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);