From 53572da7de8d2cf22ed996dec4b992ca378f371c Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 28 Sep 2011 22:02:36 -0700 Subject: [PATCH] Set toward-zero rounding when updating in alDeferUpdatesSOFT --- OpenAL32/alState.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/OpenAL32/alState.c b/OpenAL32/alState.c index 3920adf..1cb5268 100644 --- a/OpenAL32/alState.c +++ b/OpenAL32/alState.c @@ -585,8 +585,19 @@ AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void) ALboolean UpdateSources; ALsource **src, **src_end; ALeffectslot **slot, **slot_end; + int fpuState; LockContext(Context); +#if defined(HAVE_FESETROUND) + fpuState = fegetround(); + fesetround(FE_TOWARDZERO); +#elif defined(HAVE__CONTROLFP) + fpuState = _controlfp(0, 0); + (void)_controlfp(_RC_CHOP, _MCW_RC); +#else + (void)fpuState; +#endif + Context->DeferUpdates = AL_TRUE; /* Make sure all pending updates are performed */ @@ -619,6 +630,11 @@ AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void) } UnlockContext(Context); +#if defined(HAVE_FESETROUND) + fesetround(fpuState); +#elif defined(HAVE__CONTROLFP) + _controlfp(fpuState, _MCW_RC); +#endif } ALCcontext_DecRef(Context);