Some more OCL changes : Gives 10x speedup for RGB5A3 on pre-DX11 hardware. Minor speedup for CMPR. (code by xsacha)

plus a segfault fix for issue 2779

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5751 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
luisr142004
2010-06-20 05:02:26 +00:00
parent 6e83fe2416
commit be3c06f326
2 changed files with 69 additions and 68 deletions

View File

@ -25,30 +25,30 @@
void AOSound::SoundLoop()
{
uint_32 numBytesToRender = 256;
ao_initialize();
default_driver = ao_default_driver_id();
format.bits = 16;
format.channels = 2;
format.rate = m_mixer->GetSampleRate();
format.byte_format = AO_FMT_LITTLE;
device = ao_open_live(default_driver, &format, NULL /* no options */);
if (!device)
ao_initialize();
default_driver = ao_default_driver_id();
format.bits = 16;
format.channels = 2;
format.rate = m_mixer->GetSampleRate();
format.byte_format = AO_FMT_LITTLE;
device = ao_open_live(default_driver, &format, NULL /* no options */);
if (!device)
{
PanicAlert("AudioCommon: Error opening AO device.\n");
ao_shutdown();
Stop();
return;
}
}
buf_size = format.bits/8 * format.channels * format.rate;
buf_size = format.bits/8 * format.channels * format.rate;
while (!threadData)
while (!threadData)
{
m_mixer->Mix(realtimeBuffer, numBytesToRender >> 2);
soundCriticalSection.Enter();
m_mixer->Mix(realtimeBuffer, numBytesToRender >> 2);
soundCriticalSection.Enter();
ao_play(device, (char*)realtimeBuffer, numBytesToRender);
soundCriticalSection.Leave();
soundCriticalSection.Leave();
soundSyncEvent.Wait();
}
@ -62,34 +62,37 @@ void *soundThread(void *args)
bool AOSound::Start()
{
memset(realtimeBuffer, 0, sizeof(realtimeBuffer));
memset(realtimeBuffer, 0, sizeof(realtimeBuffer));
soundSyncEvent.Init();
soundSyncEvent.Init();
thread = new Common::Thread(soundThread, (void *)this);
return true;
thread = new Common::Thread(soundThread, (void *)this);
return true;
}
void AOSound::Update()
{
soundSyncEvent.Set();
soundSyncEvent.Set();
}
void AOSound::Stop()
{
threadData = 1;
soundSyncEvent.Set();
threadData = 1;
soundSyncEvent.Set();
soundCriticalSection.Enter();
soundCriticalSection.Enter();
delete thread;
thread = NULL;
if (device)
ao_close(device);
ao_shutdown();
ao_close(device);
device = NULL;
soundCriticalSection.Leave();
soundSyncEvent.Shutdown();
soundSyncEvent.Shutdown();
}
AOSound::~AOSound()