Compare commits

...

98 Commits
v9.4 ... v9.11

Author SHA1 Message Date
Alistair Leslie-Hughes
1f9ec5ea26 Release v9.11 2024-06-15 18:28:34 +10:00
Alistair Leslie-Hughes
5a586ba5cb Added odbccp32-SQLWritePrivateProfileStringW patchset 2024-06-15 14:38:32 +10:00
Alistair Leslie-Hughes
d776fcfa06 Added oledb32-mode-property patchset 2024-06-15 14:03:49 +10:00
Alistair Leslie-Hughes
b8b2c3a701 Updated vkd3d-latest patchset 2024-06-15 13:57:32 +10:00
Alistair Leslie-Hughes
56ba066baf Rebase against 63e25f9edaf319529e87b380d01bff5cafa17f06.
Empty rebase for the vkd3d update.
2024-06-15 13:56:45 +10:00
Alistair Leslie-Hughes
5c6c431443 Updated odbc-remove-unixodbc patchset
Thanks Steve Fawcett.
2024-06-12 09:45:18 +10:00
Alistair Leslie-Hughes
a7f3224a3a Updated vkd3d-latest patchset 2024-06-12 07:50:59 +10:00
Alistair Leslie-Hughes
d2f75e3101 Rebase against 0bc571657e63b478fb5913b90343a8ec39443b82. 2024-06-12 07:49:09 +10:00
Alistair Leslie-Hughes
cdcfae0a00 Updated odbc-remove-unixodbc patchset
Update SQLDriverConnectW to record the driver ODBC version it supports.
Fixup SQLColAttribute/W return SQL_COLUMN_TYPE column type when driver v2.0 and ODBC 3.0 request.
2024-06-11 19:21:37 +10:00
Alistair Leslie-Hughes
8a93e0c0ef Rebase against 8ba51a6f711c5466e060a5958cc15c31b2b2ac7d. 2024-06-11 08:14:51 +10:00
Alistair Leslie-Hughes
1977f6c82a Updated odbc-remove-unixodbc patchset
Add fallback for SQLSetStmtAttr/W to support ODBC 2.0.

SQLGetDiagField/W return SQL_NO_DATA as default.
2024-06-10 21:47:45 +10:00
Alistair Leslie-Hughes
9e8e2ae892 Updated odbc-remove-unixodbc patchset
Use fallback for SQLColAttributeW for ODBC v2.0 drivers.
Use fallback for SQLGetDiagRecW for ODBC v2.0 drivers
Thanks Steve Fawcett

Use fallback for SQLBindParameter for ODBC v2.0 drivers.
Use fallback for SQLGetConnectAttr/W for ODBC v2.0 drivers.
Use fallback for SQLSetConnectAttr/W for ODBC v2.0 drivers.

Forward SQLSetConnectAttr onto driver.
Forward SQLError/W onto driver (new patch).
2024-06-10 08:50:35 +10:00
Alistair Leslie-Hughes
87a5dcecb7 Rebase against 7eb72b7bb3d3ea771efddcb5273e8a69456548ff. 2024-06-08 08:26:32 +10:00
Alistair Leslie-Hughes
88e86a23c0 Updated odbc-remove-unixodbc patchset
Fixes: https://bugs.winehq.org/show_bug.cgi?id=56786

Add support for "Driver=" argument in connection string.
2024-06-07 17:05:06 +10:00
Alistair Leslie-Hughes
87cf242f01 Rebase against 9f6e44fd9ca7d39258f2772c3f44013142702ca4. 2024-06-07 10:12:09 +10:00
Alistair Leslie-Hughes
2f712afe77 Rebase against 6a512200f4719ea6b0be6de83cac632112a38b36. 2024-06-06 09:21:53 +10:00
Alistair Leslie-Hughes
6e641992a3 Rebase against b89c9c60d50cf21650331d1528ff965c319a1217. 2024-06-05 09:04:45 +10:00
Alistair Leslie-Hughes
03c0de0368 Updated shell32-IconCache patchset
Fixed compile warning.
2024-06-04 08:30:50 +10:00
Alistair Leslie-Hughes
52d70e2ee4 Updated vkd3d-latest patchset
Fixes compile warnings.
2024-06-04 07:59:05 +10:00
Alistair Leslie-Hughes
6c033276e3 Rebase against b6abacbb7b0ed2fb3557d23f716878214b156c8c. 2024-06-04 07:58:31 +10:00
Alistair Leslie-Hughes
12bbb07ced Release v9.10 2024-06-01 12:49:13 +10:00
Alistair Leslie-Hughes
7f80904f89 Rebase against 951e0e27a743e52c75c7fedc0b1eaa9eb77e6bb6. 2024-06-01 12:28:56 +10:00
Alistair Leslie-Hughes
c084f2e153 Updated vkd3d-latest patchset 2024-05-31 07:40:33 +10:00
Alistair Leslie-Hughes
4ff6ecc4ac Rebase against b6eada5e2f9e3c86c18df118cddd20e6212f64de. 2024-05-31 07:38:53 +10:00
Alistair Leslie-Hughes
123aed11ee Updated vkd3d-latest patchset 2024-05-28 07:43:02 +10:00
Alistair Leslie-Hughes
0ebc680f8f Rebase against 5f7b9a5b837a77a85754b3b55b974e39e199f817. 2024-05-28 07:40:19 +10:00
Alistair Leslie-Hughes
68925c8f61 Rebase against d41a1f0183f5686fa3ed1b42c4de07e393833925. 2024-05-22 07:49:58 +10:00
Alistair Leslie-Hughes
791a70faf0 Updated Compiler_Warnings patchset
Hoepfully fixes the macos compile error.
2024-05-19 14:50:23 +10:00
Alistair Leslie-Hughes
3ab6d734c0 Updated vkd3d-latest patchset 2024-05-19 13:40:18 +10:00
Alistair Leslie-Hughes
31a5df0839 Updated Compiler_Warnings patchset 2024-05-19 13:39:33 +10:00
Alistair Leslie-Hughes
7adaca8b1b Updated Compiler_Warnings patchset
Fixes: https://bugs.winehq.org/show_bug.cgi?id=56692
2024-05-19 09:23:01 +10:00
Alistair Leslie-Hughes
d5c85dc450 Release v9.9 2024-05-18 13:10:10 +10:00
Alistair Leslie-Hughes
a78e9f3998 Updated vkd3d-latest patchset
Squashed for release.
2024-05-18 13:09:43 +10:00
Alistair Leslie-Hughes
05c875caa5 Updated vkd3d-latest patchset 2024-05-16 11:58:46 +10:00
Alistair Leslie-Hughes
a2170c577b Rebase against 849baece66e326bce255dfea0d6fb10df888bc55. 2024-05-16 08:29:53 +10:00
Alistair Leslie-Hughes
d8260944be Rebase against 6a31983779479b42e0c2e5320a1dfa962767c28e. 2024-05-15 08:24:14 +10:00
Alistair Leslie-Hughes
f76ea979db Updated vkd3d-latest patchset 2024-05-13 09:30:19 +10:00
Alistair Leslie-Hughes
e4078c26a2 Rebase against 040b2a9c75666527af6ca79d9146095c8ed6a3cf. 2024-05-13 09:28:53 +10:00
Alistair Leslie-Hughes
b0595d928b Updated ntdll-Junction_Points patchset
Fixes: https://bugs.winehq.org/show_bug.cgi?id=56647
2024-05-11 11:29:05 +10:00
Alistair Leslie-Hughes
6a6e7da97e Release v9.8 2024-05-04 16:11:34 +10:00
Alistair Leslie-Hughes
56d40e2349 Updated ddraw-GetPickRecords patchset
Correct rebase.

Fixes: https://bugs.winehq.org/show_bug.cgi?id=56529
2024-05-04 07:54:31 +10:00
Alistair Leslie-Hughes
2f18b0cd6d Updated odbc-remove-unixodbc patchset
Functions SQLDataSources*/SQLDrivers* are local to this DLL and not forwards onto the driver DLL.
Hense the Environment handle being passed as the first parameter.

Said functions need to return SQL_NO_DATA to state we have no data instead of an SQL_ERROR.

Fixes: https://bugs.winehq.org/show_bug.cgi?id=56616

Allows it to run now, more work will be required to make it fully functional.
2024-05-03 14:16:52 +10:00
Alistair Leslie-Hughes
0d13d81503 Updated vkd3d-latest patchset 2024-05-03 07:37:38 +10:00
Alistair Leslie-Hughes
a4b239f15e Rebase against 013f54af1f721dce651c85f87a5339ba3cb9d4a1. 2024-05-03 07:32:40 +10:00
Zebediah Figura
0f06925bd9 widl-SLTG_Typelib_Support: Reënable.
There are no more build conflicts.
2024-04-28 20:32:56 -05:00
Zebediah Figura
cd8789cb1f user32-LoadKeyboardLayoutEx: Remove isolated definition file. 2024-04-28 20:12:42 -05:00
Zebediah Figura
3dd9038110 winex11-XEMBED: Remove patch.
This was for Pipelight. See the parent commit for justification on removal.
2024-04-28 19:00:04 -05:00
Zebediah Figura
a051432871 Pipelight: Remove patch set.
Even if one asserts that Silverlight is worth supporting in any capacity (which
I am not for the moment taking any position on), Pipelight is unusable without
downgrading Firefox. As Erich put it to me, "the point of Pipelight was to not
have to run the entire browser in Wine," but now a user would have to go to at
least such an extent anyway.

And, of course, nothing here is useful outside of Pipelight, or if it is, we
want to explicitly know about it so that we can document and properly support
those knobs.
2024-04-28 18:56:38 -05:00
Zebediah Figura
6919d12eba ntdll-CriticalSection: Remove patch set.
This patch set is currently broken, as the RtlEnterCriticalSection()
implementation has changed without corresponding changes to the inline version.

More broadly, it is very surprising, and never really substantiated, that
inlining helps significantly. There is no record of why the patches were
written, but my guess is that they were written in an attempt to optimize heap
allocation, and my further guess is that targeting critical sections in
particular was motivated by perf traces.

Besides the fact that perf traces are unreliable on the best days, and that
anything that spins or uses atomics like our CS implementation is going to be
overrepresented especially relative to the practical impact, the heap
implementation was optimized for cases that matter with the introduction of the
LFH, and crucially, the LFH is lock free.

As for threadpools, I suspect that Sebastian took note of them as the only other
user of locking in ntdll, and that the inline version was used there because
there was no real reason not to.

At the end of the day, these patches are incorrect, probably help nothing, and
even if we did find they helped something we'd want to do a lot more
investigation and probably solve the problem a different way. Remove them.
2024-04-28 18:46:00 -05:00
Dean M Greer
ff5ea043b5 macOS.yml: allow inotify
Us my custom package from my brew tap
2024-04-27 05:56:28 +00:00
Dean M Greer
e7edc67e91 macOS.yml: Use macos-13
We need to an Intel runner not arm64
2024-04-27 05:53:13 +00:00
Dean M Greer
4c85dbb157 macOS.yml: use macos-latest-large 2024-04-27 05:30:11 +00:00
Dean M Greer
95f743ef8b macOS.yml: add autoconf 2024-04-27 05:16:42 +00:00
Alistair Leslie-Hughes
804145a02a Rebase against 25c58e6887647a223aa74f7e7d0402abb4a2a2b8. 2024-04-27 08:23:43 +10:00
Zebediah Figura
b682f11906 Rebase against c81c6fca50fcbd93fb54f4a3417630bb081578ff. 2024-04-25 16:57:40 -05:00
Zebediah Figura
c5ff81413f widl-SLTG_Typelib_Support: Remove patch 0019.
Folded into 62223ed995c897f4af759800fafad7c82e963258 upstream.
2024-04-23 18:55:33 -05:00
Alistair Leslie-Hughes
58ef511299 Updated vkd3d-latest patchset 2024-04-24 09:06:04 +10:00
Alistair Leslie-Hughes
a9bf69097e Rebase against d07019e4d174fd1b5d8b74ff2a36e900c07d96d7. 2024-04-24 07:57:47 +10:00
Alistair Leslie-Hughes
0c32c319e2 Updated vkd3d-latest patchset
Squash to latest.
2024-04-23 08:02:24 +10:00
Alistair Leslie-Hughes
c33355e3b7 Added patchset d3dx9_SetRawValue 2024-04-23 07:48:05 +10:00
Alistair Leslie-Hughes
127b7fafb4 Release v9.7 2024-04-21 21:14:50 +10:00
Alistair Leslie-Hughes
054ecfb60a Updated kernel32-CopyFileEx patchset
https://bugs.winehq.org/show_bug.cgi?id=56573
2024-04-20 13:18:16 +10:00
Alistair Leslie-Hughes
85146f009d Updated vkd3d-latest patchset 2024-04-19 07:53:37 +10:00
Alistair Leslie-Hughes
8fc0710def Rebase against b87589757b82b36a8a58ca26f6dcabb550826ceb. 2024-04-19 07:51:57 +10:00
Alistair Leslie-Hughes
e84e5d31e9 Updated vkd3d-latest patchset 2024-04-17 09:21:44 +10:00
Zebediah Figura
1f578b2d53 Rebase against 04b829e81b3da1e98964dee4df0be4c876745f00. 2024-04-16 18:04:01 -05:00
Zebediah Figura
164a792cb2 Rebase against 00198c4084a61f65f18574d16833d945e50c0614. 2024-04-09 19:36:41 -05:00
Alistair Leslie-Hughes
506d9500b8 Release v9.6 2024-04-06 12:01:11 +11:00
Alistair Leslie-Hughes
6839d5b534 Updated vkd3d-latest patchset 2024-04-05 10:27:32 +11:00
Alistair Leslie-Hughes
9d59c4b21a Updated ntdll-WRITECOPY patchset
This extra patch allows Battle.net once again.
2024-04-05 10:27:32 +11:00
Alistair Leslie-Hughes
ac31c3f5c5 Updated vkd3d-latest patchset 2024-04-05 10:27:32 +11:00
Zebediah Figura
a1057e16a6 widl-SLTG_Typelib_Support: Delete upstreamed patches. 2024-04-04 13:21:17 -05:00
Alistair Leslie-Hughes
bcf38efc5b Rebase against a2c20d0e93290b3f998ad78c7aeaed8028aee2da. 2024-03-30 05:37:35 +11:00
Alistair Leslie-Hughes
320847e6f5 Updated vkd3d-latest patchset
Squashed to previous wine-staging release
Add latest changes.
2024-03-28 10:43:34 +11:00
Zebediah Figura
5d8ef8d881 Rebase against e01cb2b9156f808acc279a1b4753a48de0fda327. 2024-03-27 18:08:14 -05:00
Zebediah Figura
fdd0f9a334 mfplat-streaming-support: Remove patch 0055.
Addressed upstream by ea4b9bafb2f18ae0805c166e49bbb03641fc066c.
2024-03-27 13:53:01 -05:00
Alistair Leslie-Hughes
3ed5b91e33 Rebase against 4573910acc2783a3f678a428aa313377b09a04e8. 2024-03-27 11:44:08 +11:00
Alistair Leslie-Hughes
f3b50676a1 Rebase against cf08bbaa0f95f40b972b330e1ee687e2cac0501c.
Update the commit it, so the macos build should work again.
2024-03-26 14:37:08 +11:00
Alistair Leslie-Hughes
4ca74ae0ca Revert "macOS.yml: Set ac_cv_lib_soname_vulkan"
This reverts commit 810ecd4aab.

Fixed upstream.
2024-03-26 09:22:55 +11:00
Alistair Leslie-Hughes
1219be1be0 Updated windows.networking.connectivity-new-dll patchset
Registry all the interfaces
2024-03-25 08:50:14 +11:00
Alistair Leslie-Hughes
9dc6767d18 Updated windows.networking.connectivity-new-dll patchset
Correctly append the .dll onto the filename.

Ref: https://bugs.winehq.org/show_bug.cgi?id=46534
2024-03-24 08:16:31 +11:00
Dean M Greer
810ecd4aab macOS.yml: Set ac_cv_lib_soname_vulkan 2024-03-23 09:41:22 +00:00
Alistair Leslie-Hughes
722ee5ed7e Release v9.5 2024-03-23 17:49:31 +11:00
Alistair Leslie-Hughes
126e7db0e0 Rebase against 7c5b9304a62b794ba07110e15eef6aec3a46ef0a. 2024-03-23 17:27:34 +11:00
Alistair Leslie-Hughes
5a1e1cb2e0 Updated vkd3d-latest patchset 2024-03-22 17:43:13 +11:00
Alistair Leslie-Hughes
9160b38ad3 Updated vkd3d-latest patchset 2024-03-22 17:43:13 +11:00
Zebediah Figura
e1966ac26e ntdll-Threading: Remove patch.
This has sat here for a long time pending careful review, because the logic is
not easy to follow. Fortunately I think I understand it now.

The described race is pretty much accurate. When a thread called
RtlExitUserThread() in 1.7.38, it first decremented nb_threads. If it was the
last thread, it would call exit() with the thread exit status; if not, it would
mask off signals [the order here is important] and then call pthread_exit() with
the status.

When a thread called RtlExitUserProcess(), this happened:

  * The caller does a terminate_process() request to the server, which sends
    SIGQUIT to every thread *but* the caller.

  * The SIGQUIT handler calls terminate_thread() with a zero status.
    terminate_thread() masks off signals, then decrements nb_threads. If the
    aborting thread is the last thread, it would call _exit(), otherwise, it'd
    again just pthread_exit().

  * Finally, the original thread would call exit(), with the intended status
    code.

[All of the intermediate function calls and helpers are skipped for brevity and
clarity].

The problem happens if both of these happen at the same time in different
threads. In this case the RtlExitUserThread() thread could decrement nb_threads,
then get interrupted by SIGQUIT and decrement nb_threads again. The end result
is that, instead of the RtlExitUserProcess() thread exiting with the intended
status, instead one of the SIGQUIT threads will be the "last" thread, and exit
with the status that SIGQUIT uses, which is zero as described.

A more serious race than this can be constructed if a thread is terminated by
another thread while already exiting. In this case nb_threads would be executed
twice, but the consequence would be that the *penultimate* thread to exit,
later, would end up killing the process, since it thinks it's the ultimate
thread.

2334f4e64582a518e4d5a7627472a0d817b147ef changed this. Now a thread calling
RtlExitUserThread() does not decrement nb_threads, but instead asks the server
if it's the last thread, and if so exit the whole process [at the time via
exit(); later via RtlExitUserProcess().] If not the last thread, the threads
mask off signals and then call pthread_exit() as before.

This avoided the race, but added a different one, essentially the opposite
problem: if two threads exit cleanly at the same time, neither one of them will
think they're the last thread, then both will exit without calling exit().
Apparently (from IRC logs) this would leave the thread in a weird state where
it'd still be running somehow, although it's not really clear how.

In any case, this problem was fixed by fac1aabbef3753afc53a4ea4f933b3d0516fd302
upstream. Now if two threads call NtTerminateThread() on themselves at the same
time, they really will exit cleanly and one will terminate the process.
Critically, this is now safe from the original race, because decrementing
nb_threads is done after masking off signals.
2024-03-22 00:12:27 -05:00
Zebediah Figura
a5a28003b4 Rebase against b053e924e8e13b3637f2a5a8ffe88d84c2d17075. 2024-03-21 19:29:09 -05:00
Zebediah Figura
621740283c Add documentation to a couple more patches.
Thanks Erich for elucidating these.
2024-03-21 19:15:54 -05:00
Zebediah Figura
761fef8d70 ws2_32-TransmitFile: Remove patches.
Erich can't remember the purpose of these, and suspects that it was incidental
to the other patches for TransmitFile (which used to be in the same Wine-Staging
patch set); those were for WineHQ bug 5048.

Moreover, these aren't correct, and a correct implementation would take a lot of
work, and wouldn't really be able to use anything from these patches as a
reference.

Hence, they're not providing any value to anyone, so remove them.
2024-03-21 19:03:46 -05:00
Zebediah Figura
63300ffaad Rebase against 86557b9e0ba8a783f1b0d0918b1ddec7e0a7749e. 2024-03-19 18:42:11 -05:00
Zebediah Figura
badfcbc451 Rebase against 9e639ff1f6c2b913518501b3f99ca085c4eed6c7. 2024-03-18 18:41:32 -05:00
Zebediah Figura
6a314e5994 Rebase against 65864f92f22f6d4668c1c06ed6ef3fe49bfdcfa7. 2024-03-14 17:50:23 -05:00
Alistair Leslie-Hughes
435e01412e Rebase against 174bb7776d3971e1ed91d57a47a7599b14c6eb45. 2024-03-13 15:56:53 +11:00
Alistair Leslie-Hughes
410820a918 Updated wined3d-bindless-texture definition file
List games that are reported to require/not working with this patchset
2024-03-11 07:48:12 +11:00
Alistair Leslie-Hughes
a604ca1f6d Updated wined3d-bindless-texture patchset
If ctx_data->glsl_program is null use the 0 location.

Fixes crash
https://bugs.winehq.org/show_bug.cgi?id=56370
2024-03-10 22:03:35 +11:00
Alistair Leslie-Hughes
445948eee3 Release v9.4.1 2024-03-10 07:45:38 +11:00
Alistair Leslie-Hughes
50bad5b9af Updated user32-rawinput-mouse patchset
https://bugs.winehq.org/show_bug.cgi?id=56410
https://bugs.winehq.org/show_bug.cgi?id=56413
2024-03-10 07:38:53 +11:00
132 changed files with 12076 additions and 12384 deletions

View File

@@ -7,17 +7,20 @@ on:
jobs:
wine-staging:
runs-on: macos-latest
# https://github.com/actions/runner-images/issues/9741
runs-on: macos-13
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Install dependencies
run: |
brew install --cask xquartz
brew install bison \
brew install autoconf \
bison \
gphoto2 \
gst-plugins-base \
gstreamer \
gcenx/wine/libinotify-kqueue \
mingw-w64 \
molten-vk \
sdl2
@@ -52,7 +55,6 @@ jobs:
--without-alsa \
--without-capi \
--without-dbus \
--without-inotify \
--without-oss \
--without-pulse \
--without-udev \

View File

@@ -1,17 +1,17 @@
From 31ad180c1c96e6e9a2e666ebbe90c3d8b78cefa4 Mon Sep 17 00:00:00 2001
From 61f65bb6024f63c6ab278ae6c9844d2d38339be8 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 16 Feb 2024 11:01:45 +1100
Subject: [PATCH] combase: Avoid implicit cast of interface pointer.
---
dlls/combase/string.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
dlls/combase/string.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/combase/string.c b/dlls/combase/string.c
index 1345870cf2f..dda6ab78141 100644
index 1345870cf2f..e60ea251011 100644
--- a/dlls/combase/string.c
+++ b/dlls/combase/string.c
@@ -55,7 +55,7 @@ static inline struct hstring_private *impl_from_HSTRING(HSTRING string)
@@ -55,12 +55,12 @@ static inline struct hstring_private *impl_from_HSTRING(HSTRING string)
static inline struct hstring_private *impl_from_HSTRING_HEADER(HSTRING_HEADER *header)
{
@@ -20,6 +20,12 @@ index 1345870cf2f..dda6ab78141 100644
}
static inline struct hstring_private *impl_from_HSTRING_BUFFER(HSTRING_BUFFER buffer)
{
- return CONTAINING_RECORD(buffer, struct hstring_private, buffer);
+ return CONTAINING_RECORD( (void*)buffer, struct hstring_private, buffer);
}
static BOOL alloc_string(UINT32 len, HSTRING *out)
--
2.43.0

View File

@@ -1,4 +1,4 @@
From 683fab1d88342c11a52ac3b919964837e6f36823 Mon Sep 17 00:00:00 2001
From b0fb00cbd4ec71e184cf066a4f30002d646ceebe Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Tue, 22 Mar 2016 21:54:26 +0100
Subject: [PATCH] d2d1: Avoid implicit cast of interface pointer.
@@ -8,11 +8,13 @@ Subject: [PATCH] d2d1: Avoid implicit cast of interface pointer.
dlls/d2d1/brush.c | 8 ++++----
dlls/d2d1/d2d1_private.h | 2 +-
dlls/d2d1/dc_render_target.c | 2 +-
dlls/d2d1/device.c | 2 +-
dlls/d2d1/effect.c | 10 +++++-----
dlls/d2d1/geometry.c | 12 ++++++------
dlls/d2d1/hwnd_render_target.c | 2 +-
dlls/d2d1/state_block.c | 2 +-
dlls/d2d1/stroke.c | 2 +-
8 files changed, 16 insertions(+), 16 deletions(-)
10 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c
index e5048611519..8e031290528 100644
@@ -66,15 +68,15 @@ index 75cd72b5b9f..314123373b7 100644
static HRESULT STDMETHODCALLTYPE d2d_bitmap_brush_QueryInterface(ID2D1BitmapBrush1 *iface,
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
index dced9847390..e86e1945bdd 100644
index 58507fd2c0b..c2c7026052c 100644
--- a/dlls/d2d1/d2d1_private.h
+++ b/dlls/d2d1/d2d1_private.h
@@ -697,7 +697,7 @@ struct d2d_factory
@@ -702,7 +702,7 @@ struct d2d_factory
static inline struct d2d_factory *unsafe_impl_from_ID2D1Factory(ID2D1Factory *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_factory, ID2D1Factory3_iface);
+ return CONTAINING_RECORD((ID2D1Factory3*)iface, struct d2d_factory, ID2D1Factory3_iface);
- return CONTAINING_RECORD(iface, struct d2d_factory, ID2D1Factory7_iface);
+ return CONTAINING_RECORD((ID2D1Factory7*)iface, struct d2d_factory, ID2D1Factory7_iface);
}
void d2d_effects_init_builtins(struct d2d_factory *factory);
@@ -91,6 +93,57 @@ index aa0c715baa5..31389b15cf8 100644
}
static HRESULT d2d_dc_render_target_present(IUnknown *outer_unknown)
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c
index 75da15c99a5..cf2fb530466 100644
--- a/dlls/d2d1/device.c
+++ b/dlls/d2d1/device.c
@@ -4516,7 +4516,7 @@ struct d2d_device *unsafe_impl_from_ID2D1Device(ID2D1Device1 *iface)
if (!iface)
return NULL;
assert(iface->lpVtbl == (ID2D1Device1Vtbl *)&d2d_device_vtbl);
- return CONTAINING_RECORD(iface, struct d2d_device, ID2D1Device6_iface);
+ return CONTAINING_RECORD((ID2D1Device6*)iface, struct d2d_device, ID2D1Device6_iface);
}
void d2d_device_init(struct d2d_device *device, struct d2d_factory *factory, IDXGIDevice *dxgi_device)
diff --git a/dlls/d2d1/effect.c b/dlls/d2d1/effect.c
index cebc492d895..a5e33c0ad9b 100644
--- a/dlls/d2d1/effect.c
+++ b/dlls/d2d1/effect.c
@@ -22,28 +22,28 @@ WINE_DEFAULT_DEBUG_CHANNEL(d2d);
static inline struct d2d_transform *impl_from_ID2D1OffsetTransform(ID2D1OffsetTransform *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_transform, ID2D1TransformNode_iface);
+ return CONTAINING_RECORD((ID2D1TransformNode*)iface, struct d2d_transform, ID2D1TransformNode_iface);
}
static inline struct d2d_transform *impl_from_ID2D1BlendTransform(ID2D1BlendTransform *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_transform, ID2D1TransformNode_iface);
+ return CONTAINING_RECORD((ID2D1TransformNode*)iface, struct d2d_transform, ID2D1TransformNode_iface);
}
static inline struct d2d_transform *impl_from_ID2D1BorderTransform(ID2D1BorderTransform *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_transform, ID2D1TransformNode_iface);
+ return CONTAINING_RECORD((ID2D1TransformNode*)iface, struct d2d_transform, ID2D1TransformNode_iface);
}
static inline struct d2d_transform *impl_from_ID2D1BoundsAdjustmentTransform(
ID2D1BoundsAdjustmentTransform *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_transform, ID2D1TransformNode_iface);
+ return CONTAINING_RECORD((ID2D1TransformNode*)iface, struct d2d_transform, ID2D1TransformNode_iface);
}
static inline struct d2d_vertex_buffer *impl_from_ID2D1VertexBuffer(ID2D1VertexBuffer *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_vertex_buffer, ID2D1VertexBuffer_iface);
+ return CONTAINING_RECORD((ID2D1VertexBuffer*)iface, struct d2d_vertex_buffer, ID2D1VertexBuffer_iface);
}
static HRESULT STDMETHODCALLTYPE d2d_vertex_buffer_QueryInterface(ID2D1VertexBuffer *iface,
diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c
index 3da3ad2e65b..849a2cd2762 100644
--- a/dlls/d2d1/geometry.c

View File

@@ -0,0 +1,45 @@
From 53cc7a0c9e6d6abe983d7f9d70f83f36ccc1c0a5 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 19 May 2024 14:49:44 +1000
Subject: [PATCH] combase/tests: Avoid implicit cast of interface pointer.
---
dlls/combase/tests/string.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/combase/tests/string.c b/dlls/combase/tests/string.c
index ceb8ffa6e09..76863c2f4dd 100644
--- a/dlls/combase/tests/string.c
+++ b/dlls/combase/tests/string.c
@@ -509,7 +509,7 @@ static void test_hstring_struct(void)
ok(WindowsCreateString(input_string, 6, &str) == S_OK, "Failed to create string.\n");
- prv = CONTAINING_RECORD(str, struct hstring_private, header);
+ prv = CONTAINING_RECORD((void*)str, struct hstring_private, header);
ok(prv->header.flags == 0, "Expected 0 in flags field, got %#x.\n", prv->header.flags);
ok(prv->header.length == 6, "Expected 6 in length field, got %u.\n", prv->header.length);
@@ -520,7 +520,7 @@ static void test_hstring_struct(void)
ok(WindowsDuplicateString(str, &str2) == S_OK, "Failed to duplicate string.\n");
- prv2 = CONTAINING_RECORD(str2, struct hstring_private, header);
+ prv2 = CONTAINING_RECORD((void*)str2, struct hstring_private, header);
ok(prv->refcount == 2, "Expected 2 in refcount, got %lu.\n", prv->refcount);
ok(prv2->refcount == 2, "Expected 2 in refcount, got %lu.\n", prv2->refcount);
@@ -534,8 +534,8 @@ static void test_hstring_struct(void)
ok(WindowsCreateStringReference(input_string, 6, &hdr, &str) == S_OK, "Failed to create string ref.\n");
- prv = CONTAINING_RECORD(&hdr, struct hstring_private, header);
- prv2 = CONTAINING_RECORD(str, struct hstring_private, header);
+ prv = CONTAINING_RECORD((void*)&hdr, struct hstring_private, header);
+ prv2 = CONTAINING_RECORD((void*)str, struct hstring_private, header);
ok(prv == prv2, "Pointers not identical.\n");
ok(prv2->header.flags == 1, "Expected HSTRING_REFERENCE_FLAG to be set, got %#x.\n", prv2->header.flags);
--
2.43.0

View File

@@ -1,41 +0,0 @@
From 32ae090ad4a99862a420cfe44847d8e2905cdde7 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 21 Dec 2013 23:57:02 +0100
Subject: winex11: Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command
---
dlls/winex11.drv/init.c | 3 +++
dlls/winex11.drv/x11drv.h | 3 ++-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
index 5a7d316..68d3f96 100644
--- a/dlls/winex11.drv/init.c
+++ b/dlls/winex11.drv/init.c
@@ -440,6 +440,9 @@ static INT X11DRV_ExtEscape( PHYSDEV dev, INT escape, INT in_count, LPCVOID in_d
return TRUE;
}
break;
+ case X11DRV_FLUSH_GDI_DISPLAY:
+ XFlush( gdi_display );
+ return TRUE;
default:
break;
}
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 9008db6..85dd2a5 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -277,7 +277,8 @@ enum x11drv_escape_codes
X11DRV_GET_DRAWABLE, /* get current drawable for a DC */
X11DRV_START_EXPOSURES, /* start graphics exposures */
X11DRV_END_EXPOSURES, /* end graphics exposures */
- X11DRV_FLUSH_GL_DRAWABLE /* flush changes made to the gl drawable */
+ X11DRV_FLUSH_GL_DRAWABLE, /* flush changes made to the gl drawable */
+ X11DRV_FLUSH_GDI_DISPLAY /* flush the gdi display */
};
struct x11drv_escape_set_drawable
--
1.7.9.5

View File

@@ -1,25 +0,0 @@
From ebe00ceb4f2d24f2611dbec87486d6597a3466a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 2 May 2014 20:46:19 +0200
Subject: [PATCH] user32: Decrease minimum SetTimer interval to 5 ms. (try 2)
---
dlls/win32u/message.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index d2909339983..337d4a2cc1d 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -3975,7 +3975,7 @@ UINT_PTR WINAPI NtUserSetTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC
if (proc) winproc = alloc_winproc( (WNDPROC)proc, TRUE );
- timeout = min( max( USER_TIMER_MINIMUM, timeout ), USER_TIMER_MAXIMUM );
+ timeout = min( max( 5, timeout ), USER_TIMER_MAXIMUM );
SERVER_START_REQ( set_win_timer )
{
--
2.42.0

View File

@@ -1,46 +0,0 @@
From a9cf27a493697c97249ce526483d25c871c053c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 1 Jun 2014 22:51:32 +0200
Subject: [PATCH] winex11.drv: Indicate direct rendering through OpenGL
extension
---
dlls/winex11.drv/opengl.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 92555841f71..71e7ecbcf7c 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -410,6 +410,7 @@ static int GLXErrorHandler(Display *dpy, XErrorEvent *event, void *arg)
static BOOL X11DRV_WineGL_InitOpenglInfo(void)
{
static const char legacy_extensions[] = " WGL_EXT_extensions_string WGL_EXT_swap_control";
+ static const char direct_extension[] = " WINE_EXT_direct_rendering";
int screen = DefaultScreen(gdi_display);
Window win = 0, root = 0;
@@ -465,16 +466,18 @@ static BOOL X11DRV_WineGL_InitOpenglInfo(void)
}
gl_renderer = (const char *)opengl_funcs.gl.p_glGetString(GL_RENDERER);
gl_version = (const char *)opengl_funcs.gl.p_glGetString(GL_VERSION);
+ glx_direct = pglXIsDirect(gdi_display, ctx);
str = (const char *) opengl_funcs.gl.p_glGetString(GL_EXTENSIONS);
- glExtensions = malloc( strlen(str) + sizeof(legacy_extensions) );
+ glExtensions = malloc( strlen(str)+sizeof(legacy_extensions)+sizeof(direct_extension) );
strcpy(glExtensions, str);
strcat(glExtensions, legacy_extensions);
+ if (glx_direct)
+ strcat(glExtensions, direct_extension);
/* Get the common GLX version supported by GLX client and server ( major/minor) */
pglXQueryVersion(gdi_display, &glxVersion[0], &glxVersion[1]);
glxExtensions = pglXQueryExtensionsString(gdi_display, screen);
- glx_direct = pglXIsDirect(gdi_display, ctx);
TRACE("GL version : %s.\n", gl_version);
TRACE("GL renderer : %s.\n", gl_renderer);
--
2.35.1

View File

@@ -1,2 +0,0 @@
Fixes: Reduced SetTimer minimum value from 10 ms to 5 ms (improves Silverlight framerates)
Fixes: Other Pipelight-specific enhancements

View File

@@ -1,4 +1,4 @@
From a207d7f2c77296798e047ed03d88d8a060139aff Mon Sep 17 00:00:00 2001
From 8dcb8ee100c5f81cef92ec98376288253b021f6a Mon Sep 17 00:00:00 2001
From: Jason Edmeades <us@edmeades.me.uk>
Date: Tue, 16 Jul 2019 13:49:18 +1000
Subject: [PATCH] cmd: Support for launching programs based on file association
@@ -11,14 +11,14 @@ fred.msi for msiexec to be launched.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=18154
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36646
---
programs/cmd/wcmdmain.c | 138 +++++++++++++++++++++++++++++-----------
1 file changed, 102 insertions(+), 36 deletions(-)
programs/cmd/wcmdmain.c | 139 +++++++++++++++++++++++++++++-----------
1 file changed, 102 insertions(+), 37 deletions(-)
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index cacb7ea7751..19a807c1624 100644
index 5f1a94b39b3..487be39c954 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -1135,8 +1135,10 @@ void WCMD_run_program (WCHAR *command, BOOL called)
@@ -1385,8 +1385,10 @@ void WCMD_run_program (WCHAR *command, BOOL called)
/* 1. If extension supplied, see if that file exists */
if (extensionsupplied) {
@@ -30,7 +30,7 @@ index cacb7ea7751..19a807c1624 100644
}
}
@@ -1166,6 +1168,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
@@ -1416,6 +1418,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
}
if (GetFileAttributesW(thisDir) != INVALID_FILE_ATTRIBUTES) {
@@ -38,7 +38,7 @@ index cacb7ea7751..19a807c1624 100644
found = TRUE;
thisExt = NULL;
}
@@ -1187,52 +1190,115 @@ void WCMD_run_program (WCHAR *command, BOOL called)
@@ -1437,52 +1440,114 @@ void WCMD_run_program (WCHAR *command, BOOL called)
/* Special case BAT and CMD */
if (ext && (!wcsicmp(ext, L".bat") || !wcsicmp(ext, L".cmd"))) {
BOOL oldinteractive = interactive;
@@ -46,11 +46,9 @@ index cacb7ea7751..19a807c1624 100644
interactive = FALSE;
WCMD_batch (thisDir, command, called, NULL, INVALID_HANDLE_VALUE);
interactive = oldinteractive;
+ WINE_TRACE("Back from call to batch program\n");
return;
- } else {
+ }
- DWORD exit_code;
- /* thisDir contains the file to be launched, but with what?
- eg. a.exe will require a.exe to be launched, a.html may be iexplore */
- hinst = FindExecutableW (thisDir, NULL, temp);
@@ -74,6 +72,8 @@ index cacb7ea7751..19a807c1624 100644
- WCMD_strip_quotes(command);
- opt_s = TRUE;
- WCMD_run_program(command, called);
+ }
+
+ /* Calculate what program will be launched, and whether it is a
+ console application or not. Note the program may be different
+ from the parameter (eg running a .txt file will launch notepad.exe) */
@@ -157,8 +157,8 @@ index cacb7ea7751..19a807c1624 100644
- or for console applications */
- if (!interactive || (console && !HIWORD(console)))
- WaitForSingleObject (pe.hProcess, INFINITE);
- GetExitCodeProcess (pe.hProcess, &errorlevel);
- if (errorlevel == STILL_ACTIVE) errorlevel = 0;
- GetExitCodeProcess (pe.hProcess, &exit_code);
- errorlevel = (exit_code == STILL_ACTIVE) ? 0 : exit_code;
+ if (!status) {
+ WINE_TRACE("Failed to launch via CreateProcess, rc %d (%ld)\n",
+ status, GetLastError());
@@ -190,5 +190,5 @@ index cacb7ea7751..19a807c1624 100644
}
--
2.29.2
2.43.0

View File

@@ -1,4 +1,4 @@
From 28b0030ac5f486875dff6f5f34779844f1a031cf Mon Sep 17 00:00:00 2001
From f6d47bb4eb5747fde7059271a560268080756791 Mon Sep 17 00:00:00 2001
From: Christian Costa <titan.costa@gmail.com>
Date: Sun, 11 Jan 2015 16:29:30 +0100
Subject: [PATCH] d3dx9_36: Improve D3DXSaveTextureToFile to save simple
@@ -11,23 +11,23 @@ Subject: [PATCH] d3dx9_36: Improve D3DXSaveTextureToFile to save simple
3 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h
index 5d8f5b332f8..f1f41c6e4d7 100644
index 001a7f26f4f..b322765d164 100644
--- a/dlls/d3dx9_36/d3dx9_private.h
+++ b/dlls/d3dx9_36/d3dx9_private.h
@@ -127,6 +127,8 @@ HRESULT lock_surface(IDirect3DSurface9 *surface, const RECT *surface_rect, D3DLO
@@ -182,6 +182,8 @@ HRESULT lock_surface(IDirect3DSurface9 *surface, const RECT *surface_rect, D3DLO
IDirect3DSurface9 **temp_surface, BOOL write);
HRESULT unlock_surface(IDirect3DSurface9 *surface, const RECT *surface_rect,
IDirect3DSurface9 *temp_surface, BOOL update);
+HRESULT save_dds_texture_to_memory(ID3DXBuffer **dst_buffer, IDirect3DBaseTexture9 *src_texture,
+ const PALETTEENTRY *src_palette);
unsigned short float_32_to_16(const float in);
float float_16_to_32(const unsigned short in);
HRESULT d3dx_pixels_init(const void *data, uint32_t row_pitch, uint32_t slice_pitch,
const PALETTEENTRY *palette, D3DFORMAT format, uint32_t left, uint32_t top, uint32_t right, uint32_t bottom,
uint32_t front, uint32_t back, struct d3dx_pixels *pixels);
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index ca40018af24..9ff5b4901b8 100644
index fb49ca5665a..2a8bd97fe2d 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -650,6 +650,68 @@ static HRESULT save_dds_surface_to_memory(ID3DXBuffer **dst_buffer, IDirect3DSur
@@ -560,6 +560,68 @@ static HRESULT save_dds_surface_to_memory(ID3DXBuffer **dst_buffer, IDirect3DSur
return D3D_OK;
}
@@ -97,7 +97,7 @@ index ca40018af24..9ff5b4901b8 100644
const D3DBOX *dst_box, const void *src_data, const D3DBOX *src_box, DWORD filter, D3DCOLOR color_key,
const D3DXIMAGE_INFO *src_info)
diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c
index 2ee79b51f79..7ceef158d07 100644
index 52cfb1e8c34..ccbe1fcef20 100644
--- a/dlls/d3dx9_36/texture.c
+++ b/dlls/d3dx9_36/texture.c
@@ -1858,10 +1858,7 @@ HRESULT WINAPI D3DXSaveTextureToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE
@@ -113,5 +113,5 @@ index 2ee79b51f79..7ceef158d07 100644
type = IDirect3DBaseTexture9_GetType(src_texture);
switch (type)
--
2.40.1
2.43.0

View File

@@ -0,0 +1,182 @@
From ae80ae124a784078a9838a8aca4b3af308d645dd Mon Sep 17 00:00:00 2001
From: Patrick Hibbs <hibbsncc1701@gmail.com>
Date: Fri, 30 Sep 2022 17:58:15 -0400
Subject: [PATCH] d3dx9: Implement d3dx_effect_SetRawValue
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46012
Signed-off-by: Patrick Hibbs <hibbsncc1701@gmail.com>
---
dlls/d3dx9_36/effect.c | 154 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 152 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index ea965ce789b..625af4af36b 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -4445,10 +4445,160 @@ static HRESULT WINAPI d3dx_effect_CloneEffect(ID3DXEffect *iface, IDirect3DDevic
static HRESULT WINAPI d3dx_effect_SetRawValue(ID3DXEffect *iface, D3DXHANDLE parameter, const void *data,
UINT byte_offset, UINT bytes)
{
- FIXME("iface %p, parameter %p, data %p, byte_offset %u, bytes %u stub!\n",
+ struct d3dx_effect *effect = impl_from_ID3DXEffect(iface);
+ struct d3dx_parameter *param = (parameter == INVALID_HANDLE_VALUE) ? NULL : get_valid_parameter(effect, parameter);
+ const unsigned int single_size = sizeof(DWORD);
+ unsigned int x, index_offset, remaining_byte_offset, remaining_bytes;
+ void *raw;
+
+ TRACE("iface %p, parameter %p, data %p, byte_offset %u, bytes %u.\n",
iface, parameter, data, byte_offset, bytes);
- return E_NOTIMPL;
+ /* pendentic */
+ index_offset = 0;
+ remaining_byte_offset = 0;
+
+ /* BOOLs and Matries with a single value copy require sanitization of the
+ byte_offset.
+
+ Specificly, matries with a single value copy only allow byte shifts that
+ are not multiples of the value (DWORD) size. For multiples, we increment
+ the index of the promoted data type, then add any remainder as a byte
+ offset.
+
+ For BOOLs, due to their value sanitization, we only care about the
+ index of their promoted data type. Unless it's a non value size matrix.
+ In that case we do care about the byte offset.
+ */
+ if (byte_offset > 0 && (param->type == D3DXPT_BOOL ||
+ (param->class == D3DXPC_MATRIX_COLUMNS ||
+ param->class == D3DXPC_MATRIX_ROWS)))
+ {
+ remaining_byte_offset = byte_offset % single_size;
+ if (remaining_byte_offset != 0)
+ index_offset = byte_offset / single_size;
+ else
+ index_offset = byte_offset;
+ if (param->type != D3DXPT_BOOL || (bytes != single_size &&
+ (param->class == D3DXPC_MATRIX_COLUMNS ||
+ param->class == D3DXPC_MATRIX_ROWS)))
+ {
+ index_offset = index_offset * single_size;
+ if (param->type != D3DXPT_BOOL)
+ index_offset = index_offset * single_size;
+ }
+ }
+
+ /* If parameter is bad, we are expected to throw C0000005. */
+ switch (param->class)
+ {
+ case D3DXPC_STRUCT:
+ break;
+ case D3DXPC_OBJECT:
+ raw = param_get_data_and_dirtify(effect, param, param->bytes, TRUE);
+ if (data && bytes)
+ {
+ if (((char*)raw)[0] != '\0')
+ {
+ memset(raw, '\0', param->bytes);
+ return S_OK; /* This returns a false success. */
+ }
+ else
+ {
+ return D3DERR_INVALIDCALL;
+ }
+ }
+ break;
+ case D3DXPC_SCALAR:
+ raw = param_get_data_and_dirtify(effect, param, param->bytes, TRUE);
+ if (param->type == D3DXPT_BOOL)
+ *(BOOL*)raw = *(BOOL*)data ? TRUE : FALSE;
+ else
+ memcpy((unsigned char*)raw + byte_offset, data, bytes);
+ return S_OK;
+ break;
+ case D3DXPC_VECTOR:
+ raw = (unsigned char*)param_get_data_and_dirtify(effect, param, param->bytes, TRUE);
+ if (param->type == D3DXPT_BOOL)
+ {
+ raw = (unsigned char*)raw + index_offset;
+ *(DWORD*)raw = *(DWORD*)data ? TRUE : FALSE;
+ memset((unsigned char*)raw + single_size, \
+ '\0', param->bytes - index_offset - single_size);
+ }
+ else
+ {
+ raw = (unsigned char*)raw + byte_offset;
+ for (x = 0; (x * single_size) + byte_offset < param->bytes && (x * single_size) < bytes; x++)
+ {
+ memcpy((unsigned char*)raw + (x * single_size), \
+ (unsigned char*)data + (x * single_size), \
+ single_size);
+ }
+ }
+ return S_OK;
+ break;
+ case D3DXPC_MATRIX_COLUMNS:
+ case D3DXPC_MATRIX_ROWS:
+ raw = (unsigned char*)param_get_data_and_dirtify(effect, param, param->bytes, TRUE);
+ if (param->type == D3DXPT_BOOL)
+ {
+ if (bytes == single_size)
+ {
+ raw = (unsigned char*)raw + index_offset;
+ for (x = 0; (x * single_size) < param->bytes - index_offset; x++)
+ {
+ remaining_bytes = param->bytes - index_offset - \
+ (x * single_size) - single_size;
+ *(DWORD*)raw = *(DWORD*)data ? TRUE : FALSE;
+ memset((unsigned char*)raw + single_size, \
+ '\0', (remaining_bytes > (single_size * 4) ? \
+ single_size * 4 : remaining_bytes));
+ raw = (unsigned char*)raw + (remaining_bytes > (single_size * 4) ? \
+ single_size * 4 : remaining_bytes);
+ }
+ }
+ else
+ {
+ raw = (unsigned char*)raw + index_offset;
+ for (x = 0; (x * single_size) < param->bytes - index_offset; x++)
+ {
+ ((DWORD*)raw)[x] = ((DWORD*)data)[x] ? TRUE : FALSE;
+ }
+ }
+ }
+ else
+ {
+ if (bytes == single_size)
+ {
+ raw = (unsigned char*)raw + index_offset + remaining_byte_offset;
+ for (x = 0; (x * single_size) + byte_offset < param->bytes && (x * single_size) < bytes; x++)
+ {
+ memcpy((unsigned char*)raw + (x * single_size), \
+ (unsigned char*)data + (x * single_size), \
+ single_size);
+ }
+ }
+ else
+ {
+ raw = (unsigned char*)raw + byte_offset;
+ for (x = 0; byte_offset + (x * single_size) < param->bytes &&
+ (x * single_size) < bytes; x++)
+ {
+ memcpy((unsigned char*)raw + (x * single_size), \
+ (unsigned char*)data + (x * single_size), \
+ single_size);
+ }
+ }
+ }
+ return S_OK;
+ break;
+ default:
+ FIXME("Unhandled param class %s.\n", debug_d3dxparameter_class(param->class));
+ break;
+ };
+
+ return D3DERR_INVALIDCALL;
}
#endif
--
2.43.0

View File

@@ -0,0 +1,3 @@
Fixes: [46012] d3d9: Implement ID3DXEffect::SetRawValue
# https://gitlab.winehq.org/wine/wine/-/merge_requests/979

View File

@@ -1,4 +1,4 @@
From 0a5214d0fe032778fa3ca4ee60c3d2ba64f8f4c0 Mon Sep 17 00:00:00 2001
From 274e40a7f25d8041f5b93d132f01e0a66fefe481 Mon Sep 17 00:00:00 2001
From: Matthew Wong <itsmattkc@gmail.com>
Date: Fri, 18 Sep 2020 00:47:13 +0000
Subject: [PATCH] ddraw: Implement Pick() and GetPickRecords().
@@ -37,10 +37,10 @@ Signed-off-by: Myah Caron <qsniyg@protonmail.com>
4 files changed, 373 insertions(+), 10 deletions(-)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 6fc93b91860..c90b894ea61 100644
index 1f0c94a9c6e..157384e3579 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -338,6 +338,11 @@ struct d3d_device
@@ -337,6 +337,11 @@ struct d3d_device
struct d3d_viewport *current_viewport;
D3DVIEWPORT7 active_viewport;
@@ -52,7 +52,7 @@ index 6fc93b91860..c90b894ea61 100644
/* Required to keep track which of two available texture blending modes in d3ddevice3 is used */
BOOL legacyTextureBlending;
D3DTEXTUREBLEND texture_map_blend;
@@ -571,7 +576,7 @@ struct d3d_execute_buffer *unsafe_impl_from_IDirect3DExecuteBuffer(IDirect3DExec
@@ -573,7 +578,7 @@ struct d3d_execute_buffer *unsafe_impl_from_IDirect3DExecuteBuffer(IDirect3DExec
/* The execute function */
HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *execute_buffer,
@@ -62,11 +62,11 @@ index 6fc93b91860..c90b894ea61 100644
/*****************************************************************************
* IDirect3DVertexBuffer
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index bc1d91ee00b..82a813f9064 100644
index f64db3aa633..60c43c250b1 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -349,6 +349,9 @@ static ULONG WINAPI d3d_device_inner_Release(IUnknown *iface)
IDirect3DDevice3_DeleteViewport(&This->IDirect3DDevice3_iface, &vp->IDirect3DViewport3_iface);
@@ -333,6 +333,9 @@ static ULONG WINAPI d3d_device_inner_Release(IUnknown *iface)
This->ddraw = NULL;
}
+ if (This->pick_record_size > 0)
@@ -75,7 +75,7 @@ index bc1d91ee00b..82a813f9064 100644
TRACE("Releasing render target %p.\n", This->rt_iface);
rt_iface = This->rt_iface;
This->rt_iface = NULL;
@@ -758,7 +761,7 @@ static HRESULT WINAPI d3d_device1_Execute(IDirect3DDevice *iface,
@@ -739,7 +742,7 @@ static HRESULT WINAPI d3d_device1_Execute(IDirect3DDevice *iface,
/* Execute... */
wined3d_mutex_lock();
@@ -84,7 +84,7 @@ index bc1d91ee00b..82a813f9064 100644
wined3d_mutex_unlock();
return hr;
@@ -1025,16 +1028,44 @@ static HRESULT WINAPI d3d_device1_NextViewport(IDirect3DDevice *iface,
@@ -1006,16 +1009,44 @@ static HRESULT WINAPI d3d_device1_NextViewport(IDirect3DDevice *iface,
* x2 and y2 are ignored.
*
* Returns:
@@ -133,7 +133,7 @@ index bc1d91ee00b..82a813f9064 100644
}
/*****************************************************************************
@@ -1050,13 +1081,35 @@ static HRESULT WINAPI d3d_device1_Pick(IDirect3DDevice *iface, IDirect3DExecuteB
@@ -1031,13 +1062,35 @@ static HRESULT WINAPI d3d_device1_Pick(IDirect3DDevice *iface, IDirect3DExecuteB
* D3DPickRec: Address to store the resulting D3DPICKRECORD array.
*
* Returns:
@@ -172,7 +172,7 @@ index bc1d91ee00b..82a813f9064 100644
return D3D_OK;
}
diff --git a/dlls/ddraw/executebuffer.c b/dlls/ddraw/executebuffer.c
index 320ce6649d4..84366dafd7d 100644
index 0cf0bf121f3..89915fb7145 100644
--- a/dlls/ddraw/executebuffer.c
+++ b/dlls/ddraw/executebuffer.c
@@ -45,15 +45,106 @@ static void _dump_D3DEXECUTEBUFFERDESC(const D3DEXECUTEBUFFERDESC *lpDesc) {
@@ -378,7 +378,7 @@ index 320ce6649d4..84366dafd7d 100644
/* Drop through. */
case 2:
indices[(i * primitive_size) + 1] = ci->v2;
@@ -426,6 +597,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, struct d3d
@@ -424,6 +595,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, struct d3d
end_of_buffer:
return D3D_OK;
}
@@ -387,10 +387,10 @@ index 320ce6649d4..84366dafd7d 100644
static inline struct d3d_execute_buffer *impl_from_IDirect3DExecuteBuffer(IDirect3DExecuteBuffer *iface)
{
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index d8fcb188c40..bacd9049d6e 100644
index 96047744635..2364c92eb96 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -15467,6 +15467,137 @@ static void test_enum_devices(void)
@@ -15507,6 +15507,137 @@ static void test_enum_devices(void)
ok(!refcount, "Device has %lu references left.\n", refcount);
}
@@ -528,7 +528,7 @@ index d8fcb188c40..bacd9049d6e 100644
/* Emperor: Rise of the Middle Kingdom locks a sysmem surface and then accesses
* the pointer after unlocking it. This test roughly replicates the calls that
* it makes. */
@@ -15527,6 +15658,7 @@ static void test_pinned_sysmem(void)
@@ -15567,6 +15698,7 @@ static void test_pinned_sysmem(void)
IDirectDrawSurface_Release(surface);
refcount = IDirectDraw_Release(ddraw);
ok(!refcount, "Device has %lu references left.\n", refcount);
@@ -536,7 +536,7 @@ index d8fcb188c40..bacd9049d6e 100644
DestroyWindow(window);
}
@@ -15646,6 +15778,7 @@ START_TEST(ddraw1)
@@ -15789,6 +15921,7 @@ START_TEST(ddraw1)
test_vtbl_protection();
test_window_position();
test_get_display_mode();

View File

@@ -1,15 +1,15 @@
From e4688a88901a1c13b2df67a0444c34e3ee02bbab Mon Sep 17 00:00:00 2001
From 9c7acdba85edafc52bc0cc2719ac556894a59351 Mon Sep 17 00:00:00 2001
From: Andrew D'Addesio <andrew@fatbag.net>
Date: Fri, 8 Feb 2019 18:48:33 -1000
Subject: [PATCH] ddraw: Return correct devices based off requested DirectX
version.
---
dlls/ddraw/ddraw.c | 232 +++++++++++++++++++++++++--------------------
1 file changed, 129 insertions(+), 103 deletions(-)
dlls/ddraw/ddraw.c | 240 +++++++++++++++++++++++++--------------------
1 file changed, 131 insertions(+), 109 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 5887854556b..5ac95dc3043 100644
index 8f2fd9f3b4b..0ef400b7a26 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -44,37 +44,80 @@ static const DDDEVICEIDENTIFIER2 deviceidentifier =
@@ -122,7 +122,7 @@ index 5887854556b..5ac95dc3043 100644
/* Fill the missing members, and do some fixup */
caps->dpcLineCaps.dwSize = sizeof(caps->dpcLineCaps);
caps->dpcLineCaps.dwTextureBlendCaps = D3DPTBLENDCAPS_ADD
@@ -3746,8 +3780,7 @@ static HRESULT WINAPI ddraw1_DuplicateSurface(IDirectDraw *iface, IDirectDrawSur
@@ -3770,8 +3804,7 @@ static HRESULT WINAPI ddraw1_DuplicateSurface(IDirectDraw *iface, IDirectDrawSur
/*****************************************************************************
* IDirect3D7::EnumDevices
*
@@ -132,7 +132,7 @@ index 5887854556b..5ac95dc3043 100644
*
* Params:
* callback: Function to call for each enumerated device
@@ -3779,13 +3812,16 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
@@ -3803,13 +3836,16 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
}
dev_caps = device_desc7.dwDevCaps;
@@ -153,7 +153,7 @@ index 5887854556b..5ac95dc3043 100644
if (ret != DDENUMRET_OK)
{
TRACE("Application cancelled the enumeration.\n");
@@ -3801,11 +3837,21 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
@@ -3825,11 +3861,21 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
return D3D_OK;
}
@@ -177,7 +177,7 @@ index 5887854556b..5ac95dc3043 100644
*
* Versions 1, 2 and 3
*
@@ -3820,18 +3866,18 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
@@ -3844,18 +3890,18 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
*****************************************************************************/
static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
{
@@ -205,7 +205,7 @@ index 5887854556b..5ac95dc3043 100644
TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
@@ -3840,55 +3886,60 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
@@ -3864,58 +3910,59 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
wined3d_mutex_lock();
@@ -221,7 +221,6 @@ index 5887854556b..5ac95dc3043 100644
wined3d_mutex_unlock();
return hr;
}
+
ddraw_d3dcaps1_from_7(&device_desc1, &device_desc7);
+ device_desc1.dwSize = desc_size;
@@ -245,15 +244,12 @@ index 5887854556b..5ac95dc3043 100644
- * flag set. This way it refuses the emulation device, and HAL devices
- * never have POW2 unset in d3d7 on windows. */
- if (ddraw->d3dversion != 1)
+ clear_device_desc(&empty_desc1);
+ empty_desc1.dwSize = desc_size;
+
+ for (i = 0; i < ARRAY_SIZE(device_list); i++)
{
- static CHAR reference_description[] = "RGB Direct3D emulation";
+ if (!(device_list[i].version_mask & D3D_VERSION(ddraw->d3dversion)))
+ continue;
- {
- /* Tomb Raider 3 overwrites the reference device description buffer
- * with its own custom string. Reserve some extra space in the array
- * to avoid a buffer overrun. */
- static CHAR reference_description[64] = "RGB Direct3D emulation";
-
- TRACE("Enumerating WineD3D D3DDevice interface.\n");
- hal_desc = device_desc1;
- hel_desc = device_desc1;
@@ -269,13 +265,22 @@ index 5887854556b..5ac95dc3043 100644
- /* RGB, REF, RAMP and MMX devices don't report hardware transform and lighting capability */
- hal_desc.dwDevCaps &= ~(D3DDEVCAPS_HWTRANSFORMANDLIGHT | D3DDEVCAPS_DRAWPRIMITIVES2EX | D3DDEVCAPS_HWRASTERIZATION);
- hel_desc.dwDevCaps &= ~(D3DDEVCAPS_HWTRANSFORMANDLIGHT | D3DDEVCAPS_DRAWPRIMITIVES2EX | D3DDEVCAPS_HWRASTERIZATION);
+ if (IsEqualGUID(&IID_IDirect3DHALDevice, device_list[i].device_guid))
+ {
+ hal_desc = device_desc1;
-
- hr = callback((GUID *)&IID_IDirect3DRGBDevice, reference_description,
- device_name, &hal_desc, &hel_desc, context);
- if (hr != D3DENUMRET_OK)
+ clear_device_desc(&empty_desc1);
+ empty_desc1.dwSize = desc_size;
+
+ for (i = 0; i < ARRAY_SIZE(device_list); i++)
+ {
+ if (!(device_list[i].version_mask & D3D_VERSION(ddraw->d3dversion)))
+ continue;
+
+ if (IsEqualGUID(&IID_IDirect3DHALDevice, device_list[i].device_guid))
+ {
+ hal_desc = device_desc1;
+
+ /* The HAL device's hel_desc is almost empty -- but not completely */
+ hel_desc = empty_desc1;
+ hel_desc.dwFlags = D3DDD_COLORMODEL | D3DDD_DEVCAPS | D3DDD_TRANSFORMCAPS
@@ -305,7 +310,7 @@ index 5887854556b..5ac95dc3043 100644
{
TRACE("Application cancelled the enumeration.\n");
wined3d_mutex_unlock();
@@ -3896,31 +3947,6 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
@@ -3923,31 +3970,6 @@ static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBA
}
}

View File

@@ -1,4 +1,4 @@
From d09ac9a348309f956a2f3985a1b465b51b6e174c Mon Sep 17 00:00:00 2001
From 6ef73a30a9f0c7c6775786d4cdba169f95056393 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 28 Mar 2015 08:18:10 +0100
Subject: [PATCH] dsound: Apply filters before sound is multiplied to speakers.
@@ -11,10 +11,10 @@ Based on a patch by Mark Harmstone.
3 files changed, 81 insertions(+), 36 deletions(-)
diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
index 0b8edaaaf06..bdf3a824511 100644
index 7629810db50..4c1c022acb7 100644
--- a/dlls/dsound/dsound.c
+++ b/dlls/dsound/dsound.c
@@ -234,6 +234,7 @@ static ULONG DirectSoundDevice_Release(DirectSoundDevice * device)
@@ -236,6 +236,7 @@ static ULONG DirectSoundDevice_Release(DirectSoundDevice * device)
if(device->mmdevice)
IMMDevice_Release(device->mmdevice);
CloseHandle(device->sleepev);
@@ -23,10 +23,10 @@ index 0b8edaaaf06..bdf3a824511 100644
free(device->cp_buffer);
free(device->buffer);
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
index 124a4311b4c..fe39ca221fa 100644
index 61323be99d8..c2656ab82f1 100644
--- a/dlls/dsound/dsound_private.h
+++ b/dlls/dsound/dsound_private.h
@@ -89,8 +89,8 @@ struct DirectSoundDevice
@@ -90,8 +90,8 @@ struct DirectSoundDevice
int speaker_num[DS_MAX_CHANNELS];
int num_speakers;
int lfe_channel;
@@ -34,14 +34,14 @@ index 124a4311b4c..fe39ca221fa 100644
- DWORD tmp_buffer_len, cp_buffer_len;
+ float *tmp_buffer, *cp_buffer, *dsp_buffer;
+ DWORD tmp_buffer_len, cp_buffer_len, dsp_buffer_len;
CO_MTA_USAGE_COOKIE mta_cookie;
DSVOLUMEPAN volpan;
diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c
index c26b19ea8c1..68a45c46d1e 100644
index 042b9499727..f261588454a 100644
--- a/dlls/dsound/mixer.c
+++ b/dlls/dsound/mixer.c
@@ -283,10 +283,9 @@ static inline float get_current_sample(const IDirectSoundBufferImpl *dsb,
@@ -286,10 +286,9 @@ static inline float get_current_sample(const IDirectSoundBufferImpl *dsb,
return dsb->get(dsb, buffer + (mixpos % buflen), channel);
}
@@ -53,7 +53,7 @@ index c26b19ea8c1..68a45c46d1e 100644
UINT committed_samples = 0;
DWORD channel, i;
@@ -305,17 +304,16 @@ static UINT cp_fields_noresample(IDirectSoundBufferImpl *dsb, UINT count)
@@ -308,17 +307,16 @@ static UINT cp_fields_noresample(IDirectSoundBufferImpl *dsb, UINT count)
for (; i < count; i++)
for (channel = 0; channel < dsb->mix_channels; channel++)
@@ -74,7 +74,7 @@ index c26b19ea8c1..68a45c46d1e 100644
UINT channels = dsb->mix_channels;
LONG64 freqAcc_start = *freqAccNum;
@@ -343,7 +341,7 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
@@ -346,7 +344,7 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
float s1 = get_current_sample(dsb, dsb->buffer->memory, dsb->buflen, idx, channel);
float s2 = get_current_sample(dsb, dsb->buffer->memory, dsb->buflen, idx + istride, channel);
float result = s1 * cur_freqAcc2 + s2 * cur_freqAcc;
@@ -83,7 +83,7 @@ index c26b19ea8c1..68a45c46d1e 100644
}
}
@@ -351,11 +349,11 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
@@ -354,11 +352,11 @@ static UINT cp_fields_resample_lq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
return max_ipos;
}
@@ -97,7 +97,7 @@ index c26b19ea8c1..68a45c46d1e 100644
UINT committed_samples = 0;
LONG64 freqAcc_start = *freqAccNum;
@@ -430,23 +428,24 @@ static UINT cp_fields_resample_hq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
@@ -433,23 +431,24 @@ static UINT cp_fields_resample_hq(IDirectSoundBufferImpl *dsb, UINT count, LONG6
float* cache = &intermediate[channel * required_input + ipos];
for (j = 0; j < fir_used; j++)
sum += fir_copy[j] * cache[j];
@@ -127,7 +127,7 @@ index c26b19ea8c1..68a45c46d1e 100644
ipos = dsb->sec_mixpos + adv * dsb->pwfx->nBlockAlign;
if (ipos >= dsb->buflen) {
@@ -482,6 +481,21 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
@@ -485,6 +484,21 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
return buflen + ptr1 - ptr2;
}
}
@@ -149,7 +149,7 @@ index c26b19ea8c1..68a45c46d1e 100644
/**
* Mix at most the given amount of data into the allocated temporary buffer
* of the given secondary buffer, starting from the dsb's first currently
@@ -497,31 +511,61 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
@@ -500,31 +514,61 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
*/
static void DSOUND_MixToTemporary(IDirectSoundBufferImpl *dsb, DWORD frames)
{
@@ -180,12 +180,22 @@ index c26b19ea8c1..68a45c46d1e 100644
+ }
+ if(dsb->put_aux == putieee32_sum)
+ memset(dsb->device->tmp_buffer, 0, dsb->device->tmp_buffer_len);
+
- if (size_bytes > 0) {
- for (i = 0; i < dsb->num_filters; i++) {
- if (dsb->filters[i].inplace) {
- hr = IMediaObjectInPlace_Process(dsb->filters[i].inplace, size_bytes, (BYTE*)dsb->device->tmp_buffer, 0, DMO_INPLACE_NORMAL);
+ if (using_filters) {
+ put = putieee32_dsp;
+ ostride = dsb->mix_channels * sizeof(float);
+ size_bytes = frames * ostride;
+
- if (FAILED(hr))
- WARN("IMediaObjectInPlace_Process failed for filter %u\n", i);
- } else
- WARN("filter %u has no inplace object - unsupported\n", i);
- }
- }
+ if (dsb->device->dsp_buffer_len < size_bytes || !dsb->device->dsp_buffer) {
+ if (dsb->device->dsp_buffer)
+ dsb->device->dsp_buffer = HeapReAlloc(GetProcessHeap(), 0, dsb->device->dsp_buffer, size_bytes);
@@ -194,11 +204,7 @@ index c26b19ea8c1..68a45c46d1e 100644
+ dsb->device->dsp_buffer_len = size_bytes;
+ }
+ }
- if (size_bytes > 0) {
- for (i = 0; i < dsb->num_filters; i++) {
- if (dsb->filters[i].inplace) {
- hr = IMediaObjectInPlace_Process(dsb->filters[i].inplace, size_bytes, (BYTE*)dsb->device->tmp_buffer, 0, DMO_INPLACE_NORMAL);
+
+ cp_fields(dsb, put, ostride, frames, &dsb->freqAccNum);
+
+ if (using_filters) {
@@ -213,13 +219,7 @@ index c26b19ea8c1..68a45c46d1e 100644
+ WARN("filter %lu has no inplace object - unsupported\n", i);
+ }
+ }
- if (FAILED(hr))
- WARN("IMediaObjectInPlace_Process failed for filter %u\n", i);
- } else
- WARN("filter %u has no inplace object - unsupported\n", i);
- }
- }
+
+ istride = ostride;
+ ostride = dsb->device->pwfx->nChannels * sizeof(float);
+ for (i = 0; i < frames; i++) {
@@ -232,5 +232,5 @@ index c26b19ea8c1..68a45c46d1e 100644
static void DSOUND_MixerVol(const IDirectSoundBufferImpl *dsb, INT frames)
--
2.39.2
2.43.0

View File

@@ -1,4 +1,4 @@
From ec18233558b62aa736b5ecf20d2f7487e2823286 Mon Sep 17 00:00:00 2001
From 9b9b36ccc66866ba142ce1f0d12190025ac2e7f7 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Thu, 7 Jun 2018 20:09:59 -0500
Subject: [PATCH] server: Create server objects for eventfd-based
@@ -15,10 +15,10 @@ Subject: [PATCH] server: Create server objects for eventfd-based
create mode 100644 server/esync.h
diff --git a/server/Makefile.in b/server/Makefile.in
index 3b9446fe224..776faec63e4 100644
index ae502dbf17d..b164193ef20 100644
--- a/server/Makefile.in
+++ b/server/Makefile.in
@@ -11,6 +11,7 @@ C_SRCS = \
@@ -11,6 +11,7 @@ SOURCES = \
debugger.c \
device.c \
directory.c \
@@ -381,7 +381,7 @@ index 00000000000..00f9e638d83
+extern int do_esync(void);
+void esync_init(void);
diff --git a/server/main.c b/server/main.c
index a134d811d82..3436b0871b4 100644
index ddda5f4e86e..5062d0999fa 100644
--- a/server/main.c
+++ b/server/main.c
@@ -34,6 +34,7 @@
@@ -403,10 +403,10 @@ index a134d811d82..3436b0871b4 100644
set_current_time();
init_scheduler();
diff --git a/server/protocol.def b/server/protocol.def
index 99df502e398..9e15ada5bd0 100644
index e86d3414247..03bc0aeb11e 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3777,7 +3777,6 @@ struct handle_info
@@ -3867,7 +3867,6 @@ struct handle_info
obj_handle_t handle; /* process handle */
@END
@@ -414,11 +414,10 @@ index 99df502e398..9e15ada5bd0 100644
/* Iterate thread list for process */
@REQ(get_next_thread)
obj_handle_t process; /* process handle */
@@ -3788,3 +3787,27 @@ struct handle_info
@REPLY
@@ -3879,6 +3878,29 @@ struct handle_info
obj_handle_t handle; /* next thread handle */
@END
+
+enum esync_type
+{
+ ESYNC_SEMAPHORE = 1,
@@ -442,6 +441,14 @@ index 99df502e398..9e15ada5bd0 100644
+ int type; /* actual type (may be different for events) */
+ unsigned int shm_idx;
+@END
/* Setup keyboard auto-repeat */
@REQ(set_keyboard_repeat)
@@ -3888,3 +3910,4 @@ struct handle_info
@REPLY
int enable; /* previous state of auto-repeat enable */
@END
+
--
2.38.1
2.43.0

View File

@@ -1,4 +1,4 @@
From 193c44f510beed365640159cbdaeb0cb8186a7b0 Mon Sep 17 00:00:00 2001
From 2f23f37d5a1ba0d59d367729d96285ac7c470e8d Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 18:55:49 -0500
Subject: [PATCH] server: Add a request to get the eventfd file descriptor
@@ -6,14 +6,14 @@ Subject: [PATCH] server: Add a request to get the eventfd file descriptor
---
server/esync.c | 37 +++++++++++++++++++++++++++++++++++++
server/protocol.def | 8 ++++++++
2 files changed, 45 insertions(+)
server/protocol.def | 9 ++++++++-
2 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/server/esync.c b/server/esync.c
index d646cb52bc2..cfbbcf55c48 100644
index f95dc5a391f..85f7f1e060f 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -335,3 +335,40 @@ DECL_HANDLER(create_esync)
@@ -333,3 +333,40 @@ DECL_HANDLER(create_esync)
if (root) release_object( root );
}
@@ -55,14 +55,13 @@ index d646cb52bc2..cfbbcf55c48 100644
+ release_object( obj );
+}
diff --git a/server/protocol.def b/server/protocol.def
index 552d504cc8d..9062a5020c2 100644
index 03bc0aeb11e..4ab6b97ba93 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3689,3 +3689,11 @@ enum esync_type
int type; /* actual type (may be different for events) */
@@ -3902,6 +3902,14 @@ enum esync_type
unsigned int shm_idx;
@END
+
+/* Retrieve the esync fd for an object. */
+@REQ(get_esync_fd)
+ obj_handle_t handle; /* handle to the object */
@@ -70,6 +69,15 @@ index 552d504cc8d..9062a5020c2 100644
+ int type;
+ unsigned int shm_idx;
+@END
+
/* Setup keyboard auto-repeat */
@REQ(set_keyboard_repeat)
int enable; /* whether to enable auto-repeat */
@@ -3910,4 +3918,3 @@ enum esync_type
@REPLY
int enable; /* previous state of auto-repeat enable */
@END
-
--
2.28.0
2.43.0

View File

@@ -1,4 +1,4 @@
From ad881c0cf988811e4b8662eac50f8998dfed40ca Mon Sep 17 00:00:00 2001
From a43255ead53a49837e7995ab4de0afa8e05e6334 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 15:11:12 -0500
Subject: [PATCH] server: Create eventfd file descriptors for process objects.
@@ -49,7 +49,7 @@ index 00f9e638d83..8522d8a69ae 100644
void esync_init(void);
+int esync_create_fd( int initval, int flags );
diff --git a/server/process.c b/server/process.c
index 4a5ef0876b0..a7be3ee3876 100644
index 031c0fece13..eb073551b57 100644
--- a/server/process.c
+++ b/server/process.c
@@ -63,6 +63,7 @@
@@ -85,9 +85,9 @@ index 4a5ef0876b0..a7be3ee3876 100644
list_init( &process->kernel_object );
list_init( &process->thread_list );
list_init( &process->locks );
@@ -744,6 +747,9 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla
if (!token_assign_label( process->token, &high_label_sid ))
goto error;
@@ -738,6 +741,9 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla
if (!process->handles || !process->token) goto error;
process->session_id = token_get_session_id( process->token );
+ if (do_esync())
+ process->esync_fd = esync_create_fd( 0, 0 );
@@ -95,7 +95,7 @@ index 4a5ef0876b0..a7be3ee3876 100644
set_fd_events( process->msg_fd, POLLIN ); /* start listening to events */
return process;
@@ -792,6 +798,7 @@ static void process_destroy( struct object *obj )
@@ -786,6 +792,7 @@ static void process_destroy( struct object *obj )
free( process->rawinput_devices );
free( process->dir_cache );
free( process->image );
@@ -103,7 +103,7 @@ index 4a5ef0876b0..a7be3ee3876 100644
}
/* dump a process on stdout for debugging purposes */
@@ -809,6 +816,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
@@ -803,6 +810,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
return !process->running_threads;
}

View File

@@ -1,4 +1,4 @@
From d7b142aa0b60d99bd225849439cd49119a6e3e80 Mon Sep 17 00:00:00 2001
From 465a4772356f406552cc20bddec820a4e197b667 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 16:11:23 -0500
Subject: [PATCH] server, ntdll: Implement message waits.
@@ -6,8 +6,8 @@ Subject: [PATCH] server, ntdll: Implement message waits.
---
dlls/ntdll/unix/esync.c | 51 +++++++++++++++++++++++++++++++++++++++--
server/protocol.def | 5 ++++
server/queue.c | 21 +++++++++++++++++
3 files changed, 75 insertions(+), 2 deletions(-)
server/queue.c | 22 ++++++++++++++++++
3 files changed, 76 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
index 399930c444b..06d7d8babc6 100644
@@ -105,23 +105,25 @@ index 399930c444b..06d7d8babc6 100644
{
struct stat st;
diff --git a/server/protocol.def b/server/protocol.def
index a2700b043ba..fb290c7964c 100644
index 4ab6b97ba93..d28c1a6f5fa 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3907,3 +3907,8 @@ enum esync_type
int type;
@@ -3910,6 +3910,10 @@ enum esync_type
unsigned int shm_idx;
@END
+
+/* Notify the server that we are doing a message wait or done with one. */
+@REQ(esync_msgwait)
+ int in_msgwait; /* are we in a message wait? */
+@END
+
/* Setup keyboard auto-repeat */
@REQ(set_keyboard_repeat)
int enable; /* whether to enable auto-repeat */
diff --git a/server/queue.c b/server/queue.c
index 936a6309683..fc13b1cf6eb 100644
index 1568355104c..b68774d7524 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -148,6 +148,7 @@ struct msg_queue
@@ -149,6 +149,7 @@ struct msg_queue
int keystate_lock; /* owns an input keystate lock */
unsigned int ignore_post_msg; /* ignore post messages newer than this unique id */
int esync_fd; /* esync file descriptor (signalled on message) */
@@ -129,7 +131,7 @@ index 936a6309683..fc13b1cf6eb 100644
};
struct hotkey
@@ -321,6 +322,7 @@ static struct msg_queue *create_msg_queue( struct thread *thread, struct thread_
@@ -322,6 +323,7 @@ static struct msg_queue *create_msg_queue( struct thread *thread, struct thread_
queue->keystate_lock = 0;
queue->ignore_post_msg = 0;
queue->esync_fd = -1;
@@ -137,7 +139,7 @@ index 936a6309683..fc13b1cf6eb 100644
list_init( &queue->send_result );
list_init( &queue->callback_result );
list_init( &queue->pending_timers );
@@ -1108,6 +1110,10 @@ static int is_queue_hung( struct msg_queue *queue )
@@ -1115,6 +1117,10 @@ static int is_queue_hung( struct msg_queue *queue )
if (get_wait_queue_thread(entry)->queue == queue)
return 0; /* thread is waiting on queue -> not hung */
}
@@ -148,11 +150,10 @@ index 936a6309683..fc13b1cf6eb 100644
return 1;
}
@@ -3735,3 +3741,18 @@ DECL_HANDLER(update_rawinput_devices)
release_object( desktop );
@@ -3923,6 +3929,21 @@ DECL_HANDLER(update_rawinput_devices)
}
}
+
+DECL_HANDLER(esync_msgwait)
+{
+ struct msg_queue *queue = get_current_queue();
@@ -167,6 +168,15 @@ index 936a6309683..fc13b1cf6eb 100644
+ if (queue->fd)
+ set_fd_events( queue->fd, req->in_msgwait ? POLLIN : 0 );
+}
+
DECL_HANDLER(set_keyboard_repeat)
{
struct desktop *desktop;
@@ -3941,3 +3962,4 @@ DECL_HANDLER(set_keyboard_repeat)
release_object( desktop );
}
+
--
2.43.0

Some files were not shown because too many files have changed in this diff Show More