A little more primary_screen removal.

This commit is contained in:
Aaron Giles 2013-08-06 04:05:49 +00:00
parent b8f66ce559
commit cb513fef5b
10 changed files with 70 additions and 40 deletions

View File

@ -120,10 +120,12 @@ public:
// construction/destruction // construction/destruction
poly_manager(running_machine &machine, UINT8 flags = 0); poly_manager(running_machine &machine, UINT8 flags = 0);
poly_manager(screen_device &screen, UINT8 flags = 0);
virtual ~poly_manager(); virtual ~poly_manager();
// getters // getters
running_machine &machine() const { return m_machine; } running_machine &machine() const { return m_machine; }
screen_device &screen() const { assert(m_screen != NULL); return *m_screen; }
// synchronization // synchronization
void wait(const char *debug_reason = "general"); void wait(const char *debug_reason = "general");
@ -247,6 +249,7 @@ private:
// queue management // queue management
running_machine & m_machine; running_machine & m_machine;
screen_device * m_screen;
osd_work_queue * m_queue; // work queue osd_work_queue * m_queue; // work queue
// arrays // arrays
@ -279,6 +282,7 @@ private:
template<typename _BaseType, class _ObjectData, int _MaxParams, int _MaxPolys> template<typename _BaseType, class _ObjectData, int _MaxParams, int _MaxPolys>
poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::poly_manager(running_machine &machine, UINT8 flags) poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::poly_manager(running_machine &machine, UINT8 flags)
: m_machine(machine), : m_machine(machine),
m_screen(NULL),
m_queue(NULL), m_queue(NULL),
m_polygon(machine, *this), m_polygon(machine, *this),
m_object(machine, *this), m_object(machine, *this),
@ -302,6 +306,33 @@ poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::poly_manager(runnin
} }
template<typename _BaseType, class _ObjectData, int _MaxParams, int _MaxPolys>
poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::poly_manager(screen_device &screen, UINT8 flags)
: m_machine(screen.machine()),
m_screen(&screen),
m_queue(NULL),
m_polygon(screen.machine(), *this),
m_object(screen.machine(), *this),
m_unit(screen.machine(), *this),
m_flags(flags),
m_triangles(0),
m_quads(0),
m_pixels(0)
{
#if KEEP_STATISTICS
memset(m_conflicts, 0, sizeof(m_conflicts));
memset(m_resolved, 0, sizeof(m_resolved));
#endif
// create the work queue
if (!(flags & POLYFLAG_NO_WORK_QUEUE))
m_queue = osd_work_queue_alloc(WORK_QUEUE_FLAG_MULTI | WORK_QUEUE_FLAG_HIGH_FREQ);
// request a pre-save callback for synchronization
machine().save().register_presave(save_prepost_delegate(FUNC(poly_manager::presave), this));
}
//------------------------------------------------- //-------------------------------------------------
// ~poly_manager - destructor // ~poly_manager - destructor
//------------------------------------------------- //-------------------------------------------------

View File

@ -353,18 +353,18 @@ struct cobra_polydata
class cobra_renderer : public poly_manager<float, cobra_polydata, 8, 10000> class cobra_renderer : public poly_manager<float, cobra_polydata, 8, 10000>
{ {
public: public:
cobra_renderer(running_machine &machine) cobra_renderer(screen_device &screen)
: poly_manager<float, cobra_polydata, 8, 10000>(machine) : poly_manager<float, cobra_polydata, 8, 10000>(screen)
{ {
m_texture_ram = auto_alloc_array(machine, UINT32, 0x100000); m_texture_ram = auto_alloc_array(machine(), UINT32, 0x100000);
m_framebuffer = auto_bitmap_rgb32_alloc(machine, 1024, 1024); m_framebuffer = auto_bitmap_rgb32_alloc(machine(), 1024, 1024);
m_backbuffer = auto_bitmap_rgb32_alloc(machine, 1024, 1024); m_backbuffer = auto_bitmap_rgb32_alloc(machine(), 1024, 1024);
m_overlay = auto_bitmap_rgb32_alloc(machine, 1024, 1024); m_overlay = auto_bitmap_rgb32_alloc(machine(), 1024, 1024);
m_zbuffer = auto_bitmap_ind32_alloc(machine, 1024, 1024); m_zbuffer = auto_bitmap_ind32_alloc(machine(), 1024, 1024);
m_stencil = auto_bitmap_ind32_alloc(machine, 1024, 1024); m_stencil = auto_bitmap_ind32_alloc(machine(), 1024, 1024);
m_gfx_regmask = auto_alloc_array(machine, UINT32, 0x100); m_gfx_regmask = auto_alloc_array(machine(), UINT32, 0x100);
for (int i=0; i < 0x100; i++) for (int i=0; i < 0x100; i++)
{ {
UINT32 mask = 0; UINT32 mask = 0;
@ -386,7 +386,7 @@ public:
void draw_point(const rectangle &visarea, vertex_t &v, UINT32 color); void draw_point(const rectangle &visarea, vertex_t &v, UINT32 color);
void draw_line(const rectangle &visarea, vertex_t &v1, vertex_t &v2); void draw_line(const rectangle &visarea, vertex_t &v1, vertex_t &v2);
void gfx_init(running_machine &machine); void gfx_init();
void gfx_exit(running_machine &machine); void gfx_exit(running_machine &machine);
void gfx_reset(running_machine &machine); void gfx_reset(running_machine &machine);
void gfx_fifo_exec(running_machine &machine); void gfx_fifo_exec(running_machine &machine);
@ -999,8 +999,8 @@ void cobra_state::video_start()
{ {
machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(cobra_state::cobra_video_exit), this)); machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(cobra_state::cobra_video_exit), this));
m_renderer = auto_alloc(machine(), cobra_renderer(machine())); m_renderer = auto_alloc(machine(), cobra_renderer(*m_screen));
m_renderer->gfx_init(machine()); m_renderer->gfx_init();
} }
UINT32 cobra_state::screen_update_cobra(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) UINT32 cobra_state::screen_update_cobra(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@ -2017,13 +2017,13 @@ void cobra_renderer::display(bitmap_rgb32 *bitmap, const rectangle &cliprect)
} }
} }
void cobra_renderer::gfx_init(running_machine &machine) void cobra_renderer::gfx_init()
{ {
const rectangle& visarea = machine.primary_screen->visible_area(); const rectangle& visarea = screen().visible_area();
m_gfx_gram = auto_alloc_array(machine, UINT32, 0x40000); m_gfx_gram = auto_alloc_array(machine(), UINT32, 0x40000);
m_gfx_register = auto_alloc_array(machine, UINT64, 0x3000); m_gfx_register = auto_alloc_array(machine(), UINT64, 0x3000);
m_gfx_register_select = 0; m_gfx_register_select = 0;
float zvalue = 10000000.0f; float zvalue = 10000000.0f;
@ -2134,7 +2134,7 @@ void cobra_renderer::gfx_write_reg(running_machine &machine, UINT64 data)
{ {
case 0x0000: case 0x0000:
{ {
const rectangle& visarea = machine.primary_screen->visible_area(); const rectangle& visarea = screen().visible_area();
copybitmap_trans(*m_framebuffer, *m_backbuffer, 0, 0, 0, 0, visarea, 0); copybitmap_trans(*m_framebuffer, *m_backbuffer, 0, 0, 0, 0, visarea, 0);
m_backbuffer->fill(0xff000000, visarea); m_backbuffer->fill(0xff000000, visarea);
@ -2155,7 +2155,7 @@ void cobra_renderer::gfx_fifo_exec(running_machine &machine)
if (cobra->m_gfx_fifo_loopback != 0) if (cobra->m_gfx_fifo_loopback != 0)
return; return;
const rectangle& visarea = machine.primary_screen->visible_area(); const rectangle& visarea = screen().visible_area();
vertex_t vert[32]; vertex_t vert[32];
cobra_fifo *fifo_in = cobra->m_gfxfifo_in; cobra_fifo *fifo_in = cobra->m_gfxfifo_in;

View File

@ -206,7 +206,7 @@ WRITE32_MEMBER(deco_mlc_state::avengrs_palette_w)
TIMER_DEVICE_CALLBACK_MEMBER(deco_mlc_state::interrupt_gen) TIMER_DEVICE_CALLBACK_MEMBER(deco_mlc_state::interrupt_gen)
{ {
// logerror("hit scanline IRQ %d (%08x)\n", machine.primary_screen->vpos(), info.i); // logerror("hit scanline IRQ %d (%08x)\n", m_screen->vpos(), info.i);
m_maincpu->set_input_line(m_mainCpuIsArm ? ARM_IRQ_LINE : 1, HOLD_LINE); m_maincpu->set_input_line(m_mainCpuIsArm ? ARM_IRQ_LINE : 1, HOLD_LINE);
} }

View File

@ -196,6 +196,7 @@ public:
INTERRUPT_GEN_MEMBER(namcos2_68k_slave_vblank); INTERRUPT_GEN_MEMBER(namcos2_68k_slave_vblank);
INTERRUPT_GEN_MEMBER(namcos2_68k_gpu_vblank); INTERRUPT_GEN_MEMBER(namcos2_68k_gpu_vblank);
TIMER_CALLBACK_MEMBER(namcos2_posirq_tick); TIMER_CALLBACK_MEMBER(namcos2_posirq_tick);
void adjust_posirq_timer( int scanline );
DECLARE_WRITE8_MEMBER( namcos2_68k_eeprom_w ); DECLARE_WRITE8_MEMBER( namcos2_68k_eeprom_w );
DECLARE_READ8_MEMBER( namcos2_68k_eeprom_r ); DECLARE_READ8_MEMBER( namcos2_68k_eeprom_r );
@ -366,8 +367,6 @@ extern void (*namcos2_kickstart)(running_machine &machine, int internal);
#define NAMCOS2_C148_SERIRQ 6 /* 0x1cc000 */ #define NAMCOS2_C148_SERIRQ 6 /* 0x1cc000 */
#define NAMCOS2_C148_VBLANKIRQ 7 /* 0x1ce000 */ #define NAMCOS2_C148_VBLANKIRQ 7 /* 0x1ce000 */
void namcos2_adjust_posirq_timer( running_machine &machine, int scanline );
/**************************************************************/ /**************************************************************/
/* MASTER CPU RAM MEMORY */ /* MASTER CPU RAM MEMORY */
/**************************************************************/ /**************************************************************/

View File

@ -677,20 +677,20 @@ TIMER_CALLBACK_MEMBER(namcos2_shared_state::namcos2_posirq_tick)
} }
} }
void namcos2_adjust_posirq_timer( running_machine &machine, int scanline ) void namcos2_shared_state::adjust_posirq_timer( int scanline )
{ {
namcos2_posirq_timer->adjust(machine.primary_screen->time_until_pos(scanline, 80), scanline); namcos2_posirq_timer->adjust(m_screen->time_until_pos(scanline, 80), scanline);
} }
INTERRUPT_GEN_MEMBER(namcos2_shared_state::namcos2_68k_master_vblank) INTERRUPT_GEN_MEMBER(namcos2_shared_state::namcos2_68k_master_vblank)
{ {
if (!is_system21()) namcos2_adjust_posirq_timer(machine(), GetPosIRQScanline(machine())); if (!is_system21()) adjust_posirq_timer(GetPosIRQScanline(machine()));
device.execute().set_input_line(namcos2_68k_master_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE); device.execute().set_input_line(namcos2_68k_master_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE);
} }
INTERRUPT_GEN_MEMBER(namcos2_shared_state::namcos2_68k_slave_vblank) INTERRUPT_GEN_MEMBER(namcos2_shared_state::namcos2_68k_slave_vblank)
{ {
if (!is_system21()) namcos2_adjust_posirq_timer(machine(), GetPosIRQScanline(machine())); if (!is_system21()) adjust_posirq_timer(GetPosIRQScanline(machine()));
device.execute().set_input_line(namcos2_68k_slave_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE); device.execute().set_input_line(namcos2_68k_slave_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE);
} }
@ -701,7 +701,7 @@ INTERRUPT_GEN_MEMBER(namcos2_shared_state::namcos2_68k_gpu_vblank)
scanline = 0x50+0x89; /* HACK for Winning Run */ scanline = 0x50+0x89; /* HACK for Winning Run */
//printf( "namcos2_68k_gpu_vblank(%d)\n",namcos2_68k_gpu_C148[NAMCOS2_C148_POSIRQ] ); //printf( "namcos2_68k_gpu_vblank(%d)\n",namcos2_68k_gpu_C148[NAMCOS2_C148_POSIRQ] );
namcos2_adjust_posirq_timer(machine(), scanline); adjust_posirq_timer(scanline);
device.execute().set_input_line(namcos2_68k_gpu_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE); device.execute().set_input_line(namcos2_68k_gpu_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE);
} }

View File

@ -1141,7 +1141,7 @@ static void show_tiles(struct sms_vdp* chip)
Even though some games set bit 7, it does nothing. Even though some games set bit 7, it does nothing.
*/ */
static void end_of_frame(running_machine &machine, struct sms_vdp *chip) static void end_of_frame(screen_device &screen, struct sms_vdp *chip)
{ {
UINT8 m1 = (chip->regs[0x1]&0x10)>>4; UINT8 m1 = (chip->regs[0x1]&0x10)>>4;
UINT8 m2 = (chip->regs[0x0]&0x02)>>1; UINT8 m2 = (chip->regs[0x0]&0x02)>>1;
@ -1154,14 +1154,14 @@ static void end_of_frame(running_machine &machine, struct sms_vdp *chip)
{ {
rectangle visarea(0, 256-1, 0, sms_mode_table[chip->screen_mode].sms2_height-1); rectangle visarea(0, 256-1, 0, sms_mode_table[chip->screen_mode].sms2_height-1);
if (chip->chip_id==3) machine.primary_screen->configure(256, 256, visarea, HZ_TO_ATTOSECONDS(chip->sms_framerate)); if (chip->chip_id==3) screen.configure(256, 256, visarea, HZ_TO_ATTOSECONDS(chip->sms_framerate));
} }
else /* 160x144 */ else /* 160x144 */
{ {
rectangle visarea((256-160)/2, (256-160)/2+160-1, (192-144)/2, (192-144)/2+144-1); rectangle visarea((256-160)/2, (256-160)/2+160-1, (192-144)/2, (192-144)/2+144-1);
machine.primary_screen->configure(256, 256, visarea, HZ_TO_ATTOSECONDS(chip->sms_framerate)); screen.configure(256, 256, visarea, HZ_TO_ATTOSECONDS(chip->sms_framerate));
} }
@ -1179,7 +1179,7 @@ SCREEN_VBLANK(sms)
// rising edge // rising edge
if (vblank_on) if (vblank_on)
{ {
end_of_frame(screen.machine(), md_sms_vdp); end_of_frame(screen, md_sms_vdp);
// the SMS has a 'RESET' button on the machine, it generates an NMI // the SMS has a 'RESET' button on the machine, it generates an NMI
if (screen.machine().root_device().ioport("PAUSE")->read_safe(0x00)) if (screen.machine().root_device().ioport("PAUSE")->read_safe(0x00))
@ -1245,8 +1245,8 @@ SCREEN_VBLANK(systeme)
// rising edge // rising edge
if (vblank_on) if (vblank_on)
{ {
end_of_frame(screen.machine(), vdp1); end_of_frame(screen, vdp1);
end_of_frame(screen.machine(), vdp2); end_of_frame(screen, vdp2);
} }
} }
@ -1255,14 +1255,14 @@ SCREEN_VBLANK(megatech_md_sms)
{ {
// rising edge // rising edge
if (vblank_on) if (vblank_on)
end_of_frame(screen.machine(), md_sms_vdp); end_of_frame(screen, md_sms_vdp);
} }
SCREEN_VBLANK(megatech_bios) SCREEN_VBLANK(megatech_bios)
{ {
// rising edge // rising edge
if (vblank_on) if (vblank_on)
end_of_frame(screen.machine(), vdp1); end_of_frame(screen, vdp1);
} }
SCREEN_UPDATE_RGB32(megatech_md_sms) SCREEN_UPDATE_RGB32(megatech_md_sms)

View File

@ -1134,7 +1134,7 @@ void snes_state::machine_reset()
/* Set STAT78 to NTSC or PAL */ /* Set STAT78 to NTSC or PAL */
if (ATTOSECONDS_TO_HZ(m_screen->frame_period().attoseconds) >= 59.0f) if (ATTOSECONDS_TO_HZ(m_screen->frame_period().attoseconds) >= 59.0f)
m_ppu.m_stat78 = SNES_NTSC; m_ppu.m_stat78 = SNES_NTSC;
else /* if (ATTOSECONDS_TO_HZ(machine.primary_screen->frame_period().attoseconds) == 50.0f) */ else /* if (ATTOSECONDS_TO_HZ(m_screen->frame_period().attoseconds) == 50.0f) */
m_ppu.m_stat78 = SNES_PAL; m_ppu.m_stat78 = SNES_PAL;
// reset does this to these registers // reset does this to these registers

View File

@ -943,7 +943,7 @@ void amiga_render_scanline(running_machine &machine, bitmap_ind16 &bitmap, int s
} }
#if 0 #if 0
if ( machine.primary_screen->frame_number() % 64 == 0 && scanline == 100 ) if ( m_screen->frame_number() % 64 == 0 && scanline == 100 )
{ {
const char *m_lores = "LORES"; const char *m_lores = "LORES";
const char *m_hires = "HIRES"; const char *m_hires = "HIRES";
@ -980,7 +980,7 @@ void amiga_render_scanline(running_machine &machine, bitmap_ind16 &bitmap, int s
CUSTOM_REG(REG_COLOR00) = save_color0; CUSTOM_REG(REG_COLOR00) = save_color0;
#if GUESS_COPPER_OFFSET #if GUESS_COPPER_OFFSET
if (machine.primary_screen->frame_number() % 64 == 0 && scanline == 0) if (m_screen->frame_number() % 64 == 0 && scanline == 0)
{ {
if (machine.input().code_pressed(KEYCODE_Q)) if (machine.input().code_pressed(KEYCODE_Q))
popmessage("%d", state->m_wait_offset -= 1); popmessage("%d", state->m_wait_offset -= 1);

View File

@ -802,7 +802,7 @@ void amiga_aga_render_scanline(running_machine &machine, bitmap_rgb32 &bitmap, i
} }
#if 0 #if 0
if ( machine.primary_screen->frame_number() % 16 == 0 && scanline == 250 ) if ( m_screen->frame_number() % 16 == 0 && scanline == 250 )
{ {
const char *m_lores = "LORES"; const char *m_lores = "LORES";
const char *m_hires = "HIRES"; const char *m_hires = "HIRES";
@ -840,7 +840,7 @@ void amiga_aga_render_scanline(running_machine &machine, bitmap_rgb32 &bitmap, i
CUSTOM_REG(REG_COLOR00) = save_color0; CUSTOM_REG(REG_COLOR00) = save_color0;
#if GUESS_COPPER_OFFSET #if GUESS_COPPER_OFFSET
if (machine.primary_screen->frame_number() % 64 == 0 && scanline == 0) if (m_screen->frame_number() % 64 == 0 && scanline == 0)
{ {
if (machine.input().code_pressed(KEYCODE_Q)) if (machine.input().code_pressed(KEYCODE_Q))
popmessage("%d", wait_offset -= 1); popmessage("%d", wait_offset -= 1);

View File

@ -347,7 +347,7 @@ WRITE16_MEMBER( namcos2_state::paletteram_word_w )
/*case 0x180a:*/ case 0x180b: /*case 0x180a:*/ case 0x180b:
if (data^m_paletteram[offset]) { if (data^m_paletteram[offset]) {
m_paletteram[offset] = data; m_paletteram[offset] = data;
namcos2_adjust_posirq_timer(machine(),get_pos_irq_scanline()); adjust_posirq_timer(get_pos_irq_scanline());
} }
break; break;