mirror of
https://github.com/holub/mame
synced 2025-07-09 03:38:23 +03:00
Remove -mt, nw
This commit is contained in:
parent
b212e5dc2e
commit
e1883e3090
@ -44,7 +44,6 @@ ui_menu_display_options::dspl_option ui_menu_display_options::m_options[] = {
|
|||||||
{ 0, __("GLSL"), OSDOPTION_GL_GLSL },
|
{ 0, __("GLSL"), OSDOPTION_GL_GLSL },
|
||||||
{ 0, __("Bilinear Filtering"), OSDOPTION_FILTER },
|
{ 0, __("Bilinear Filtering"), OSDOPTION_FILTER },
|
||||||
{ 0, __("Bitmap Prescaling"), OSDOPTION_PRESCALE },
|
{ 0, __("Bitmap Prescaling"), OSDOPTION_PRESCALE },
|
||||||
{ 0, __("Multi-Threaded Rendering"), OSDOPTION_MULTITHREADING },
|
|
||||||
{ 0, __("Window Mode"), OSDOPTION_WINDOW },
|
{ 0, __("Window Mode"), OSDOPTION_WINDOW },
|
||||||
{ 0, __("Enforce Aspect Ratio"), OSDOPTION_KEEPASPECT },
|
{ 0, __("Enforce Aspect Ratio"), OSDOPTION_KEEPASPECT },
|
||||||
{ 0, __("Start Out Maximized"), OSDOPTION_MAXIMIZE },
|
{ 0, __("Start Out Maximized"), OSDOPTION_MAXIMIZE },
|
||||||
|
@ -42,7 +42,6 @@ const options_entry osd_options::s_option_entries[] =
|
|||||||
{ OSDOPTION_WATCHDOG ";wdog", "0", OPTION_INTEGER, "force the program to terminate if no updates within specified number of seconds" },
|
{ OSDOPTION_WATCHDOG ";wdog", "0", OPTION_INTEGER, "force the program to terminate if no updates within specified number of seconds" },
|
||||||
|
|
||||||
{ nullptr, nullptr, OPTION_HEADER, "OSD PERFORMANCE OPTIONS" },
|
{ nullptr, nullptr, OPTION_HEADER, "OSD PERFORMANCE OPTIONS" },
|
||||||
{ OSDOPTION_MULTITHREADING ";mt", "0", OPTION_BOOLEAN, "enable multithreading; this enables rendering and blitting on a separate thread" },
|
|
||||||
{ OSDOPTION_NUMPROCESSORS ";np", OSDOPTVAL_AUTO, OPTION_STRING, "number of processors; this overrides the number the system reports" },
|
{ OSDOPTION_NUMPROCESSORS ";np", OSDOPTVAL_AUTO, OPTION_STRING, "number of processors; this overrides the number the system reports" },
|
||||||
{ OSDOPTION_BENCH, "0", OPTION_INTEGER, "benchmark for the given number of emulated seconds; implies -video none -sound none -nothrottle" },
|
{ OSDOPTION_BENCH, "0", OPTION_INTEGER, "benchmark for the given number of emulated seconds; implies -video none -sound none -nothrottle" },
|
||||||
|
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#define OSDOPTION_DEBUGGER_FONT_SIZE "debugger_font_size"
|
#define OSDOPTION_DEBUGGER_FONT_SIZE "debugger_font_size"
|
||||||
#define OSDOPTION_WATCHDOG "watchdog"
|
#define OSDOPTION_WATCHDOG "watchdog"
|
||||||
|
|
||||||
#define OSDOPTION_MULTITHREADING "multithreading"
|
|
||||||
#define OSDOPTION_NUMPROCESSORS "numprocessors"
|
#define OSDOPTION_NUMPROCESSORS "numprocessors"
|
||||||
#define OSDOPTION_BENCH "bench"
|
#define OSDOPTION_BENCH "bench"
|
||||||
|
|
||||||
@ -102,7 +101,6 @@ public:
|
|||||||
int watchdog() const { return int_value(OSDOPTION_WATCHDOG); }
|
int watchdog() const { return int_value(OSDOPTION_WATCHDOG); }
|
||||||
|
|
||||||
// performance options
|
// performance options
|
||||||
bool multithreading() const { return bool_value(OSDOPTION_MULTITHREADING); }
|
|
||||||
const char *numprocessors() const { return value(OSDOPTION_NUMPROCESSORS); }
|
const char *numprocessors() const { return value(OSDOPTION_NUMPROCESSORS); }
|
||||||
int bench() const { return int_value(OSDOPTION_BENCH); }
|
int bench() const { return int_value(OSDOPTION_BENCH); }
|
||||||
|
|
||||||
|
@ -90,7 +90,6 @@ sdl_window_info *sdl_window_list;
|
|||||||
static sdl_window_info **last_window_ptr;
|
static sdl_window_info **last_window_ptr;
|
||||||
|
|
||||||
// event handling
|
// event handling
|
||||||
static int multithreading_enabled;
|
|
||||||
static osd_work_queue *work_queue;
|
static osd_work_queue *work_queue;
|
||||||
|
|
||||||
static SDL_threadID main_threadid;
|
static SDL_threadID main_threadid;
|
||||||
@ -145,12 +144,7 @@ static inline void execute_async(osd_work_callback callback, const worker_param
|
|||||||
{
|
{
|
||||||
worker_param *wp_temp = (worker_param *) osd_malloc(sizeof(worker_param));
|
worker_param *wp_temp = (worker_param *) osd_malloc(sizeof(worker_param));
|
||||||
*wp_temp = wp;
|
*wp_temp = wp;
|
||||||
|
callback((void *) wp_temp, 0);
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
osd_work_item_queue(work_queue, callback, (void *) wp_temp, WORK_ITEM_FLAG_AUTO_RELEASE);
|
|
||||||
} else
|
|
||||||
callback((void *) wp_temp, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void execute_sync(osd_work_callback callback, const worker_param &wp)
|
static inline void execute_sync(osd_work_callback callback, const worker_param &wp)
|
||||||
@ -202,28 +196,13 @@ static OSDWORK_CALLBACK(sdlwindow_thread_id)
|
|||||||
bool sdl_osd_interface::window_init()
|
bool sdl_osd_interface::window_init()
|
||||||
{
|
{
|
||||||
osd_printf_verbose("Enter sdlwindow_init\n");
|
osd_printf_verbose("Enter sdlwindow_init\n");
|
||||||
// determine if we are using multithreading or not
|
|
||||||
multithreading_enabled = false;//options().multithreading();
|
|
||||||
|
|
||||||
// get the main thread ID before anything else
|
// get the main thread ID before anything else
|
||||||
main_threadid = SDL_ThreadID();
|
main_threadid = SDL_ThreadID();
|
||||||
|
|
||||||
// if multithreading, create a thread to run the windows
|
// otherwise, treat the window thread as the main thread
|
||||||
if (multithreading_enabled)
|
//window_threadid = main_threadid;
|
||||||
{
|
sdlwindow_thread_id(nullptr, 0);
|
||||||
// create a thread to run the windows from
|
|
||||||
work_queue = osd_work_queue_alloc(WORK_QUEUE_FLAG_IO);
|
|
||||||
if (work_queue == nullptr)
|
|
||||||
return false;
|
|
||||||
osd_work_item_queue(work_queue, &sdlwindow_thread_id, nullptr, WORK_ITEM_FLAG_AUTO_RELEASE);
|
|
||||||
sdlwindow_sync();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// otherwise, treat the window thread as the main thread
|
|
||||||
//window_threadid = main_threadid;
|
|
||||||
sdlwindow_thread_id(nullptr, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// initialize the drawers
|
// initialize the drawers
|
||||||
if (video_config.mode == VIDEO_MODE_BGFX)
|
if (video_config.mode == VIDEO_MODE_BGFX)
|
||||||
@ -304,15 +283,7 @@ bool sdl_osd_interface::window_init()
|
|||||||
|
|
||||||
static void sdlwindow_sync(void)
|
static void sdlwindow_sync(void)
|
||||||
{
|
{
|
||||||
if (multithreading_enabled)
|
// haha, do nothing, losers
|
||||||
{
|
|
||||||
// Fallback
|
|
||||||
while (!osd_work_queue_wait(work_queue, osd_ticks_per_second()*10))
|
|
||||||
{
|
|
||||||
osd_printf_warning("sdlwindow_sync: Sleeping...\n");
|
|
||||||
osd_sleep(osd_ticks_per_second() / 1000 * 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -370,19 +341,8 @@ void sdl_osd_interface::window_exit()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we're multithreaded, clean up the window thread
|
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
sdlwindow_sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
execute_async_wait(&sdlwindow_exit_wt, wp_dummy);
|
execute_async_wait(&sdlwindow_exit_wt, wp_dummy);
|
||||||
|
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
osd_work_queue_wait(work_queue, 1000000);
|
|
||||||
osd_work_queue_free(work_queue);
|
|
||||||
}
|
|
||||||
osd_printf_verbose("Leave sdlwindow_exit\n");
|
osd_printf_verbose("Leave sdlwindow_exit\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -731,18 +691,7 @@ int sdl_window_info::window_init()
|
|||||||
|
|
||||||
wp->set_window(this);
|
wp->set_window(this);
|
||||||
|
|
||||||
// FIXME: pass error back in a different way
|
result = *((int *) sdl_window_info::complete_create_wt((void *) wp, 0));
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
osd_work_item *wi;
|
|
||||||
|
|
||||||
wi = osd_work_item_queue(work_queue, &sdl_window_info::complete_create_wt, (void *) wp, 0);
|
|
||||||
sdlwindow_sync();
|
|
||||||
result = *((int *) (osd_work_item_result)(wi));
|
|
||||||
osd_work_item_release(wi);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
result = *((int *) sdl_window_info::complete_create_wt((void *) wp, 0));
|
|
||||||
|
|
||||||
// handle error conditions
|
// handle error conditions
|
||||||
if (result == 1)
|
if (result == 1)
|
||||||
@ -796,10 +745,6 @@ void sdl_window_info::destroy()
|
|||||||
sdl_window_info **prevptr;
|
sdl_window_info **prevptr;
|
||||||
|
|
||||||
ASSERT_MAIN_THREAD();
|
ASSERT_MAIN_THREAD();
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
sdlwindow_sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
//osd_event_wait(window->rendered_event, osd_ticks_per_second()*10);
|
//osd_event_wait(window->rendered_event, osd_ticks_per_second()*10);
|
||||||
|
|
||||||
|
@ -101,8 +101,6 @@ static int in_background;
|
|||||||
static int ui_temp_pause;
|
static int ui_temp_pause;
|
||||||
static int ui_temp_was_paused;
|
static int ui_temp_was_paused;
|
||||||
|
|
||||||
static int multithreading_enabled;
|
|
||||||
|
|
||||||
static HANDLE window_thread;
|
static HANDLE window_thread;
|
||||||
static DWORD window_threadid;
|
static DWORD window_threadid;
|
||||||
|
|
||||||
@ -158,7 +156,6 @@ static void mtlog_dump(void)
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void mtlog_add(const char *event) { }
|
void mtlog_add(const char *event) { }
|
||||||
static void mtlog_dump(void) { }
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -170,11 +167,6 @@ static void mtlog_dump(void) { }
|
|||||||
|
|
||||||
bool windows_osd_interface::window_init()
|
bool windows_osd_interface::window_init()
|
||||||
{
|
{
|
||||||
size_t temp;
|
|
||||||
|
|
||||||
// determine if we are using multithreading or not
|
|
||||||
multithreading_enabled = false;//downcast<windows_options &>(machine().options()).multithreading();
|
|
||||||
|
|
||||||
// get the main thread ID before anything else
|
// get the main thread ID before anything else
|
||||||
main_threadid = GetCurrentThreadId();
|
main_threadid = GetCurrentThreadId();
|
||||||
|
|
||||||
@ -186,30 +178,8 @@ bool windows_osd_interface::window_init()
|
|||||||
if (!ui_pause_event)
|
if (!ui_pause_event)
|
||||||
fatalerror("Failed to create pause event\n");
|
fatalerror("Failed to create pause event\n");
|
||||||
|
|
||||||
// if multithreading, create a thread to run the windows
|
window_thread = GetCurrentThread();
|
||||||
if (multithreading_enabled)
|
window_threadid = main_threadid;
|
||||||
{
|
|
||||||
// create an event to signal when the window thread is ready
|
|
||||||
window_thread_ready_event = CreateEvent(nullptr, TRUE, FALSE, nullptr);
|
|
||||||
if (!window_thread_ready_event)
|
|
||||||
fatalerror("Failed to create window thread ready event\n");
|
|
||||||
|
|
||||||
// create a thread to run the windows from
|
|
||||||
temp = _beginthreadex(nullptr, 0, win_window_info::thread_entry, this, 0, (unsigned *)&window_threadid);
|
|
||||||
window_thread = (HANDLE)temp;
|
|
||||||
if (window_thread == nullptr)
|
|
||||||
fatalerror("Failed to create window thread\n");
|
|
||||||
|
|
||||||
// set the thread priority equal to the main MAME thread
|
|
||||||
SetThreadPriority(window_thread, GetThreadPriority(GetCurrentThread()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise, treat the window thread as the main thread
|
|
||||||
else
|
|
||||||
{
|
|
||||||
window_thread = GetCurrentThread();
|
|
||||||
window_threadid = main_threadid;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int fallbacks[VIDEO_MODE_COUNT] = {
|
const int fallbacks[VIDEO_MODE_COUNT] = {
|
||||||
-1, // NONE -> no fallback
|
-1, // NONE -> no fallback
|
||||||
@ -367,15 +337,6 @@ void windows_osd_interface::window_exit()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we're multithreaded, clean up the window thread
|
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
PostThreadMessage(window_threadid, WM_USER_SELF_TERMINATE, 0, 0);
|
|
||||||
WaitForSingleObject(window_thread, INFINITE);
|
|
||||||
|
|
||||||
mtlog_dump();
|
|
||||||
}
|
|
||||||
|
|
||||||
// kill the UI pause event
|
// kill the UI pause event
|
||||||
if (ui_pause_event)
|
if (ui_pause_event)
|
||||||
CloseHandle(ui_pause_event);
|
CloseHandle(ui_pause_event);
|
||||||
@ -839,23 +800,7 @@ void win_window_info::create(running_machine &machine, int index, osd_monitor_in
|
|||||||
// set the initial maximized state
|
// set the initial maximized state
|
||||||
window->m_startmaximized = options.maximize();
|
window->m_startmaximized = options.maximize();
|
||||||
|
|
||||||
// finish the window creation on the window thread
|
window->m_init_state = window->complete_create() ? -1 : 1;
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
// wait until the window thread is ready to respond to events
|
|
||||||
WaitForSingleObject(window_thread_ready_event, INFINITE);
|
|
||||||
|
|
||||||
PostThreadMessage(window_threadid, WM_USER_FINISH_CREATE_WINDOW, 0, (LPARAM)window);
|
|
||||||
while (window->m_init_state == 0)
|
|
||||||
{
|
|
||||||
winwindow_process_events(machine, 0, 1); //pump the message queue
|
|
||||||
Sleep(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
window->m_init_state = window->complete_create() ? -1 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle error conditions
|
// handle error conditions
|
||||||
if (window->m_init_state == -1)
|
if (window->m_init_state == -1)
|
||||||
@ -956,10 +901,7 @@ void win_window_info::update()
|
|||||||
// post a redraw request with the primitive list as a parameter
|
// post a redraw request with the primitive list as a parameter
|
||||||
last_update_time = timeGetTime();
|
last_update_time = timeGetTime();
|
||||||
mtlog_add("winwindow_video_window_update: PostMessage start");
|
mtlog_add("winwindow_video_window_update: PostMessage start");
|
||||||
if (multithreading_enabled)
|
SendMessage(m_hwnd, WM_USER_REDRAW, 0, (LPARAM)primlist);
|
||||||
PostMessage(m_hwnd, WM_USER_REDRAW, 0, (LPARAM)primlist);
|
|
||||||
else
|
|
||||||
SendMessage(m_hwnd, WM_USER_REDRAW, 0, (LPARAM)primlist);
|
|
||||||
mtlog_add("winwindow_video_window_update: PostMessage end");
|
mtlog_add("winwindow_video_window_update: PostMessage end");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1115,21 +1057,7 @@ void winwindow_ui_pause_from_main_thread(running_machine &machine, int pause)
|
|||||||
void winwindow_ui_pause_from_window_thread(running_machine &machine, int pause)
|
void winwindow_ui_pause_from_window_thread(running_machine &machine, int pause)
|
||||||
{
|
{
|
||||||
assert(GetCurrentThreadId() == window_threadid);
|
assert(GetCurrentThreadId() == window_threadid);
|
||||||
|
winwindow_ui_pause_from_main_thread(machine, pause);
|
||||||
// if we're multithreaded, we have to request a pause on the main thread
|
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
// request a pause from the main thread
|
|
||||||
PostThreadMessage(main_threadid, WM_USER_UI_TEMP_PAUSE, pause, 0);
|
|
||||||
|
|
||||||
// if we're pausing, block until it happens
|
|
||||||
if (pause)
|
|
||||||
WaitForSingleObject(ui_pause_event, INFINITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise, we just do it directly
|
|
||||||
else
|
|
||||||
winwindow_ui_pause_from_main_thread(machine, pause);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1143,16 +1071,7 @@ void winwindow_ui_exec_on_main_thread(void (*func)(void *), void *param)
|
|||||||
{
|
{
|
||||||
assert(GetCurrentThreadId() == window_threadid);
|
assert(GetCurrentThreadId() == window_threadid);
|
||||||
|
|
||||||
// if we're multithreaded, we have to request a pause on the main thread
|
(*func)(param);
|
||||||
if (multithreading_enabled)
|
|
||||||
{
|
|
||||||
// request a pause from the main thread
|
|
||||||
PostThreadMessage(main_threadid, WM_USER_EXEC_FUNC, (WPARAM) func, (LPARAM) param);
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise, we just do it directly
|
|
||||||
else
|
|
||||||
(*func)(param);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1551,10 +1470,7 @@ LRESULT CALLBACK win_window_info::video_window_proc(HWND wnd, UINT message, WPAR
|
|||||||
|
|
||||||
// close: cause MAME to exit
|
// close: cause MAME to exit
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
if (multithreading_enabled)
|
window->machine().schedule_exit();
|
||||||
PostThreadMessage(main_threadid, WM_QUIT, 0, 0);
|
|
||||||
else
|
|
||||||
window->machine().schedule_exit();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// destroy: clean up all attached rendering bits and nullptr out our hwnd
|
// destroy: clean up all attached rendering bits and nullptr out our hwnd
|
||||||
|
@ -562,7 +562,6 @@ void windows_osd_interface::init(running_machine &machine)
|
|||||||
if (profile > 0)
|
if (profile > 0)
|
||||||
{
|
{
|
||||||
options.set_value(OPTION_THROTTLE, false, OPTION_PRIORITY_MAXIMUM, error_string);
|
options.set_value(OPTION_THROTTLE, false, OPTION_PRIORITY_MAXIMUM, error_string);
|
||||||
options.set_value(OSDOPTION_MULTITHREADING, false, OPTION_PRIORITY_MAXIMUM, error_string);
|
|
||||||
options.set_value(OSDOPTION_NUMPROCESSORS, 1, OPTION_PRIORITY_MAXIMUM, error_string);
|
options.set_value(OSDOPTION_NUMPROCESSORS, 1, OPTION_PRIORITY_MAXIMUM, error_string);
|
||||||
assert(error_string.empty());
|
assert(error_string.empty());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user