[PATCH] xaudio2: Always set current OpenAL context before making AL calls

Andrew Eikum aeikum at codeweavers.com
Thu Jun 30 14:55:32 CDT 2016


On Thu, Jun 30, 2016 at 12:47:52PM -0700, Chris Robinson wrote:
> On 06/30/2016 12:07 PM, Andrew Eikum wrote:
> >         if(!alcIsExtensionPresent(NULL, "ALC_SOFT_loopback") ||
> >                 !(palcLoopbackOpenDeviceSOFT = alcGetProcAddress(NULL, "alcLoopbackOpenDeviceSOFT")) ||
> >-                !(palcRenderSamplesSOFT = alcGetProcAddress(NULL, "alcRenderSamplesSOFT"))){
> >+                !(palcRenderSamplesSOFT = alcGetProcAddress(NULL, "alcRenderSamplesSOFT")) ||
> >+                !(palcSetThreadContext = alcGetProcAddress(NULL, "alcSetThreadContext"))){
> >             ERR("XAudio2 requires the ALC_SOFT_loopback extension (OpenAL-Soft >= 1.14)\n");
> >             return FALSE;
> >         }
> 
> alcSetThreadContext isn't part of the ALC_SOFT_loopback extension,
> you should check for ALC_EXT_thread_local_context instead.
> 

Ok, I'll fix that. That was just me being lazy and assuming that if we
had loopback, we must have thread local context.

> > +static void context_lock(ALCcontext *ctx)
> > +{
> > +    EnterCriticalSection(&al_lock);
> > +    alcMakeContextCurrent(ctx);
> > +}
> > +
> > +static void context_unlock(void)
> > +{
> > +    LeaveCriticalSection(&al_lock);
> > +}
> 
> Since you're relying on ALC_EXT_thread_local_context anyway, it
> would probably be better to use alcSetThreadContext in context_lock,
> which would allow you to get rid of the global lock for normal calls
> (another thread can't change the current thread context on you, and
> unlike OpenGL, the same context can be current on multiple threads
> at the same time).

I hadn't thought of it that way, good idea. I'll change that too,
should make the patch much smaller.

Thanks for the review,
Andrew



More information about the wine-devel mailing list