From aecc1c851292aba3da06cc85adbe2b4689143ff8 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Mon, 6 Dec 2010 18:12:28 +0000 Subject: [PATCH] Fix regressions in games with buffered spriteram. --- src/emu/machine.c | 4 +++- src/emu/video.c | 31 ------------------------------- src/emu/video.h | 1 - src/emu/video/generic.c | 22 ++++++++++++++++++++++ 4 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/emu/machine.c b/src/emu/machine.c index 92c0c30aab3..d9617e5320a 100644 --- a/src/emu/machine.c +++ b/src/emu/machine.c @@ -276,7 +276,6 @@ void running_machine::start() palette_init(this); m_render = auto_alloc(this, render_manager(*this)); generic_machine_init(this); - generic_video_init(this); generic_sound_init(this); // initialize the timers and allocate a soft_reset timer @@ -313,6 +312,9 @@ void running_machine::start() memory_init(this); watchdog_init(this); + // must happen after memory_init because this relies on generic.spriteram + generic_video_init(this); + // allocate the gfx elements prior to device initialization gfx_init(this); diff --git a/src/emu/video.c b/src/emu/video.c index 70e400ac7b5..17d106780e8 100644 --- a/src/emu/video.c +++ b/src/emu/video.c @@ -141,10 +141,6 @@ video_manager::video_manager(running_machine &machine) // extract initial execution state from global configuration settings update_refresh_speed(); - // create spriteram buffers if necessary - if (machine.config->m_video_attributes & VIDEO_BUFFERS_SPRITERAM) - init_buffered_spriteram(); - // create a render target for snapshots const char *viewname = options_get_string(machine.options(), OPTION_SNAPVIEW); m_snap_native = (machine.primary_screen != NULL && (viewname[0] == 0 || strcmp(viewname, "native") == 0)); @@ -527,33 +523,6 @@ void video_manager::add_sound_to_recording(const INT16 *sound, int numsamples) -//------------------------------------------------- -// init_buffered_spriteram - initialize the -// double-buffered spriteram -//------------------------------------------------- - -void video_manager::init_buffered_spriteram() -{ - assert_always(m_machine.generic.spriteram_size != 0, "Video buffers spriteram but spriteram size is 0"); - - // allocate memory for the back buffer - m_machine.generic.buffered_spriteram.u8 = auto_alloc_array(&m_machine, UINT8, m_machine.generic.spriteram_size); - - // register for saving it - state_save_register_global_pointer(&m_machine, m_machine.generic.buffered_spriteram.u8, m_machine.generic.spriteram_size); - - // do the same for the second back buffer, if present - if (m_machine.generic.spriteram2_size) - { - // allocate memory - m_machine.generic.buffered_spriteram2.u8 = auto_alloc_array(&m_machine, UINT8, m_machine.generic.spriteram2_size); - - // register for saving it - state_save_register_global_pointer(&m_machine, m_machine.generic.buffered_spriteram2.u8, m_machine.generic.spriteram2_size); - } -} - - //------------------------------------------------- // video_exit - close down the video system //------------------------------------------------- diff --git a/src/emu/video.h b/src/emu/video.h index f295b0f0c99..9e7c188f32b 100644 --- a/src/emu/video.h +++ b/src/emu/video.h @@ -117,7 +117,6 @@ public: private: // internal helpers - void init_buffered_spriteram(); static void exit_static(running_machine &machine); void exit(); static TIMER_CALLBACK( screenless_update_callback ); diff --git a/src/emu/video/generic.c b/src/emu/video/generic.c index da8a75d69f3..dead579d78a 100644 --- a/src/emu/video/generic.c +++ b/src/emu/video/generic.c @@ -235,6 +235,28 @@ void generic_video_init(running_machine *machine) state_save_register_item(machine, "video", NULL, 0, state->flip_screen_x); state_save_register_item(machine, "video", NULL, 0, state->flip_screen_y); + + // create spriteram buffers if necessary + if (machine->config->m_video_attributes & VIDEO_BUFFERS_SPRITERAM) + { + assert_always(machine->generic.spriteram_size != 0, "Video buffers spriteram but spriteram size is 0"); + + // allocate memory for the back buffer + machine->generic.buffered_spriteram.u8 = auto_alloc_array(machine, UINT8, machine->generic.spriteram_size); + + // register for saving it + state_save_register_global_pointer(machine, machine->generic.buffered_spriteram.u8, machine->generic.spriteram_size); + + // do the same for the second back buffer, if present + if (machine->generic.spriteram2_size) + { + // allocate memory + machine->generic.buffered_spriteram2.u8 = auto_alloc_array(machine, UINT8, machine->generic.spriteram2_size); + + // register for saving it + state_save_register_global_pointer(machine, machine->generic.buffered_spriteram2.u8, machine->generic.spriteram2_size); + } + } }