Improve the speed of romident by dynamically allocating some large device member arrays at device_start time instead [Phil Bennett]

This commit is contained in:
Phil Bennett 2017-07-02 15:57:29 -07:00
parent b6553ce020
commit c95f7878e6
6 changed files with 16 additions and 10 deletions

View File

@ -1147,7 +1147,7 @@ void ay8910_device::build_mixer_table()
*/
else
{
build_3D_table(m_res_load[0], m_par, m_par_env, normalize, 3, m_zero_is_off, m_vol3d_table);
build_3D_table(m_res_load[0], m_par, m_par_env, normalize, 3, m_zero_is_off, m_vol3d_table.get());
}
}
@ -1200,6 +1200,8 @@ void ay8910_device::device_start()
m_streams = 1;
}
m_vol3d_table = make_unique_clear<int32_t[]>(8*32*32*32);
build_mixer_table();
/* The envelope is pacing twice as fast for the YM2149 as for the AY-3-8910, */
@ -1512,7 +1514,6 @@ ay8910_device::ay8910_device(const machine_config &mconfig, device_type type, co
memset(&m_vol_enabled,0,sizeof(m_vol_enabled));
memset(&m_vol_table,0,sizeof(m_vol_table));
memset(&m_env_table,0,sizeof(m_env_table));
memset(&m_vol3d_table,0,sizeof(m_vol3d_table));
m_res_load[0] = m_res_load[1] = m_res_load[2] = 1000; //Default values for resistor loads
set_type(psg_type);

View File

@ -190,7 +190,7 @@ private:
const ay_ym_param *m_par_env;
int32_t m_vol_table[NUM_CHANNELS][16];
int32_t m_env_table[NUM_CHANNELS][32];
int32_t m_vol3d_table[8*32*32*32];
std::unique_ptr<int32_t[]> m_vol3d_table;
int m_flags; /* Flags */
int m_res_load[3]; /* Load on channel in ohms */
devcb_read8 m_port_a_read_cb;

View File

@ -39,9 +39,12 @@ taito_en_device::taito_en_device(const machine_config &mconfig, const char *tag,
void taito_en_device::device_start()
{
// TODO: 16Mx32? Not likely!
m_es5510_dram = std::make_unique<uint32_t[]>(1<<24);
save_pointer(NAME(m_es5510_dram.get()), 1<<24);
save_item(NAME(m_es5510_dsp_ram));
save_item(NAME(m_es5510_gpr));
save_item(NAME(m_es5510_dram));
save_item(NAME(m_es5510_dol_latch));
save_item(NAME(m_es5510_dil_latch));
save_item(NAME(m_es5510_dadr_latch));

View File

@ -43,9 +43,9 @@ private:
required_device<mb87078_device> m_mb87078;
//todo: hook up cpu/es5510
std::unique_ptr<uint32_t[]> m_es5510_dram;
uint16_t m_es5510_dsp_ram[0x200];
uint32_t m_es5510_gpr[0xc0];
uint32_t m_es5510_dram[1<<24];
uint32_t m_es5510_dol_latch;
uint32_t m_es5510_dil_latch;
uint32_t m_es5510_dadr_latch;

View File

@ -940,9 +940,10 @@ WRITE32_MEMBER( powervr2_device::softreset_w )
logerror("%s: Core Pipeline soft reset\n", tag());
#endif
if (start_render_received == 1) {
for (auto & elem : grab)
if (elem.busy == 1)
elem.busy = 0;
for (int a=0;a < NUM_BUFFERS;a++)
if (grab[a].busy == 1)
grab[a].busy = 0;
start_render_received = 0;
}
}
@ -3620,7 +3621,8 @@ void powervr2_device::device_start()
{
irq_cb.resolve_safe();
memset(grab, 0, sizeof(grab));
grab = make_unique_clear<receiveddata[]>(NUM_BUFFERS);
pvr_build_parameterconfig();
computedilated();

View File

@ -108,7 +108,7 @@ public:
int renderselect;
int listtype_used;
int alloc_ctrl_OPB_Mode, alloc_ctrl_PT_OPB, alloc_ctrl_TM_OPB, alloc_ctrl_T_OPB, alloc_ctrl_OM_OPB, alloc_ctrl_O_OPB;
receiveddata grab[NUM_BUFFERS];
std::unique_ptr<receiveddata[]> grab;
int grabsel;
int grabsellast;
uint32_t paracontrol,paratype,endofstrip,listtype,global_paratype,parameterconfig;