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
poly_manager(running_machine &machine, UINT8 flags = 0);
poly_manager(screen_device &screen, UINT8 flags = 0);
virtual ~poly_manager();
// getters
running_machine &machine() const { return m_machine; }
screen_device &screen() const { assert(m_screen != NULL); return *m_screen; }
// synchronization
void wait(const char *debug_reason = "general");
@ -247,6 +249,7 @@ private:
// queue management
running_machine & m_machine;
screen_device * m_screen;
osd_work_queue * m_queue; // work queue
// arrays
@ -279,6 +282,7 @@ private:
template<typename _BaseType, class _ObjectData, int _MaxParams, int _MaxPolys>
poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::poly_manager(running_machine &machine, UINT8 flags)
: m_machine(machine),
m_screen(NULL),
m_queue(NULL),
m_polygon(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
//-------------------------------------------------

View File

@ -353,18 +353,18 @@ struct cobra_polydata
class cobra_renderer : public poly_manager<float, cobra_polydata, 8, 10000>
{
public:
cobra_renderer(running_machine &machine)
: poly_manager<float, cobra_polydata, 8, 10000>(machine)
cobra_renderer(screen_device &screen)
: 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_backbuffer = 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_stencil = auto_bitmap_ind32_alloc(machine, 1024, 1024);
m_framebuffer = 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_zbuffer = 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++)
{
UINT32 mask = 0;
@ -386,7 +386,7 @@ public:
void draw_point(const rectangle &visarea, vertex_t &v, UINT32 color);
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_reset(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));
m_renderer = auto_alloc(machine(), cobra_renderer(machine()));
m_renderer->gfx_init(machine());
m_renderer = auto_alloc(machine(), cobra_renderer(*m_screen));
m_renderer->gfx_init();
}
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;
float zvalue = 10000000.0f;
@ -2134,7 +2134,7 @@ void cobra_renderer::gfx_write_reg(running_machine &machine, UINT64 data)
{
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);
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)
return;
const rectangle& visarea = machine.primary_screen->visible_area();
const rectangle& visarea = screen().visible_area();
vertex_t vert[32];
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)
{
// 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);
}

View File

@ -196,6 +196,7 @@ public:
INTERRUPT_GEN_MEMBER(namcos2_68k_slave_vblank);
INTERRUPT_GEN_MEMBER(namcos2_68k_gpu_vblank);
TIMER_CALLBACK_MEMBER(namcos2_posirq_tick);
void adjust_posirq_timer( int scanline );
DECLARE_WRITE8_MEMBER( namcos2_68k_eeprom_w );
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_VBLANKIRQ 7 /* 0x1ce000 */
void namcos2_adjust_posirq_timer( running_machine &machine, int scanline );
/**************************************************************/
/* 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)
{
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);
}
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);
}
@ -701,7 +701,7 @@ INTERRUPT_GEN_MEMBER(namcos2_shared_state::namcos2_68k_gpu_vblank)
scanline = 0x50+0x89; /* HACK for Winning Run */
//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);
}

View File

@ -1141,7 +1141,7 @@ static void show_tiles(struct sms_vdp* chip)
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 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);
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 */
{
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
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
if (screen.machine().root_device().ioport("PAUSE")->read_safe(0x00))
@ -1245,8 +1245,8 @@ SCREEN_VBLANK(systeme)
// rising edge
if (vblank_on)
{
end_of_frame(screen.machine(), vdp1);
end_of_frame(screen.machine(), vdp2);
end_of_frame(screen, vdp1);
end_of_frame(screen, vdp2);
}
}
@ -1255,14 +1255,14 @@ SCREEN_VBLANK(megatech_md_sms)
{
// rising edge
if (vblank_on)
end_of_frame(screen.machine(), md_sms_vdp);
end_of_frame(screen, md_sms_vdp);
}
SCREEN_VBLANK(megatech_bios)
{
// rising edge
if (vblank_on)
end_of_frame(screen.machine(), vdp1);
end_of_frame(screen, vdp1);
}
SCREEN_UPDATE_RGB32(megatech_md_sms)

View File

@ -1134,7 +1134,7 @@ void snes_state::machine_reset()
/* Set STAT78 to NTSC or PAL */
if (ATTOSECONDS_TO_HZ(m_screen->frame_period().attoseconds) >= 59.0f)
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;
// 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 ( 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_hires = "HIRES";
@ -980,7 +980,7 @@ void amiga_render_scanline(running_machine &machine, bitmap_ind16 &bitmap, int s
CUSTOM_REG(REG_COLOR00) = save_color0;
#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))
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 ( 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_hires = "HIRES";
@ -840,7 +840,7 @@ void amiga_aga_render_scanline(running_machine &machine, bitmap_rgb32 &bitmap, i
CUSTOM_REG(REG_COLOR00) = save_color0;
#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))
popmessage("%d", wait_offset -= 1);

View File

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