Fixed MMX configuration on 64 bit hosts
This commit is contained in:
parent
f19590daaa
commit
b02c419143
35
configure.ac
35
configure.ac
|
@ -70,24 +70,38 @@ else
|
||||||
])
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF([size_t])
|
||||||
|
AC_MSG_CHECKING([whether compiler is 32 or 64 bit])
|
||||||
|
if test x$ac_cv_sizeof_size_t = x8; then
|
||||||
|
AC_MSG_RESULT([64])
|
||||||
|
compiler_width=64
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([32])
|
||||||
|
compiler_width=32
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for library functions.
|
# Check for library functions.
|
||||||
AC_CHECK_FUNCS([floor sqrt])
|
AC_CHECK_FUNCS([floor sqrt])
|
||||||
|
|
||||||
# Arguments to specify certain features.
|
# Arguments to specify certain features.
|
||||||
AC_ARG_ENABLE([mmx],
|
AC_ARG_ENABLE([mmx],
|
||||||
AS_HELP_STRING([--enable-mmx],[Turn on MMX detection support @<:@default=enabled@:>@]),
|
AS_HELP_STRING([--enable-mmx],[use MMX if available and if building with a 32 bit compiler @<:@default=enabled@:>@]),
|
||||||
[mmx=$enableval],
|
[mmx=$enableval],
|
||||||
[mmx=no])
|
[mmx=yes])
|
||||||
AC_MSG_CHECKING([whether to enable MMX detection support])
|
AC_MSG_CHECKING([whether to enable MMX])
|
||||||
if test x$mmx = xyes; then
|
if test x$mmx = xyes; then
|
||||||
|
if test x$compiler_width = x32; then
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
AC_DEFINE([MMX_DETECTION], [1], [Activate MMX Extensions support])
|
AC_DEFINE([MMX_DETECTION], [1], [Activate MMX Extensions support])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no, was requested but feature is not supported with a 64bit compiler])
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE([debug],
|
AC_ARG_ENABLE([debug],
|
||||||
AS_HELP_STRING([--enable-debug],[Turn on debug mode @<:@default=disabled@:>@]),
|
AS_HELP_STRING([--enable-debug],[turn on debug mode @<:@default=disabled@:>@]),
|
||||||
[debug=$enableval],
|
[debug=$enableval],
|
||||||
[debug=no])
|
[debug=no])
|
||||||
|
|
||||||
|
@ -107,7 +121,7 @@ if test x"$GCC" = xyes; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE([vectorization],
|
AC_ARG_ENABLE([vectorization],
|
||||||
AS_HELP_STRING([--enable-vectorization],[Turn on vectorization optimizations (gcc >= 4 only) @<:@default=enabled@:>@]),
|
AS_HELP_STRING([--enable-vectorization],[turn on vectorization optimizations (gcc >= 4 only) @<:@default=enabled@:>@]),
|
||||||
[vectorization=$enableval],
|
[vectorization=$enableval],
|
||||||
[vectorization=yes])
|
[vectorization=yes])
|
||||||
|
|
||||||
|
@ -129,17 +143,6 @@ if test x"$vectorization" = xyes; then
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
INF_CFLAGS_EXTRA="${INF_CFLAGS_EXTRA} -ftree-vectorize"
|
INF_CFLAGS_EXTRA="${INF_CFLAGS_EXTRA} -ftree-vectorize"
|
||||||
case "$target_cpu" in
|
|
||||||
i*86|ia64*)
|
|
||||||
# TODO check for sse2 availability
|
|
||||||
INF_CFLAGS_EXTRA="${INF_CFLAGS_EXTRA} -msse"
|
|
||||||
;;
|
|
||||||
powerpc|ppc)
|
|
||||||
INF_CFLAGS_EXTRA="${INF_CFLAGS_EXTRA} -maltivec"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "cputest.h"
|
#include "cputest.h"
|
||||||
#include "glib.h"
|
#include "glib.h"
|
||||||
|
|
||||||
|
// This code is 32-bit only
|
||||||
|
|
||||||
/* ebx saving is necessary for PIC. gcc seems unable to see it alone */
|
/* ebx saving is necessary for PIC. gcc seems unable to see it alone */
|
||||||
#if MMX_DETECTION
|
#if MMX_DETECTION
|
||||||
|
|
103
src/renderer.cc
103
src/renderer.cc
|
@ -70,9 +70,6 @@ static SDL_Thread *thread;
|
||||||
static gint32 event_filter(const SDL_Event *event);
|
static gint32 event_filter(const SDL_Event *event);
|
||||||
static void check_events();
|
static void check_events();
|
||||||
static int renderer(void *);
|
static int renderer(void *);
|
||||||
#if MMX_DETECTION
|
|
||||||
static int renderer_mmx(void *);
|
|
||||||
#endif
|
|
||||||
static void set_title(void);
|
static void set_title(void);
|
||||||
|
|
||||||
void renderer_init(void)
|
void renderer_init(void)
|
||||||
|
@ -121,11 +118,6 @@ void renderer_init(void)
|
||||||
|
|
||||||
SDL_SetEventFilter(event_filter);
|
SDL_SetEventFilter(event_filter);
|
||||||
|
|
||||||
#if MMX_DETECTION
|
|
||||||
if (mm_support_check_and_show() != 0)
|
|
||||||
thread = SDL_CreateThread(renderer_mmx, NULL);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
thread = SDL_CreateThread(renderer, NULL);
|
thread = SDL_CreateThread(renderer, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -410,11 +402,15 @@ static int renderer(void *arg)
|
||||||
gint32 frame_length;
|
gint32 frame_length;
|
||||||
gint32 fps, new_fps;
|
gint32 fps, new_fps;
|
||||||
gint32 t_between_effects, t_between_colors;
|
gint32 t_between_effects, t_between_colors;
|
||||||
|
gint32 has_mmx = 0;
|
||||||
|
|
||||||
fps = aud_get_int(CFGID, "max_fps");
|
fps = aud_get_int(CFGID, "max_fps");
|
||||||
frame_length = calculate_frame_length_usecs(fps, __LINE__);
|
frame_length = calculate_frame_length_usecs(fps, __LINE__);
|
||||||
t_between_effects = aud_get_int(CFGID, "effect_time");
|
t_between_effects = aud_get_int(CFGID, "effect_time");
|
||||||
t_between_colors = aud_get_int(CFGID, "palette_time");
|
t_between_colors = aud_get_int(CFGID, "palette_time");
|
||||||
|
#if MMX_DETECTION
|
||||||
|
has_mmx = mm_support_check_and_show();
|
||||||
|
#endif
|
||||||
initializing = FALSE;
|
initializing = FALSE;
|
||||||
for (;; ) { /* ever... */
|
for (;; ) { /* ever... */
|
||||||
if (!visible) {
|
if (!visible) {
|
||||||
|
@ -437,6 +433,9 @@ static int renderer(void *arg)
|
||||||
g_return_val_if_fail(SDL_UnlockMutex(resizing_mutex) >= 0, -1);
|
g_return_val_if_fail(SDL_UnlockMutex(resizing_mutex) >= 0, -1);
|
||||||
}
|
}
|
||||||
auto t_begin = g_get_monotonic_time();
|
auto t_begin = g_get_monotonic_time();
|
||||||
|
if (has_mmx)
|
||||||
|
display_blur_mmx(scr_par.width * scr_par.height * current_effect.num_effect);
|
||||||
|
else
|
||||||
display_blur(scr_par.width * scr_par.height * current_effect.num_effect);
|
display_blur(scr_par.width * scr_par.height * current_effect.num_effect);
|
||||||
spectral(¤t_effect);
|
spectral(¤t_effect);
|
||||||
curve(¤t_effect);
|
curve(¤t_effect);
|
||||||
|
@ -489,94 +488,6 @@ static int renderer(void *arg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MMX_DETECTION
|
|
||||||
static int renderer_mmx(void *arg)
|
|
||||||
{
|
|
||||||
gint32 render_time, now;
|
|
||||||
gint32 frame_length;
|
|
||||||
gint32 idle_time;
|
|
||||||
gint32 fps, new_fps;
|
|
||||||
gint32 t_between_effects, t_between_colors;
|
|
||||||
|
|
||||||
fps = aud_get_int(CFGID, "max_fps");
|
|
||||||
frame_length = calculate_frame_length(fps, __LINE__);
|
|
||||||
t_between_effects = aud_get_int(CFGID, "effect_time");
|
|
||||||
t_between_colors = aud_get_int(CFGID, "palette_time");
|
|
||||||
initializing = FALSE;
|
|
||||||
for (;; ) { /* ever... */
|
|
||||||
if (!visible) {
|
|
||||||
check_events();
|
|
||||||
if (finished)
|
|
||||||
break;
|
|
||||||
g_usleep(3000 * frame_length);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
check_events();
|
|
||||||
if (finished)
|
|
||||||
break;
|
|
||||||
if (must_resize) {
|
|
||||||
display_resize(scr_par.width, scr_par.height);
|
|
||||||
aud_set_int(CFGID, "width", scr_par.width);
|
|
||||||
aud_set_int(CFGID, "heigth", scr_par.height);
|
|
||||||
must_resize = FALSE;
|
|
||||||
g_return_val_if_fail(SDL_LockMutex(resizing_mutex) >= 0, -1);
|
|
||||||
resizing = FALSE;
|
|
||||||
g_return_val_if_fail(SDL_UnlockMutex(resizing_mutex) >= 0, -1);
|
|
||||||
}
|
|
||||||
auto t_begin = g_get_monotonic_time();
|
|
||||||
display_blur_mmx(scr_par.width * scr_par.height * current_effect.num_effect);
|
|
||||||
spectral(¤t_effect);
|
|
||||||
curve(¤t_effect);
|
|
||||||
if (t_last_color <= 32)
|
|
||||||
change_color(old_color, color, t_last_color * 8);
|
|
||||||
next_color();
|
|
||||||
next_effect();
|
|
||||||
if (t_last_effect % t_between_effects == 0) {
|
|
||||||
#ifdef INFINITY_DEBUG
|
|
||||||
if (!mode_interactif) {
|
|
||||||
display_load_random_effect(¤t_effect);
|
|
||||||
t_last_effect = 0;
|
|
||||||
t_between_effects = aud_get_int(CFGID, "effect_time");
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
display_load_random_effect(¤t_effect);
|
|
||||||
t_last_effect = 0;
|
|
||||||
t_between_effects = aud_get_int(CFGID, "effect_time");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (t_last_color % t_between_colors == 0) {
|
|
||||||
#ifdef INFINITY_DEBUG
|
|
||||||
if (!mode_interactif) {
|
|
||||||
old_color = color;
|
|
||||||
color = rand() % NB_PALETTES;
|
|
||||||
t_last_color = 0;
|
|
||||||
t_between_colors = aud_get_int(CFGID, "palette_time");
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
old_color = color;
|
|
||||||
color = rand() % NB_PALETTES;
|
|
||||||
t_last_color = 0;
|
|
||||||
t_between_colors = aud_get_int(CFGID, "palette_time");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
new_fps = aud_get_int(CFGID, "max_fps");
|
|
||||||
if (new_fps != fps) {
|
|
||||||
fps = new_fps;
|
|
||||||
frame_length = calculate_frame_length(fps, __LINE__);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto now = g_get_monotonic_time();
|
|
||||||
auto render_time = now - t_begin;
|
|
||||||
if (render_time < frame_length) {
|
|
||||||
g_usleep(frame_length - render_time);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* MMX_DETECTION */
|
|
||||||
|
|
||||||
static void set_title(void)
|
static void set_title(void)
|
||||||
{
|
{
|
||||||
SDL_WM_SetCaption(current_title, "Infinity");
|
SDL_WM_SetCaption(current_title, "Infinity");
|
||||||
|
|
Loading…
Reference in New Issue