Refactor performance.c code
This commit is contained in:
parent
288dbe2bd0
commit
0d371def5c
|
@ -147,7 +147,7 @@ static const dspfilter_get_implementation_t dsp_plugs_builtin[] = {
|
||||||
static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list)
|
static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
dspfilter_simd_mask_t mask = retro_get_cpu_features();
|
dspfilter_simd_mask_t mask = cpu_features_get();
|
||||||
|
|
||||||
(void)list;
|
(void)list;
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list)
|
||||||
static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list)
|
static bool append_plugs(rarch_dsp_filter_t *dsp, struct string_list *list)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
dspfilter_simd_mask_t mask = retro_get_cpu_features();
|
dspfilter_simd_mask_t mask = cpu_features_get();
|
||||||
|
|
||||||
for (i = 0; i < list->size; i++)
|
for (i = 0; i < list->size; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -143,7 +143,7 @@ retro_get_cpu_features_t perf_get_cpu_features_cb;
|
||||||
static resampler_simd_mask_t resampler_get_cpu_features(void)
|
static resampler_simd_mask_t resampler_get_cpu_features(void)
|
||||||
{
|
{
|
||||||
#ifdef RARCH_INTERNAL
|
#ifdef RARCH_INTERNAL
|
||||||
return retro_get_cpu_features();
|
return cpu_features_get();
|
||||||
#else
|
#else
|
||||||
return perf_get_cpu_features_cb();
|
return perf_get_cpu_features_cb();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -410,7 +410,7 @@ retro_get_cpu_features_t perf_get_cpu_features_cb;
|
||||||
static unsigned audio_convert_get_cpu_features(void)
|
static unsigned audio_convert_get_cpu_features(void)
|
||||||
{
|
{
|
||||||
#ifdef RARCH_INTERNAL
|
#ifdef RARCH_INTERNAL
|
||||||
return retro_get_cpu_features();
|
return cpu_features_get();
|
||||||
#else
|
#else
|
||||||
return perf_get_cpu_features_cb();
|
return perf_get_cpu_features_cb();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1122,9 +1122,9 @@ bool rarch_environment_cb(unsigned cmd, void *data)
|
||||||
struct retro_perf_callback *cb = (struct retro_perf_callback*)data;
|
struct retro_perf_callback *cb = (struct retro_perf_callback*)data;
|
||||||
|
|
||||||
RARCH_LOG("Environ GET_PERF_INTERFACE.\n");
|
RARCH_LOG("Environ GET_PERF_INTERFACE.\n");
|
||||||
cb->get_time_usec = retro_get_time_usec;
|
cb->get_time_usec = cpu_features_get_time_usec;
|
||||||
cb->get_cpu_features = retro_get_cpu_features;
|
cb->get_cpu_features = cpu_features_get;
|
||||||
cb->get_perf_counter = retro_get_perf_counter;
|
cb->get_perf_counter = cpu_features_get_perf_counter;
|
||||||
|
|
||||||
cb->perf_register = retro_perf_register;
|
cb->perf_register = retro_perf_register;
|
||||||
cb->perf_start = retro_perf_start;
|
cb->perf_start = retro_perf_start;
|
||||||
|
|
|
@ -983,7 +983,7 @@ bool video_monitor_get_fps(char *buf, size_t size,
|
||||||
{
|
{
|
||||||
static retro_time_t curr_time;
|
static retro_time_t curr_time;
|
||||||
static retro_time_t fps_time;
|
static retro_time_t fps_time;
|
||||||
retro_time_t new_time = retro_get_time_usec();
|
retro_time_t new_time = cpu_features_get_time_usec();
|
||||||
|
|
||||||
*buf = '\0';
|
*buf = '\0';
|
||||||
|
|
||||||
|
|
|
@ -204,7 +204,7 @@ static bool create_softfilter_graph(rarch_softfilter_t *filt,
|
||||||
filt->impl_data = filt->impl->create(
|
filt->impl_data = filt->impl->create(
|
||||||
&softfilter_config, input_fmt, input_fmt, max_width, max_height,
|
&softfilter_config, input_fmt, input_fmt, max_width, max_height,
|
||||||
threads != RARCH_SOFTFILTER_THREADS_AUTO ? threads :
|
threads != RARCH_SOFTFILTER_THREADS_AUTO ? threads :
|
||||||
retro_get_cpu_cores(), cpu_features,
|
cpu_features_get_core_amount(), cpu_features,
|
||||||
&userdata);
|
&userdata);
|
||||||
if (!filt->impl_data)
|
if (!filt->impl_data)
|
||||||
{
|
{
|
||||||
|
@ -262,7 +262,7 @@ static bool append_softfilter_plugs(rarch_softfilter_t *filt,
|
||||||
struct string_list *list)
|
struct string_list *list)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
softfilter_simd_mask_t mask = retro_get_cpu_features();
|
softfilter_simd_mask_t mask = cpu_features_get();
|
||||||
|
|
||||||
for (i = 0; i < list->size; i++)
|
for (i = 0; i < list->size; i++)
|
||||||
{
|
{
|
||||||
|
@ -345,7 +345,7 @@ static bool append_softfilter_plugs(rarch_softfilter_t *filt,
|
||||||
struct string_list *list)
|
struct string_list *list)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
softfilter_simd_mask_t mask = retro_get_cpu_features();
|
softfilter_simd_mask_t mask = cpu_features_get();
|
||||||
|
|
||||||
(void)list;
|
(void)list;
|
||||||
|
|
||||||
|
@ -382,7 +382,7 @@ rarch_softfilter_t *rarch_softfilter_new(const char *filter_config,
|
||||||
enum retro_pixel_format in_pixel_format,
|
enum retro_pixel_format in_pixel_format,
|
||||||
unsigned max_width, unsigned max_height)
|
unsigned max_width, unsigned max_height)
|
||||||
{
|
{
|
||||||
softfilter_simd_mask_t cpu_features = retro_get_cpu_features();
|
softfilter_simd_mask_t cpu_features = cpu_features_get();
|
||||||
char basedir[PATH_MAX_LENGTH];
|
char basedir[PATH_MAX_LENGTH];
|
||||||
#ifdef HAVE_DYLIB
|
#ifdef HAVE_DYLIB
|
||||||
char ext_name[PATH_MAX_LENGTH];
|
char ext_name[PATH_MAX_LENGTH];
|
||||||
|
|
|
@ -692,7 +692,7 @@ static bool video_thread_frame(void *data, const void *frame_,
|
||||||
/* Ideally, use absolute time, but that is only a good idea on POSIX. */
|
/* Ideally, use absolute time, but that is only a good idea on POSIX. */
|
||||||
while (thr->frame.updated)
|
while (thr->frame.updated)
|
||||||
{
|
{
|
||||||
retro_time_t current = retro_get_time_usec();
|
retro_time_t current = cpu_features_get_time_usec();
|
||||||
retro_time_t delta = target - current;
|
retro_time_t delta = target - current;
|
||||||
|
|
||||||
if (delta <= 0)
|
if (delta <= 0)
|
||||||
|
@ -743,7 +743,7 @@ static bool video_thread_frame(void *data, const void *frame_,
|
||||||
|
|
||||||
retro_perf_stop(&thr_frame);
|
retro_perf_stop(&thr_frame);
|
||||||
|
|
||||||
thr->last_time = retro_get_time_usec();
|
thr->last_time = cpu_features_get_time_usec();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,7 +783,7 @@ static bool video_thread_init(thread_video_t *thr, const video_info_t *info,
|
||||||
|
|
||||||
memset(thr->frame.buffer, 0x80, max_size);
|
memset(thr->frame.buffer, 0x80, max_size);
|
||||||
|
|
||||||
thr->last_time = retro_get_time_usec();
|
thr->last_time = cpu_features_get_time_usec();
|
||||||
thr->thread = sthread_create(video_thread_loop, thr);
|
thr->thread = sthread_create(video_thread_loop, thr);
|
||||||
|
|
||||||
if (!thr->thread)
|
if (!thr->thread)
|
||||||
|
|
|
@ -53,11 +53,11 @@ static int action_iterate_help(menu_handle_t *menu,
|
||||||
int64_t timeout;
|
int64_t timeout;
|
||||||
static bool timer_begin = false;
|
static bool timer_begin = false;
|
||||||
static bool timer_end = false;
|
static bool timer_end = false;
|
||||||
int64_t current = retro_get_time_usec();
|
int64_t current = cpu_features_get_time_usec();
|
||||||
|
|
||||||
if (!timer_begin)
|
if (!timer_begin)
|
||||||
{
|
{
|
||||||
timeout_end = retro_get_time_usec() +
|
timeout_end = cpu_features_get_time_usec() +
|
||||||
3 /* seconds */ * 1000000;
|
3 /* seconds */ * 1000000;
|
||||||
timer_begin = true;
|
timer_begin = true;
|
||||||
timer_end = false;
|
timer_end = false;
|
||||||
|
|
|
@ -560,7 +560,7 @@ bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data)
|
||||||
static retro_time_t last_clock_update = 0;
|
static retro_time_t last_clock_update = 0;
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
|
|
||||||
cur_time = retro_get_time_usec();
|
cur_time = cpu_features_get_time_usec();
|
||||||
delta_time = cur_time - old_time;
|
delta_time = cur_time - old_time;
|
||||||
|
|
||||||
if (delta_time >= IDEAL_DELTA_TIME* 4)
|
if (delta_time >= IDEAL_DELTA_TIME* 4)
|
||||||
|
|
|
@ -267,7 +267,7 @@ static bool menu_input_key_bind_custom_bind_keyboard_cb(
|
||||||
menu_input->binds.target->key = (enum retro_key)code;
|
menu_input->binds.target->key = (enum retro_key)code;
|
||||||
menu_input->binds.begin++;
|
menu_input->binds.begin++;
|
||||||
menu_input->binds.target++;
|
menu_input->binds.target++;
|
||||||
menu_input->binds.timeout_end = retro_get_time_usec() +
|
menu_input->binds.timeout_end = cpu_features_get_time_usec() +
|
||||||
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
||||||
|
|
||||||
return (menu_input->binds.begin <= menu_input->binds.last);
|
return (menu_input->binds.begin <= menu_input->binds.last);
|
||||||
|
@ -455,7 +455,7 @@ static bool menu_input_key_bind_set_mode(
|
||||||
menu_input_key_bind_poll_bind_state(
|
menu_input_key_bind_poll_bind_state(
|
||||||
&menu_input->binds, bind_port, false);
|
&menu_input->binds, bind_port, false);
|
||||||
|
|
||||||
menu_input->binds.timeout_end = retro_get_time_usec() +
|
menu_input->binds.timeout_end = cpu_features_get_time_usec() +
|
||||||
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
||||||
|
|
||||||
keys.userdata = menu;
|
keys.userdata = menu;
|
||||||
|
@ -574,7 +574,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len)
|
||||||
struct menu_bind_state binds;
|
struct menu_bind_state binds;
|
||||||
bool timed_out = false;
|
bool timed_out = false;
|
||||||
menu_input_t *menu_input = menu_input_get_ptr();
|
menu_input_t *menu_input = menu_input_get_ptr();
|
||||||
int64_t current = retro_get_time_usec();
|
int64_t current = cpu_features_get_time_usec();
|
||||||
int timeout =
|
int timeout =
|
||||||
(menu_input->binds.timeout_end - current) / 1000000;
|
(menu_input->binds.timeout_end - current) / 1000000;
|
||||||
|
|
||||||
|
@ -584,7 +584,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len)
|
||||||
|
|
||||||
menu_input->binds.begin++;
|
menu_input->binds.begin++;
|
||||||
menu_input->binds.target++;
|
menu_input->binds.target++;
|
||||||
menu_input->binds.timeout_end = retro_get_time_usec() +
|
menu_input->binds.timeout_end = cpu_features_get_time_usec() +
|
||||||
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
||||||
timed_out = true;
|
timed_out = true;
|
||||||
}
|
}
|
||||||
|
@ -631,7 +631,7 @@ static bool menu_input_key_bind_iterate(char *s, size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
binds.target++;
|
binds.target++;
|
||||||
binds.timeout_end = retro_get_time_usec() +
|
binds.timeout_end = cpu_features_get_time_usec() +
|
||||||
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
|
||||||
}
|
}
|
||||||
menu_input->binds = binds;
|
menu_input->binds = binds;
|
||||||
|
|
|
@ -24,12 +24,12 @@
|
||||||
|
|
||||||
int net_http_get(const char **result, size_t *size, const char *url, retro_time_t *timeout)
|
int net_http_get(const char **result, size_t *size, const char *url, retro_time_t *timeout)
|
||||||
{
|
{
|
||||||
uint8_t* data;
|
|
||||||
size_t length;
|
size_t length;
|
||||||
char* res;
|
uint8_t* data = NULL;
|
||||||
int ret = NET_HTTP_GET_OK;
|
char* res = NULL;
|
||||||
struct http_t* http = NULL;
|
int ret = NET_HTTP_GET_OK;
|
||||||
retro_time_t t0 = retro_get_time_usec();
|
struct http_t* http = NULL;
|
||||||
|
retro_time_t t0 = cpu_features_get_time_usec();
|
||||||
struct http_connection_t *conn = net_http_connection_new(url);
|
struct http_connection_t *conn = net_http_connection_new(url);
|
||||||
|
|
||||||
*result = NULL;
|
*result = NULL;
|
||||||
|
@ -60,7 +60,7 @@ int net_http_get(const char **result, size_t *size, const char *url, retro_time_
|
||||||
while (!net_http_update(http, NULL, NULL))
|
while (!net_http_update(http, NULL, NULL))
|
||||||
{
|
{
|
||||||
/* Timeout error. */
|
/* Timeout error. */
|
||||||
if (timeout && (retro_get_time_usec() - t0) > *timeout)
|
if (timeout && (cpu_features_get_time_usec() - t0) > *timeout)
|
||||||
{
|
{
|
||||||
ret = NET_HTTP_GET_TIMEOUT;
|
ret = NET_HTTP_GET_TIMEOUT;
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -99,7 +99,7 @@ error:
|
||||||
|
|
||||||
if (timeout)
|
if (timeout)
|
||||||
{
|
{
|
||||||
t0 = retro_get_time_usec() - t0;
|
t0 = cpu_features_get_time_usec() - t0;
|
||||||
|
|
||||||
if (t0 < *timeout)
|
if (t0 < *timeout)
|
||||||
*timeout -= t0;
|
*timeout -= t0;
|
||||||
|
|
142
performance.c
142
performance.c
|
@ -27,7 +27,9 @@
|
||||||
#define PERF_LOG_FMT "[PERF]: Avg (%s): %llu ticks, %llu runs.\n"
|
#define PERF_LOG_FMT "[PERF]: Avg (%s): %llu ticks, %llu runs.\n"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(_WIN32) && !defined(RARCH_CONSOLE)
|
#if defined(_WIN32)
|
||||||
|
#include <direct.h>
|
||||||
|
#else
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -110,13 +112,13 @@ static int clock_gettime(int clk_ik, struct timespec *t)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_get_perf_counter:
|
* cpu_features_get_perf_counter:
|
||||||
*
|
*
|
||||||
* Gets performance counter.
|
* Gets performance counter.
|
||||||
*
|
*
|
||||||
* Returns: performance counter.
|
* Returns: performance counter.
|
||||||
**/
|
**/
|
||||||
retro_perf_tick_t retro_get_perf_counter(void)
|
retro_perf_tick_t cpu_features_get_perf_counter(void)
|
||||||
{
|
{
|
||||||
retro_perf_tick_t time_ticks = 0;
|
retro_perf_tick_t time_ticks = 0;
|
||||||
#if defined(__linux__) || defined(__QNX__) || defined(__MACH__)
|
#if defined(__linux__) || defined(__QNX__) || defined(__MACH__)
|
||||||
|
@ -125,16 +127,12 @@ retro_perf_tick_t retro_get_perf_counter(void)
|
||||||
time_ticks = (retro_perf_tick_t)tv.tv_sec * 1000000000 +
|
time_ticks = (retro_perf_tick_t)tv.tv_sec * 1000000000 +
|
||||||
(retro_perf_tick_t)tv.tv_nsec;
|
(retro_perf_tick_t)tv.tv_nsec;
|
||||||
|
|
||||||
#elif defined(__GNUC__) && !defined(RARCH_CONSOLE)
|
#elif defined(__GNUC__) && defined(__i386__) || defined(__i486__) || defined(__i686__)
|
||||||
|
|
||||||
#if defined(__i386__) || defined(__i486__) || defined(__i686__)
|
|
||||||
__asm__ volatile ("rdtsc" : "=A" (time_ticks));
|
__asm__ volatile ("rdtsc" : "=A" (time_ticks));
|
||||||
#elif defined(__x86_64__)
|
#elif defined(__GNUC__) && defined(__x86_64__)
|
||||||
unsigned a, d;
|
unsigned a, d;
|
||||||
__asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
|
__asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
|
||||||
time_ticks = (retro_perf_tick_t)a | ((retro_perf_tick_t)d << 32);
|
time_ticks = (retro_perf_tick_t)a | ((retro_perf_tick_t)d << 32);
|
||||||
#endif
|
|
||||||
|
|
||||||
#elif defined(__ARM_ARCH_6__)
|
#elif defined(__ARM_ARCH_6__)
|
||||||
__asm__ volatile( "mrc p15, 0, %0, c9, c13, 0" : "=r"(time_ticks) );
|
__asm__ volatile( "mrc p15, 0, %0, c9, c13, 0" : "=r"(time_ticks) );
|
||||||
#elif defined(__CELLOS_LV2__) || defined(_XBOX360) || defined(__powerpc__) || defined(__ppc__) || defined(__POWERPC__)
|
#elif defined(__CELLOS_LV2__) || defined(_XBOX360) || defined(__powerpc__) || defined(__ppc__) || defined(__POWERPC__)
|
||||||
|
@ -171,13 +169,13 @@ retro_perf_tick_t retro_get_perf_counter(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_get_time_usec:
|
* cpu_features_get_time_usec:
|
||||||
*
|
*
|
||||||
* Gets time in microseconds.
|
* Gets time in microseconds.
|
||||||
*
|
*
|
||||||
* Returns: time in microseconds.
|
* Returns: time in microseconds.
|
||||||
**/
|
**/
|
||||||
retro_time_t retro_get_time_usec(void)
|
retro_time_t cpu_features_get_time_usec(void)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
static LARGE_INTEGER freq;
|
static LARGE_INTEGER freq;
|
||||||
|
@ -210,7 +208,7 @@ retro_time_t retro_get_time_usec(void)
|
||||||
#elif defined(VITA)
|
#elif defined(VITA)
|
||||||
return sceKernelGetProcessTimeWide();
|
return sceKernelGetProcessTimeWide();
|
||||||
#else
|
#else
|
||||||
#error "Your platform does not have a timer function implemented in retro_get_time_usec(). Cannot continue."
|
#error "Your platform does not have a timer function implemented in cpu_features_get_time_usec(). Cannot continue."
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +243,7 @@ void x86_cpuid(int func, int flags[4])
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
__cpuid(flags, func);
|
__cpuid(flags, func);
|
||||||
#else
|
#else
|
||||||
RARCH_WARN("Unknown compiler. Cannot check CPUID with inline assembly.\n");
|
printf("Unknown compiler. Cannot check CPUID with inline assembly.\n");
|
||||||
memset(flags, 0, 4 * sizeof(int));
|
memset(flags, 0, 4 * sizeof(int));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -267,7 +265,7 @@ static uint64_t xgetbv_x86(uint32_t idx)
|
||||||
/* Intrinsic only works on 2010 SP1 and above. */
|
/* Intrinsic only works on 2010 SP1 and above. */
|
||||||
return _xgetbv(idx);
|
return _xgetbv(idx);
|
||||||
#else
|
#else
|
||||||
RARCH_WARN("Unknown compiler. Cannot check xgetbv bits.\n");
|
printf("Unknown compiler. Cannot check xgetbv bits.\n");
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -293,13 +291,13 @@ static void arm_enable_runfast_mode(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_get_cpu_cores:
|
* cpu_features_get_core_amount:
|
||||||
*
|
*
|
||||||
* Gets the amount of available CPU cores.
|
* Gets the amount of available CPU cores.
|
||||||
*
|
*
|
||||||
* Returns: amount of CPU cores available.
|
* Returns: amount of CPU cores available.
|
||||||
**/
|
**/
|
||||||
unsigned retro_get_cpu_cores(void)
|
unsigned cpu_features_get_core_amount(void)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) && !defined(_XBOX)
|
#if defined(_WIN32) && !defined(_XBOX)
|
||||||
/* Win32 */
|
/* Win32 */
|
||||||
|
@ -354,13 +352,13 @@ unsigned retro_get_cpu_cores(void)
|
||||||
#define VENDOR_INTEL_d 0x49656e69
|
#define VENDOR_INTEL_d 0x49656e69
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_get_cpu_features:
|
* cpu_features_get:
|
||||||
*
|
*
|
||||||
* Gets CPU features..
|
* Gets CPU features..
|
||||||
*
|
*
|
||||||
* Returns: bitmask of all CPU features available.
|
* Returns: bitmask of all CPU features available.
|
||||||
**/
|
**/
|
||||||
uint64_t retro_get_cpu_features(void)
|
uint64_t cpu_features_get(void)
|
||||||
{
|
{
|
||||||
int flags[4];
|
int flags[4];
|
||||||
int vendor_shuffle[3];
|
int vendor_shuffle[3];
|
||||||
|
@ -389,53 +387,53 @@ uint64_t retro_get_cpu_features(void)
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.mmx", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.mmx", NULL, &len, NULL, 0) == 0)
|
||||||
{
|
{
|
||||||
cpu |= RETRO_SIMD_MMX;
|
cpu |= CPU_FEATURE_MMX;
|
||||||
cpu |= RETRO_SIMD_MMXEXT;
|
cpu |= CPU_FEATURE_MMXEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.sse", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.sse", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_SSE;
|
cpu |= CPU_FEATURE_SSE;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.sse2", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.sse2", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_SSE2;
|
cpu |= CPU_FEATURE_SSE2;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.sse3", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.sse3", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_SSE3;
|
cpu |= CPU_FEATURE_SSE3;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.supplementalsse3", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.supplementalsse3", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_SSSE3;
|
cpu |= CPU_FEATURE_SSSE3;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.sse4_1", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.sse4_1", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_SSE4;
|
cpu |= CPU_FEATURE_SSE4;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.sse4_2", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.sse4_2", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_SSE42;
|
cpu |= CPU_FEATURE_SSE42;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.aes", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.aes", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_AES;
|
cpu |= CPU_FEATURE_AES;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.avx1_0", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.avx1_0", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_AVX;
|
cpu |= CPU_FEATURE_AVX;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.avx2_0", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.avx2_0", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_AVX2;
|
cpu |= CPU_FEATURE_AVX2;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.altivec", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.altivec", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_VMX;
|
cpu |= CPU_FEATURE_VMX;
|
||||||
|
|
||||||
len = sizeof(size_t);
|
len = sizeof(size_t);
|
||||||
if (sysctlbyname("hw.optional.neon", NULL, &len, NULL, 0) == 0)
|
if (sysctlbyname("hw.optional.neon", NULL, &len, NULL, 0) == 0)
|
||||||
cpu |= RETRO_SIMD_NEON;
|
cpu |= CPU_FEATURE_NEON;
|
||||||
|
|
||||||
#elif defined(CPU_X86)
|
#elif defined(CPU_X86)
|
||||||
(void)avx_flags;
|
(void)avx_flags;
|
||||||
|
@ -446,7 +444,7 @@ uint64_t retro_get_cpu_features(void)
|
||||||
vendor_shuffle[2] = flags[2];
|
vendor_shuffle[2] = flags[2];
|
||||||
memcpy(vendor, vendor_shuffle, sizeof(vendor_shuffle));
|
memcpy(vendor, vendor_shuffle, sizeof(vendor_shuffle));
|
||||||
|
|
||||||
RARCH_LOG("[CPUID]: Vendor: %s\n", vendor);
|
printf("[CPUID]: Vendor: %s\n", vendor);
|
||||||
|
|
||||||
vendor_is_intel = (
|
vendor_is_intel = (
|
||||||
flags[1] == VENDOR_INTEL_b &&
|
flags[1] == VENDOR_INTEL_b &&
|
||||||
|
@ -460,52 +458,52 @@ uint64_t retro_get_cpu_features(void)
|
||||||
x86_cpuid(1, flags);
|
x86_cpuid(1, flags);
|
||||||
|
|
||||||
if (flags[3] & (1 << 23))
|
if (flags[3] & (1 << 23))
|
||||||
cpu |= RETRO_SIMD_MMX;
|
cpu |= CPU_FEATURE_MMX;
|
||||||
|
|
||||||
if (flags[3] & (1 << 25))
|
if (flags[3] & (1 << 25))
|
||||||
{
|
{
|
||||||
/* SSE also implies MMXEXT (according to FFmpeg source). */
|
/* SSE also implies MMXEXT (according to FFmpeg source). */
|
||||||
cpu |= RETRO_SIMD_SSE;
|
cpu |= CPU_FEATURE_SSE;
|
||||||
cpu |= RETRO_SIMD_MMXEXT;
|
cpu |= CPU_FEATURE_MMXEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (flags[3] & (1 << 26))
|
if (flags[3] & (1 << 26))
|
||||||
cpu |= RETRO_SIMD_SSE2;
|
cpu |= CPU_FEATURE_SSE2;
|
||||||
|
|
||||||
if (flags[2] & (1 << 0))
|
if (flags[2] & (1 << 0))
|
||||||
cpu |= RETRO_SIMD_SSE3;
|
cpu |= CPU_FEATURE_SSE3;
|
||||||
|
|
||||||
if (flags[2] & (1 << 9))
|
if (flags[2] & (1 << 9))
|
||||||
cpu |= RETRO_SIMD_SSSE3;
|
cpu |= CPU_FEATURE_SSSE3;
|
||||||
|
|
||||||
if (flags[2] & (1 << 19))
|
if (flags[2] & (1 << 19))
|
||||||
cpu |= RETRO_SIMD_SSE4;
|
cpu |= CPU_FEATURE_SSE4;
|
||||||
|
|
||||||
if (flags[2] & (1 << 20))
|
if (flags[2] & (1 << 20))
|
||||||
cpu |= RETRO_SIMD_SSE42;
|
cpu |= CPU_FEATURE_SSE42;
|
||||||
|
|
||||||
if ((flags[2] & (1 << 23)))
|
if ((flags[2] & (1 << 23)))
|
||||||
cpu |= RETRO_SIMD_POPCNT;
|
cpu |= CPU_FEATURE_POPCNT;
|
||||||
|
|
||||||
if (vendor_is_intel && (flags[2] & (1 << 22)))
|
if (vendor_is_intel && (flags[2] & (1 << 22)))
|
||||||
cpu |= RETRO_SIMD_MOVBE;
|
cpu |= CPU_FEATURE_MOVBE;
|
||||||
|
|
||||||
if (flags[2] & (1 << 25))
|
if (flags[2] & (1 << 25))
|
||||||
cpu |= RETRO_SIMD_AES;
|
cpu |= CPU_FEATURE_AES;
|
||||||
|
|
||||||
|
|
||||||
/* Must only perform xgetbv check if we have
|
/* Must only perform xgetbv check if we have
|
||||||
* AVX CPU support (guaranteed to have at least i686). */
|
* AVX CPU support (guaranteed to have at least i686). */
|
||||||
if (((flags[2] & avx_flags) == avx_flags)
|
if (((flags[2] & avx_flags) == avx_flags)
|
||||||
&& ((xgetbv_x86(0) & 0x6) == 0x6))
|
&& ((xgetbv_x86(0) & 0x6) == 0x6))
|
||||||
cpu |= RETRO_SIMD_AVX;
|
cpu |= CPU_FEATURE_AVX;
|
||||||
|
|
||||||
if (max_flag >= 7)
|
if (max_flag >= 7)
|
||||||
{
|
{
|
||||||
x86_cpuid(7, flags);
|
x86_cpuid(7, flags);
|
||||||
if (flags[1] & (1 << 5))
|
if (flags[1] & (1 << 5))
|
||||||
cpu |= RETRO_SIMD_AVX2;
|
cpu |= CPU_FEATURE_AVX2;
|
||||||
}
|
}
|
||||||
|
|
||||||
x86_cpuid(0x80000000, flags);
|
x86_cpuid(0x80000000, flags);
|
||||||
|
@ -514,55 +512,55 @@ uint64_t retro_get_cpu_features(void)
|
||||||
{
|
{
|
||||||
x86_cpuid(0x80000001, flags);
|
x86_cpuid(0x80000001, flags);
|
||||||
if (flags[3] & (1 << 23))
|
if (flags[3] & (1 << 23))
|
||||||
cpu |= RETRO_SIMD_MMX;
|
cpu |= CPU_FEATURE_MMX;
|
||||||
if (flags[3] & (1 << 22))
|
if (flags[3] & (1 << 22))
|
||||||
cpu |= RETRO_SIMD_MMXEXT;
|
cpu |= CPU_FEATURE_MMXEXT;
|
||||||
}
|
}
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
cpu_flags = linux_get_cpu_features();
|
cpu_flags = linux_get_cpu_features();
|
||||||
|
|
||||||
if (cpu_flags & CPU_ARM_FEATURE_NEON)
|
if (cpu_flags & CPU_ARM_FEATURE_NEON)
|
||||||
{
|
{
|
||||||
cpu |= RETRO_SIMD_NEON;
|
cpu |= CPU_FEATURE_NEON;
|
||||||
#ifdef __ARM_NEON__
|
#ifdef __ARM_NEON__
|
||||||
arm_enable_runfast_mode();
|
arm_enable_runfast_mode();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpu_flags & CPU_ARM_FEATURE_VFPv3)
|
if (cpu_flags & CPU_ARM_FEATURE_VFPv3)
|
||||||
cpu |= RETRO_SIMD_VFPV3;
|
cpu |= CPU_FEATURE_VFPV3;
|
||||||
|
|
||||||
#elif defined(__ARM_NEON__)
|
#elif defined(__ARM_NEON__)
|
||||||
cpu |= RETRO_SIMD_NEON;
|
cpu |= CPU_FEATURE_NEON;
|
||||||
arm_enable_runfast_mode();
|
arm_enable_runfast_mode();
|
||||||
#elif defined(__ALTIVEC__)
|
#elif defined(__ALTIVEC__)
|
||||||
cpu |= RETRO_SIMD_VMX;
|
cpu |= CPU_FEATURE_VMX;
|
||||||
#elif defined(XBOX360)
|
#elif defined(XBOX360)
|
||||||
cpu |= RETRO_SIMD_VMX128;
|
cpu |= CPU_FEATURE_VMX128;
|
||||||
#elif defined(PSP)
|
#elif defined(PSP)
|
||||||
cpu |= RETRO_SIMD_VFPU;
|
cpu |= CPU_FEATURE_VFPU;
|
||||||
#elif defined(GEKKO)
|
#elif defined(GEKKO)
|
||||||
cpu |= RETRO_SIMD_PS;
|
cpu |= CPU_FEATURE_PS;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (cpu & RETRO_SIMD_MMX) strlcat(buf, " MMX", sizeof(buf));
|
if (cpu & CPU_FEATURE_MMX) strlcat(buf, " MMX", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_MMXEXT) strlcat(buf, " MMXEXT", sizeof(buf));
|
if (cpu & CPU_FEATURE_MMXEXT) strlcat(buf, " MMXEXT", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_SSE) strlcat(buf, " SSE", sizeof(buf));
|
if (cpu & CPU_FEATURE_SSE) strlcat(buf, " SSE", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_SSE2) strlcat(buf, " SSE2", sizeof(buf));
|
if (cpu & CPU_FEATURE_SSE2) strlcat(buf, " SSE2", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_SSE3) strlcat(buf, " SSE3", sizeof(buf));
|
if (cpu & CPU_FEATURE_SSE3) strlcat(buf, " SSE3", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_SSSE3) strlcat(buf, " SSSE3", sizeof(buf));
|
if (cpu & CPU_FEATURE_SSSE3) strlcat(buf, " SSSE3", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_SSE4) strlcat(buf, " SSE4", sizeof(buf));
|
if (cpu & CPU_FEATURE_SSE4) strlcat(buf, " SSE4", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_SSE42) strlcat(buf, " SSE4.2", sizeof(buf));
|
if (cpu & CPU_FEATURE_SSE42) strlcat(buf, " SSE4.2", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_AES) strlcat(buf, " AES", sizeof(buf));
|
if (cpu & CPU_FEATURE_AES) strlcat(buf, " AES", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_AVX) strlcat(buf, " AVX", sizeof(buf));
|
if (cpu & CPU_FEATURE_AVX) strlcat(buf, " AVX", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_AVX2) strlcat(buf, " AVX2", sizeof(buf));
|
if (cpu & CPU_FEATURE_AVX2) strlcat(buf, " AVX2", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_NEON) strlcat(buf, " NEON", sizeof(buf));
|
if (cpu & CPU_FEATURE_NEON) strlcat(buf, " NEON", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_VFPV3) strlcat(buf, " VFPv3", sizeof(buf));
|
if (cpu & CPU_FEATURE_VFPV3) strlcat(buf, " VFPv3", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_VFPV4) strlcat(buf, " VFPv4", sizeof(buf));
|
if (cpu & CPU_FEATURE_VFPV4) strlcat(buf, " VFPv4", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_VMX) strlcat(buf, " VMX", sizeof(buf));
|
if (cpu & CPU_FEATURE_VMX) strlcat(buf, " VMX", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_VMX128) strlcat(buf, " VMX128", sizeof(buf));
|
if (cpu & CPU_FEATURE_VMX128) strlcat(buf, " VMX128", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_VFPU) strlcat(buf, " VFPU", sizeof(buf));
|
if (cpu & CPU_FEATURE_VFPU) strlcat(buf, " VFPU", sizeof(buf));
|
||||||
if (cpu & RETRO_SIMD_PS) strlcat(buf, " PS", sizeof(buf));
|
if (cpu & CPU_FEATURE_PS) strlcat(buf, " PS", sizeof(buf));
|
||||||
|
|
||||||
return cpu;
|
return cpu;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,42 +14,78 @@
|
||||||
* If not, see <http://www.gnu.org/licenses/>.
|
* If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _RARCH_PERF_H
|
#ifndef _LIBRETRO_SDK_CPU_INFO_H
|
||||||
#define _RARCH_PERF_H
|
#define _LIBRETRO_SDK_CPU_INFO_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef RARCH_INTERNAL
|
||||||
#include "libretro.h"
|
#include "libretro.h"
|
||||||
|
#else
|
||||||
|
typedef uint64_t retro_perf_tick_t;
|
||||||
|
typedef uint64_t retro_time_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ID values for CPU features */
|
||||||
|
#define CPU_FEATURE_SSE (1 << 0)
|
||||||
|
#define CPU_FEATURE_SSE2 (1 << 1)
|
||||||
|
#define CPU_FEATURE_VMX (1 << 2)
|
||||||
|
#define CPU_FEATURE_VMX128 (1 << 3)
|
||||||
|
#define CPU_FEATURE_AVX (1 << 4)
|
||||||
|
#define CPU_FEATURE_NEON (1 << 5)
|
||||||
|
#define CPU_FEATURE_SSE3 (1 << 6)
|
||||||
|
#define CPU_FEATURE_SSSE3 (1 << 7)
|
||||||
|
#define CPU_FEATURE_MMX (1 << 8)
|
||||||
|
#define CPU_FEATURE_MMXEXT (1 << 9)
|
||||||
|
#define CPU_FEATURE_SSE4 (1 << 10)
|
||||||
|
#define CPU_FEATURE_SSE42 (1 << 11)
|
||||||
|
#define CPU_FEATURE_AVX2 (1 << 12)
|
||||||
|
#define CPU_FEATURE_VFPU (1 << 13)
|
||||||
|
#define CPU_FEATURE_PS (1 << 14)
|
||||||
|
#define CPU_FEATURE_AES (1 << 15)
|
||||||
|
#define CPU_FEATURE_VFPV3 (1 << 16)
|
||||||
|
#define CPU_FEATURE_VFPV4 (1 << 17)
|
||||||
|
#define CPU_FEATURE_POPCNT (1 << 18)
|
||||||
|
#define CPU_FEATURE_MOVBE (1 << 19)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_get_time_usec:
|
* cpu_features_get_perf_counter:
|
||||||
|
*
|
||||||
|
* Gets performance counter.
|
||||||
|
*
|
||||||
|
* Returns: performance counter.
|
||||||
|
**/
|
||||||
|
retro_perf_tick_t cpu_features_get_perf_counter(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cpu_features_get_time_usec:
|
||||||
*
|
*
|
||||||
* Gets time in microseconds. *
|
* Gets time in microseconds. *
|
||||||
* Returns: time in microseconds.
|
* Returns: time in microseconds.
|
||||||
**/
|
**/
|
||||||
retro_time_t retro_get_time_usec(void);
|
retro_time_t cpu_features_get_time_usec(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_get_cpu_features:
|
* cpu_features_get:
|
||||||
*
|
*
|
||||||
* Gets CPU features..
|
* Gets CPU features..
|
||||||
*
|
*
|
||||||
* Returns: bitmask of all CPU features available.
|
* Returns: bitmask of all CPU features available.
|
||||||
**/
|
**/
|
||||||
uint64_t retro_get_cpu_features(void);
|
uint64_t cpu_features_get(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_get_cpu_cores:
|
* cpu_features_get_core_amount:
|
||||||
*
|
*
|
||||||
* Gets the amount of available CPU cores.
|
* Gets the amount of available CPU cores.
|
||||||
*
|
*
|
||||||
* Returns: amount of CPU cores available.
|
* Returns: amount of CPU cores available.
|
||||||
**/
|
**/
|
||||||
unsigned retro_get_cpu_cores(void);
|
unsigned cpu_features_get_core_amount(void);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "performance.h"
|
||||||
#include "performance_counters.h"
|
#include "performance_counters.h"
|
||||||
|
|
||||||
#include "general.h"
|
#include "general.h"
|
||||||
|
@ -133,7 +134,7 @@ void retro_perf_start(struct retro_perf_counter *perf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
perf->call_cnt++;
|
perf->call_cnt++;
|
||||||
perf->start = retro_get_perf_counter();
|
perf->start = cpu_features_get_perf_counter();
|
||||||
}
|
}
|
||||||
|
|
||||||
void retro_perf_stop(struct retro_perf_counter *perf)
|
void retro_perf_stop(struct retro_perf_counter *perf)
|
||||||
|
@ -141,5 +142,5 @@ void retro_perf_stop(struct retro_perf_counter *perf)
|
||||||
if (!runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL) || !perf)
|
if (!runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL) || !perf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
perf->total += retro_get_perf_counter() - perf->start;
|
perf->total += cpu_features_get_perf_counter() - perf->start;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1545,7 +1545,7 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data)
|
||||||
break;
|
break;
|
||||||
case RARCH_CTL_VALIDATE_CPU_FEATURES:
|
case RARCH_CTL_VALIDATE_CPU_FEATURES:
|
||||||
{
|
{
|
||||||
uint64_t cpu = retro_get_cpu_features();
|
uint64_t cpu = cpu_features_get();
|
||||||
(void)cpu;
|
(void)cpu;
|
||||||
|
|
||||||
#ifdef __SSE__
|
#ifdef __SSE__
|
||||||
|
@ -1594,7 +1594,7 @@ int retroarch_get_capabilities(enum rarch_capabilities type,
|
||||||
{
|
{
|
||||||
case RARCH_CAPABILITIES_CPU:
|
case RARCH_CAPABILITIES_CPU:
|
||||||
{
|
{
|
||||||
uint64_t cpu = retro_get_cpu_features();
|
uint64_t cpu = cpu_features_get();
|
||||||
|
|
||||||
if (cpu & RETRO_SIMD_MMX)
|
if (cpu & RETRO_SIMD_MMX)
|
||||||
strlcat(s, "MMX ", len);
|
strlcat(s, "MMX ", len);
|
||||||
|
|
|
@ -1316,7 +1316,7 @@ int runloop_iterate(unsigned *sleep_ms)
|
||||||
(settings->fastforward_ratio == 0.0f)
|
(settings->fastforward_ratio == 0.0f)
|
||||||
? 1.0f : settings->fastforward_ratio;
|
? 1.0f : settings->fastforward_ratio;
|
||||||
|
|
||||||
frame_limit_last_time = retro_get_time_usec();
|
frame_limit_last_time = cpu_features_get_time_usec();
|
||||||
frame_limit_minimum_time = (retro_time_t)roundf(1000000.0f
|
frame_limit_minimum_time = (retro_time_t)roundf(1000000.0f
|
||||||
/ (av_info->timing.fps * fastforward_ratio));
|
/ (av_info->timing.fps * fastforward_ratio));
|
||||||
|
|
||||||
|
@ -1343,7 +1343,7 @@ int runloop_iterate(unsigned *sleep_ms)
|
||||||
/* Updates frame timing if frame timing callback is in use by the core.
|
/* Updates frame timing if frame timing callback is in use by the core.
|
||||||
* Limits frame time if fast forward ratio throttle is enabled. */
|
* Limits frame time if fast forward ratio throttle is enabled. */
|
||||||
|
|
||||||
retro_time_t current = retro_get_time_usec();
|
retro_time_t current = cpu_features_get_time_usec();
|
||||||
retro_time_t delta = current - runloop_frame_time_last;
|
retro_time_t delta = current - runloop_frame_time_last;
|
||||||
bool is_locked_fps = (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL) ||
|
bool is_locked_fps = (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL) ||
|
||||||
input_driver_is_nonblock_state()) |
|
input_driver_is_nonblock_state()) |
|
||||||
|
@ -1513,7 +1513,7 @@ int runloop_iterate(unsigned *sleep_ms)
|
||||||
end:
|
end:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
current = retro_get_time_usec();
|
current = cpu_features_get_time_usec();
|
||||||
target = frame_limit_last_time +
|
target = frame_limit_last_time +
|
||||||
frame_limit_minimum_time;
|
frame_limit_minimum_time;
|
||||||
to_sleep_ms = (target - current) / 1000;
|
to_sleep_ms = (target - current) / 1000;
|
||||||
|
@ -1526,7 +1526,7 @@ end:
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
frame_limit_last_time = retro_get_time_usec();
|
frame_limit_last_time = cpu_features_get_time_usec();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue