diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 2b5cb99a..f8243e90 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -4509,9 +4509,10 @@ fi # | * [#50546] xactengine3_7: Send Notification after the Wavebank is created. # | # | Modified files: -# | * dlls/xactengine3_7/xact_dll.c +# | * dlls/xactengine3_7/xact_dll.c, include/xact3.h, include/xact3wb.h # | if test "$enable_xactengine3_7_Notification" -eq 1; then + patch_apply xactengine3_7-Notification/0000-xactengine-Use-nameless-unions.patch patch_apply xactengine3_7-Notification/0001-xactengine3.7-Delay-Notication-for-WAVEBANKPREPARED.patch patch_apply xactengine3_7-Notification/0002-xactengine3_7-Record-context-for-each-notications.patch fi diff --git a/patches/xactengine3_7-Notification/0000-xactengine-Use-nameless-unions.patch b/patches/xactengine3_7-Notification/0000-xactengine-Use-nameless-unions.patch new file mode 100644 index 00000000..f409072e --- /dev/null +++ b/patches/xactengine3_7-Notification/0000-xactengine-Use-nameless-unions.patch @@ -0,0 +1,40 @@ +From 520b5366cb7ce1cba59a755a734f23dbd25fa093 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Thu, 22 Apr 2021 13:23:44 +1000 +Subject: [PATCH] xactengine: Use nameless unions + +Signed-off-by: Alistair Leslie-Hughes +--- + include/xact3.h | 2 +- + include/xact3wb.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/xact3.h b/include/xact3.h +index 63eec707363..9b8f480829e 100644 +--- a/include/xact3.h ++++ b/include/xact3.h +@@ -434,7 +434,7 @@ typedef struct XACT_NOTIFICATION + XACT_NOTIFICATION_VARIABLE variable; + XACT_NOTIFICATION_GUI gui; + XACT_NOTIFICATION_WAVE wave; +- } DUMMYUNIONNAME; ++ }; + } XACT_NOTIFICATION, *LPXACT_NOTIFICATION; + typedef const XACT_NOTIFICATION *LPCXACT_NOTIFICATION; + +diff --git a/include/xact3wb.h b/include/xact3wb.h +index 6d157a466f9..834b3e1ef54 100644 +--- a/include/xact3wb.h ++++ b/include/xact3wb.h +@@ -121,7 +121,7 @@ typedef struct WAVEBANKENTRY + DWORD Duration : 28; + } DUMMYSTRUCTNAME; + DWORD dwFlagsAndDuration; +- } DUMMYUNIONNAME; ++ }; + + WAVEBANKMINIWAVEFORMAT Format; + WAVEBANKREGION PlayRegion; +-- +2.30.2 + diff --git a/patches/xactengine3_7-Notification/0001-xactengine3.7-Delay-Notication-for-WAVEBANKPREPARED.patch b/patches/xactengine3_7-Notification/0001-xactengine3.7-Delay-Notication-for-WAVEBANKPREPARED.patch index b657ef98..ed443801 100644 --- a/patches/xactengine3_7-Notification/0001-xactengine3.7-Delay-Notication-for-WAVEBANKPREPARED.patch +++ b/patches/xactengine3_7-Notification/0001-xactengine3.7-Delay-Notication-for-WAVEBANKPREPARED.patch @@ -44,7 +44,7 @@ index 281aecc154b..e3b6e32cd5a 100644 + + tdata->engine = This; + tdata->note.type = XACTNOTIFICATIONTYPE_WAVEBANKPREPARED; -+ tdata->note.u.wave.pWaveBank = wavebank; ++ tdata->note.wave.pWaveBank = wavebank; + + thread = CreateThread(NULL, 0, thread_notications, tdata, 0, NULL); + CloseHandle(thread); diff --git a/patches/xactengine3_7-Notification/0002-xactengine3_7-Record-context-for-each-notications.patch b/patches/xactengine3_7-Notification/0002-xactengine3_7-Record-context-for-each-notications.patch index f7735edd..9e80f89f 100644 --- a/patches/xactengine3_7-Notification/0002-xactengine3_7-Record-context-for-each-notications.patch +++ b/patches/xactengine3_7-Notification/0002-xactengine3_7-Record-context-for-each-notications.patch @@ -1,7 +1,7 @@ -From 168094a26f74f785f3ee1429d5abc55be5f50c0c Mon Sep 17 00:00:00 2001 +From 1c50e3c6a275e0700e546586a63d2b900234a693 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Thu, 28 Jan 2021 12:29:42 +1100 -Subject: [PATCH 2/2] xactengine3_7: Record context for each notications +Subject: [PATCH] xactengine3_7: Record context for each notications This helps the first lockup but starting a game causes another freeze. @@ -11,10 +11,10 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49678 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dlls/xactengine3_7/xact_dll.c b/dlls/xactengine3_7/xact_dll.c -index e3b6e32cd5a..51826e81773 100644 +index 4fd47be84db..83af1035583 100644 --- a/dlls/xactengine3_7/xact_dll.c +++ b/dlls/xactengine3_7/xact_dll.c -@@ -637,6 +637,8 @@ typedef struct _XACT3EngineImpl { +@@ -717,6 +717,8 @@ typedef struct _XACT3EngineImpl { XACT_READFILE_CALLBACK pReadFile; XACT_GETOVERLAPPEDRESULT_CALLBACK pGetOverlappedResult; XACT_NOTIFICATION_CALLBACK notification_callback; @@ -23,15 +23,15 @@ index e3b6e32cd5a..51826e81773 100644 } XACT3EngineImpl; typedef struct wrap_readfile_struct { -@@ -912,6 +914,7 @@ static void send_wavebank_notification(XACT3EngineImpl *This, IXACT3WaveBank *wa +@@ -998,6 +1000,7 @@ static void send_wavebank_notification(XACT3EngineImpl *This, IXACT3WaveBank *wa tdata->engine = This; tdata->note.type = XACTNOTIFICATIONTYPE_WAVEBANKPREPARED; + tdata->note.pvContext = This->contexts[XACTNOTIFICATIONTYPE_WAVEBANKPREPARED - 1]; - tdata->note.u.wave.pWaveBank = wavebank; + tdata->note.wave.pWaveBank = wavebank; thread = CreateThread(NULL, 0, thread_notications, tdata, 0, NULL); -@@ -1131,9 +1134,11 @@ static HRESULT WINAPI IXACT3EngineImpl_RegisterNotification(IXACT3Engine *iface, +@@ -1257,9 +1260,11 @@ static HRESULT WINAPI IXACT3EngineImpl_RegisterNotification(IXACT3Engine *iface, XACT3EngineImpl *This = impl_from_IXACT3Engine(iface); FACTNotificationDescription fdesc; @@ -44,7 +44,7 @@ index e3b6e32cd5a..51826e81773 100644 fdesc.pvContext = This; return FACTAudioEngine_RegisterNotification(This->fact_engine, &fdesc); } -@@ -1147,6 +1152,8 @@ static HRESULT WINAPI IXACT3EngineImpl_UnRegisterNotification(IXACT3Engine *ifac +@@ -1273,6 +1278,8 @@ static HRESULT WINAPI IXACT3EngineImpl_UnRegisterNotification(IXACT3Engine *ifac TRACE("(%p)->(%p)\n", This, pNotificationDesc); unwrap_notificationdesc(&fdesc, pNotificationDesc); @@ -54,5 +54,5 @@ index e3b6e32cd5a..51826e81773 100644 return FACTAudioEngine_UnRegisterNotification(This->fact_engine, &fdesc); } -- -2.29.2 +2.30.2 diff --git a/patches/xactengine3_7-PrepareWave/0002-xactengine3_7-Implement-IXACT3Engine-PrepareStreamin.patch b/patches/xactengine3_7-PrepareWave/0002-xactengine3_7-Implement-IXACT3Engine-PrepareStreamin.patch index 7c41c001..a7681b97 100644 --- a/patches/xactengine3_7-PrepareWave/0002-xactengine3_7-Implement-IXACT3Engine-PrepareStreamin.patch +++ b/patches/xactengine3_7-PrepareWave/0002-xactengine3_7-Implement-IXACT3Engine-PrepareStreamin.patch @@ -37,7 +37,7 @@ index 5bcd8a6202c..99e4bd19049 100644 + fakeParms.offset = streamingParams.offset; + fakeParms.packetSize = streamingParams.packetSize; + -+ fact_wavebank.dwFlagsAndDuration = entry.u.dwFlagsAndDuration; ++ fact_wavebank.dwFlagsAndDuration = entry.dwFlagsAndDuration; + fact_wavebank.Format.dwValue = entry.Format.dwValue; + fact_wavebank.PlayRegion.dwOffset = entry.PlayRegion.dwOffset; + fact_wavebank.PlayRegion.dwLength = entry.PlayRegion.dwLength; diff --git a/patches/xactengine3_7-PrepareWave/0003-xactengine3_7-Implement-IXACT3Engine-PrepareInMemory.patch b/patches/xactengine3_7-PrepareWave/0003-xactengine3_7-Implement-IXACT3Engine-PrepareInMemory.patch index d0ce5b97..17271d57 100644 --- a/patches/xactengine3_7-PrepareWave/0003-xactengine3_7-Implement-IXACT3Engine-PrepareInMemory.patch +++ b/patches/xactengine3_7-PrepareWave/0003-xactengine3_7-Implement-IXACT3Engine-PrepareInMemory.patch @@ -25,7 +25,7 @@ index 99e4bd19049..e6c3863b9ee 100644 + TRACE("(%p)->(0x%08x, %p, %p, %p, %d, %d, %p)\n", This, dwFlags, &entry, pdwSeekTable, + pbWaveData, dwPlayOffset, nLoopCount, ppWave); + -+ fact_wavebank.dwFlagsAndDuration = entry.u.dwFlagsAndDuration; ++ fact_wavebank.dwFlagsAndDuration = entry.dwFlagsAndDuration; + fact_wavebank.Format.dwValue = entry.Format.dwValue; + fact_wavebank.PlayRegion.dwOffset = entry.PlayRegion.dwOffset; + fact_wavebank.PlayRegion.dwLength = entry.PlayRegion.dwLength;