Compare commits

...

118 Commits
v6.9 ... v6.19

Author SHA1 Message Date
Alistair Leslie-Hughes
d1ea5ced2b Release v6.19 2021-10-09 16:02:56 +11:00
Alistair Leslie-Hughes
8174243203 Reenabled mfplat patchset 2021-10-09 14:02:26 +11:00
Zebediah Figura
9e1a4bdb73 Rebase against 7554bd4b41a1429517eb86fd20dbe813cdd0550a. 2021-10-08 18:19:30 -05:00
Alistair Leslie-Hughes
dbf2d00a9b Restore iphlpapi-System_Ping
Changes upstream, means this need to be fixed another way.
2021-10-07 13:16:17 +11:00
Alistair Leslie-Hughes
c61d12592b Rebase against 3660176e09bc02e71586b4cf42f58c9498481af6. 2021-10-07 09:15:30 +11:00
Alistair Leslie-Hughes
7750a01cea Rebase against ed38d12833bb1957a915ac63128957dacf2bc245. 2021-10-06 09:30:42 +11:00
Alistair Leslie-Hughes
e41287e81a Rebase against 5a8dcb062793fbb68997e1b54ebc2666a2b2834d. 2021-10-05 08:55:24 +11:00
Alistair Leslie-Hughes
4d66e1bf6b Rebase against a87abdbe85779adf6a2a7897bd88984587880693. 2021-10-02 12:00:05 +10:00
Alistair Leslie-Hughes
c4535e89f7 Rebase against aa629c4c7225166f4ee46476d98702df2e142711. 2021-10-01 09:31:24 +10:00
Alistair Leslie-Hughes
7f9b324dea Rebase against 08b01d8271fe15c7680a957778d506221d7d94eb. 2021-09-30 10:41:59 +10:00
Alistair Leslie-Hughes
d8c1599a49 Rebase against bcdb28a563d43f2aebe28f457497bb36f59a50ea. 2021-09-29 09:12:17 +10:00
Alistair Leslie-Hughes
47a1fa55d6 Updated sapi-iteration-tokens patchset
Make the tests pass (GetId).
Stop new crash in "Beneath a Steel Sky".
2021-09-28 14:42:43 +10:00
Alistair Leslie-Hughes
0ff86943ed Rebase against de7adacedbdd78fd1ed8ee0986a78670e11a60bc. 2021-09-28 08:59:28 +10:00
Alistair Leslie-Hughes
f8851f16b0 Release v6.18 2021-09-25 12:45:22 +10:00
Alistair Leslie-Hughes
7ed2565d7e Disable ntdll-Heap_Improvements patchset
This patchset is causing causing an issue with upstream.
Currently disable for release.

https://bugs.winehq.org/show_bug.cgi?id=51777
2021-09-25 08:54:09 +10:00
Zebediah Figura
013f32ceeb Rebase against 2660cd9fcbb23897b041c43bcac1dc2a7aa3c01f. 2021-09-24 17:12:28 -05:00
Zebediah Figura
5f6802dae2 Rebase against 6b724c3dd8d1ae83e90d4e7e9ec191016fabc7d0. 2021-09-23 16:27:13 -05:00
Alistair Leslie-Hughes
8a2658a2ce Updated wininet-handle-403-error patchset 2021-09-23 10:40:09 +10:00
Alistair Leslie-Hughes
aae6c7b961 Rebase against 9f6e39e8b945466180080d470e1272ba4f807b3a. 2021-09-23 08:26:37 +10:00
Alistair Leslie-Hughes
100f108822 Added sapi-iteration-tokens patchset 2021-09-22 19:02:18 +10:00
Alistair Leslie-Hughes
640f5f7d0a Rebase against e482605548b124a7863f6b09395b3a850ae741cc. 2021-09-22 08:28:32 +10:00
Alistair Leslie-Hughes
a1db1dfc16 Rebase against 975d0632a19efd41338cb73a97f1b0bdbe7bc0cc. 2021-09-21 11:58:46 +10:00
Zebediah Figura
2771ab8cee ntdll-Zero_mod_name: Remove patch.
After examining the code several times I'm convinced that, according to the C
specification, it shouldn't have any effect.

That said, it's supposed to be for Cygwin, and bug 47812 describes a rather
insane thing that Cygwin does with the stack. If Cygwin is accessing overwritten
stack memory, then it seems reasonable that something like this patch set has an
effect.

Bug 47812 is fixed now, though, so let's remove this patch.
2021-09-19 21:29:06 -05:00
Alistair Leslie-Hughes
fc40539f6d Re-enable mfplat-streaming-support
We had reverted the current upstream winegreamer commits to allow
mfplat-streaming-support to be used within staging.  Hopefully the
patchset in question will be upstream shortly.
2021-09-19 13:13:18 +10:00
Zebediah Figura
fdcc8bec48 Rebase against 16e73be10d940c9c04101a47687a6f8a385c2b0f. 2021-09-17 17:45:25 -05:00
Alistair Leslie-Hughes
3a06c15dd2 Added sapi-ISpObjectToken-CreateInstance patchset 2021-09-17 14:17:46 +10:00
Alistair Leslie-Hughes
e7c298c616 Added wininet-handle-403-error patchset 2021-09-17 13:30:00 +10:00
Alistair Leslie-Hughes
7b01b9eb20 Added fltmgr.sys-FltBuildDefaultSecurityDescriptor patchset 2021-09-17 13:30:00 +10:00
Alistair Leslie-Hughes
afb9dcf2a5 Rebase against 8547aac2dcfcae9060d0a630c9f80af7bcaf19b4. 2021-09-17 12:40:50 +10:00
Alistair Leslie-Hughes
d918a0ca3f Rebase against f232252951fec637758f6b2c4eeda1c0e0650310. 2021-09-16 09:35:15 +10:00
Zebediah Figura
ad56d6b3d3 Rebase against b5e17b669a90d961a93f6092ebc3736ff8ca9cd6. 2021-09-14 21:44:56 -05:00
Alistair Leslie-Hughes
5f19a81589 Release v6.17 2021-09-11 08:54:34 +10:00
Alistair Leslie-Hughes
1033d3990b Rebase against a8583acae9548e6340d8400ec7710136cd061ab2. 2021-09-11 08:22:10 +10:00
Alistair Leslie-Hughes
a896148be0 Rebase against 0b7f8373e3593ca8e5261d4486f1d04092a15653. 2021-09-10 08:12:17 +10:00
Zebediah Figura
ef11bb63ce Rebase against 63737942a06183f6b2e7fa8f95a07c918c9bf29b. 2021-09-07 21:47:35 -05:00
Alistair Leslie-Hughes
f3b03ce5a1 Rebase against 8b9f1e12841298591387e2b7590191610a37986e. 2021-09-04 08:24:36 +10:00
Paul Gofman
4b48df5032 Updated wined3d-zero-inf-shaders patchset.
Fix by Matteo Bruni <mbruni@codeweavers.com>.
2021-08-31 22:57:55 +03:00
Zebediah Figura
24319dc308 Rebase against 21c4a25437969696cbf5ffecee191ba8302bb2dd. 2021-08-30 22:26:36 -05:00
Alistair Leslie-Hughes
931daeffec Release v6.16 2021-08-28 09:33:12 +10:00
Alistair Leslie-Hughes
d923cf9418 Rebase against 8e2df64cf8979334618a3e2672d19cb9b891fa3f. 2021-08-28 09:23:30 +10:00
Paul Gofman
66c0fdc159 Update and reenable ntdll-Syscall_Emulation patchset. 2021-08-27 14:05:49 +03:00
Alistair Leslie-Hughes
6f3825b11f Rebase against 07ecdf6ce27590edbcf4c6787abef28c1ccc2768. 2021-08-27 09:26:57 +10:00
Alistair Leslie-Hughes
8d34769ef1 Rebase against 4a18232e455d82c9334c71ebea833dfb5b50b19e. 2021-08-26 08:55:28 +10:00
Alistair Leslie-Hughes
5a5c5a5743 Rebase against a87bafc5b92c9f2deaa399e32a8ec42d28f7ea45. 2021-08-25 09:53:24 +10:00
Alistair Leslie-Hughes
5c01355ada Added d3dx11_43-D3DX11CreateTextureFromMemory patchset 2021-08-24 08:47:18 +10:00
Alistair Leslie-Hughes
270f893aea Rebase against f33bf35d9a395a17e83b4bf512c5434368a8218e. 2021-08-24 08:01:24 +10:00
Zebediah Figura
dc0aa10ad7 Rebase against 17ba916c564236c9940ad736ff15a87fc5d1b12f. 2021-08-19 16:41:22 -05:00
Alistair Leslie-Hughes
d7b8304e38 Rebase against 60a3e0106246cb91d598a815d4fadf2791011142. 2021-08-18 08:34:28 +10:00
Zebediah Figura
b09fe464be server-default_integrity: Use "path" instead of ImagePathName to read the manifest.
Also, while we're at it, don't depend on the path being null-terminated.
2021-08-14 17:35:45 -05:00
Alistair Leslie-Hughes
4b6879f30f Release v6.15 2021-08-14 17:18:31 +10:00
Alistair Leslie-Hughes
94337e021c Rebase against 7f144646ffac6f3632d0c39b217dbd433c1154a0. 2021-08-14 15:52:01 +10:00
Alistair Leslie-Hughes
05c42b1df2 Rebase against 6b58d34a625ffaad181a7316009398f3c6444181. 2021-08-13 08:52:12 +10:00
Zebediah Figura
1bc4da9d59 Rebase against 91494ae6f2e47254d15a47e292ff569f3b400be6. 2021-08-11 22:25:44 -05:00
Alistair Leslie-Hughes
16476ce303 Updated mfplat-streaming-support patchset
Added a patch again to disable Function MFCreateDXGIDeviceManager.

This causes videos to render as a black screen.
Until support for the internal rendering flag SOURCE_READER_HAS_DEVICE_MANAGER is
better support through mf*, this patch will be here to stay.

Games affected.
Power Ranger: Battle for the Grid (Steam).
Oddworld: Soulstorm (Epic).
2021-08-11 09:37:19 +10:00
Alistair Leslie-Hughes
bdb9f49c3e Rebase against f63ecaedc72f3580e7016ba71a480025e4d86e99. 2021-08-11 09:04:37 +10:00
Alistair Leslie-Hughes
82118b0d67 Rebase against 3f2850aeaa159270384764843cdb1dc3cbe902c6. 2021-08-06 09:55:38 +10:00
Alistair Leslie-Hughes
00985bf311 Removed patchset ntdll-aarch-TEB
As request on bug.
2021-08-04 09:53:18 +10:00
Alistair Leslie-Hughes
3c8c7910e7 Rebase against ccbb0eef7bcaae672e9f7f69d3a9cdce62574177. 2021-08-04 09:18:47 +10:00
Alistair Leslie-Hughes
069adfd1b0 Release v6.14 2021-07-31 12:05:20 +10:00
Zebediah Figura
c91c63a5da ntdll-Junction_Points: Updates from Erich E. Hoover.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50770
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51438
2021-07-30 18:44:16 -05:00
Alistair Leslie-Hughes
f7c80250ec Rebase against 10fb33026f2a55209dea0fb00caa279610027a0f. 2021-07-30 09:10:58 +10:00
Alistair Leslie-Hughes
b059114710 Updated nvcuda-CUDA_Support patchset 2021-07-29 09:46:04 +10:00
Alistair Leslie-Hughes
f27610e7e7 Rebase against 5dffe2263de41e76100ba0acd7c717267dc4c878. 2021-07-29 09:00:26 +10:00
Alistair Leslie-Hughes
9da0fe04d3 Rebase against 04d52eb83fa5c37cfe1100f435e36c2f78918338. 2021-07-28 08:40:53 +10:00
Alistair Leslie-Hughes
dc38777093 Rebase against a5f787ac445a682ea7ced5dd78c3516d4b8b9311. 2021-07-24 10:32:46 +10:00
Alistair Leslie-Hughes
b57bf86ec0 Updated mfplat-streaming-support patchset 2021-07-23 12:30:40 +10:00
Zebediah Figura
4e99d1b2a8 Rebase against c518a5362b925379b1a79e8323d60e19863effc1. 2021-07-22 17:41:21 -05:00
Alistair Leslie-Hughes
8ad669e434 Rebase against 384fc71a480b48443a6a899cbf3470dbf4fe2214. 2021-07-22 09:17:36 +10:00
Alistair Leslie-Hughes
52dd338148 Release v6.13 2021-07-21 09:59:17 +10:00
Alistair Leslie-Hughes
f841424edd Rebase against feb088b2247e1722b848ac0d67483596d33758ba. 2021-07-21 08:53:44 +10:00
Alistair Leslie-Hughes
5e8fbbf200 Rebase against d60c450c7be196c2072f74e34f7760d39e3bad32. 2021-07-20 11:27:20 +10:00
Alistair Leslie-Hughes
183fd3e089 Updated winepulse-PulseAudio_Support patchset 2021-07-18 11:55:05 +10:00
Alistair Leslie-Hughes
092f3b1ed1 Rebase against 49cde0995827b24aa9c1ef1b6a0372797f4166e0. 2021-07-10 17:14:03 +10:00
Alistair Leslie-Hughes
e59eb7639a Rebase against 6763ed84cf0629dd7d1495263e1e3ea9aaf3d663. 2021-07-08 11:16:34 +10:00
Alistair Leslie-Hughes
a0716c9cfe Rebase against adffa11609093c3c21cf43970bbecda1b2c43eb1. 2021-07-07 12:21:45 +10:00
Alistair Leslie-Hughes
fcf7b80107 Rebase against 14f03e84d46dbd94ae2e3711687420f816dc784f. 2021-07-06 09:05:43 +10:00
Alistair Leslie-Hughes
163f74fe61 Updated ws2_32-connect-already-connected patchset 2021-07-03 22:22:11 +10:00
Alistair Leslie-Hughes
ce643e9d2a Release v6.12 2021-07-03 18:38:59 +10:00
Alistair Leslie-Hughes
f18cff9e7a Updated ws2_32-connect-already-connected patchset 2021-07-03 17:19:37 +10:00
Alistair Leslie-Hughes
f5fe9c0c89 Added winemac.drv-no-flicker-patch patchset 2021-07-02 13:11:39 +10:00
Alistair Leslie-Hughes
c6e832ee03 Added ws2_32-connect-already-connected patchset 2021-07-02 13:10:36 +10:00
Zebediah Figura
a7ae280480 Rebase against 52ba1b498a9694daf804c9aea99c788bb4e753a3. 2021-07-01 16:56:20 -05:00
Zebediah Figura
8988a92bee Rebase against 0ec555e58ea9d5b33f4c825e96965ad0cb15d00f. 2021-06-30 17:34:42 -05:00
Zebediah Figura
260734214e Rebase against 7f1623bc626d3ca2411c1a3088512d8ef461252b. 2021-06-29 18:39:35 -05:00
Zebediah Figura
1a3b158f0b Rebase against 362eed3ae30e17da64888407140334925499071c. 2021-06-28 21:09:56 -05:00
Alistair Leslie-Hughes
1af6d6980c Updated mfplat-streaming-support patchset 2021-06-28 15:12:28 +10:00
Zebediah Figura
1c9c21dc1c Rebase against 542175ab10420953920779f3c64eb310dd3aa258. 2021-06-26 12:20:36 -05:00
Alistair Leslie-Hughes
0dd44a250f Rebase against ad03df1222c2bb22e991641dcc0d9e4ed684158b. 2021-06-24 11:10:07 +10:00
Alistair Leslie-Hughes
9bf50b7e1f Updated mfplat-streaming-support patchset 2021-06-22 15:33:24 +10:00
Alistair Leslie-Hughes
9c8608eea6 Rebase against 5c756468656afc9207c0f51f774bbc29267e1469. 2021-06-22 09:06:59 +10:00
Zebediah Figura
fd5866f6f1 server-default_integrity: Remove the NOCLOBBER flag from EnableLUA.
Otherwise old prefixes will never get changed (cf. [1] for why this is a bad
thing). I don't think there's any reason the user should be manually modifying
this; in theory it's configurable but in practice there's no way to ask the
user to enter credentials.

[1] https://bugs.winehq.org/show_bug.cgi?id=40613#c39
2021-06-19 11:21:22 -05:00
Alistair Leslie-Hughes
432c0b5a83 Release v6.11 2021-06-19 12:46:42 +10:00
Alistair Leslie-Hughes
5d26dfaa93 Rebase against c82c5e96a9eb13bfa1fef95fb7467ce17624a341. 2021-06-18 11:13:24 +10:00
Alistair Leslie-Hughes
876024f44f Rebase against afd5550b07f6d55e56738f61d829085d6bc82888. 2021-06-17 10:06:41 +10:00
Alistair Leslie-Hughes
c933b26cb6 Rebase against 619bd1867ac650aa664327765a8ec7fbdeaa73d8. 2021-06-16 07:59:02 +10:00
Alistair Leslie-Hughes
eeec769eeb Rebase against 25271032dfb3f126a8b0dff2adb9b96a7d09241d. 2021-06-15 08:05:55 +10:00
Zebediah Figura
e3cca687be Rebase against f5bd0be6a44c1c7d69afb8b8eb6311923e7762a1. 2021-06-12 01:46:29 -05:00
Alistair Leslie-Hughes
08912e4896 Rebase against 2a505efb1ca14f33503657eb070de6edd484b4f3. 2021-06-10 10:07:27 +10:00
Alistair Leslie-Hughes
daec2e3662 Fixed compile errors when building with -Werror
NOTE: Tests are skipped.
2021-06-08 12:21:21 +10:00
Alistair Leslie-Hughes
8a3554ad85 Release v6.10 2021-06-05 15:36:11 +10:00
Alistair Leslie-Hughes
1fc93d6e9f Added dpnet-Server-EnumServiceProviders patchset 2021-06-05 13:17:28 +10:00
Alistair Leslie-Hughes
799d451409 Added api-ms-win-core-psapi-K32GetModuleInformation patchset 2021-06-05 12:58:08 +10:00
Alistair Leslie-Hughes
a534ddb0a0 Rebase against 649385e7d47091fa25b9114668075b06d2942e2f. 2021-06-05 10:46:23 +10:00
Zebediah Figura
3e16509e0e quartz-MediaSeeking_Positions: Remove patch set.
There is no reference for an application that needs this, and a quick test
shows that it is incorrect for both the base passthrough object and for every
filter we have that uses it.
2021-06-02 23:00:52 -05:00
Alistair Leslie-Hughes
06523ed0a0 Rebase against 0807b09cfa7f2446f7a69f99ff1006e88c9de60b. 2021-06-03 08:59:40 +10:00
Alistair Leslie-Hughes
0e6e23e1f9 Removed old windows.networking.connectivity patchset 2021-06-03 08:34:55 +10:00
Zebediah Figura
8790b8780f Rebase against 96030ce738aa20f85a5138ec7c231c19a086f019. 2021-06-01 19:05:12 -05:00
Zebediah Figura
44f10effff Rebase against 211da181c9140541ab7f7fcfa479367b3f7783eb. 2021-06-01 19:05:11 -05:00
Alistair Leslie-Hughes
73c8cb1002 Added windows.networking.connectivity-new-dll patchset 2021-06-01 14:09:59 +10:00
Alistair Leslie-Hughes
356d0d750c Added wbemdisp-ISWbemObject-Invoke patchset 2021-05-30 17:21:08 +10:00
Alistair Leslie-Hughes
9efac47eec Added wscript-support-d-u-switches patchset 2021-05-29 14:24:02 +10:00
Alistair Leslie-Hughes
2ebe0e23aa Rebase against 35180d368a94156cb77b09560b24d3af428b988b. 2021-05-29 13:53:27 +10:00
Zebediah Figura
d4e9192632 Rebase against ce151dd681fe5ee80daba96dce12e37d6846e152. 2021-05-27 17:10:15 -05:00
Zebediah Figura
d97f6a5faa Rebase against 9bc7d41080f5e6805154b9d52a765f2be5d37279. 2021-05-27 00:38:35 -05:00
Alistair Leslie-Hughes
34afd80e2e Rebase against 8ddff3f51faca2c0824e204a69f69e241fb93d15. 2021-05-26 10:17:35 +10:00
Zebediah Figura
69765f438b d3d11-Deferred_Context, wined3d-CSMT_Main: Fix data size calculation for block-based formats with unaligned size.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51172
2021-05-24 23:16:59 -05:00
Zebediah Figura
99d312740b Rebase against 94eb8d36461f6eb380b95e58629ad4871e5efef4. 2021-05-24 22:39:23 -05:00
Zebediah Figura
5bbe3e47a5 wined3d-CSMT_Main: Pass the right size to wined3d_device_context_require_space().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51172
2021-05-24 11:19:48 -05:00
378 changed files with 17910 additions and 15897 deletions

View File

@@ -0,0 +1,34 @@
From 5be4173b6c3e89b1d9267679cd392a7343088a52 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 09:10:37 +1000
Subject: [PATCH] ntdll: Avoid implicit cast of interface pointer.
---
dlls/ntdll/unix/virtual.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 34b332a613c..111c851b43b 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -3016,7 +3016,7 @@ NTSTATUS virtual_clear_tls_index( ULONG index )
server_enter_uninterrupted_section( &virtual_mutex, &sigset );
LIST_FOR_EACH_ENTRY( thread_data, &teb_list, struct ntdll_thread_data, entry )
{
- TEB *teb = CONTAINING_RECORD( thread_data, TEB, GdiTebBatch );
+ TEB *teb = CONTAINING_RECORD( (GDI_TEB_BATCH *)thread_data, TEB, GdiTebBatch );
#ifdef _WIN64
WOW_TEB *wow_teb = get_wow_teb( teb );
if (wow_teb) wow_teb->TlsSlots[index] = 0;
@@ -3034,7 +3034,7 @@ NTSTATUS virtual_clear_tls_index( ULONG index )
server_enter_uninterrupted_section( &virtual_mutex, &sigset );
LIST_FOR_EACH_ENTRY( thread_data, &teb_list, struct ntdll_thread_data, entry )
{
- TEB *teb = CONTAINING_RECORD( thread_data, TEB, GdiTebBatch );
+ TEB *teb = CONTAINING_RECORD( (GDI_TEB_BATCH *)thread_data, TEB, GdiTebBatch );
#ifdef _WIN64
WOW_TEB *wow_teb = get_wow_teb( teb );
if (wow_teb)
--
2.30.2

View File

@@ -0,0 +1,40 @@
From 7784b62bd2b64aabd6bfef9ef39ac4f3e8c55c77 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 08:56:40 +1000
Subject: [PATCH] bcrypt: Stop compile error when HAVE_GNUTLS_CIPHER_INIT not
defined
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
In file included from dlls/bcrypt/gnutls.c:1916:
include/windef.h:112:24: error: unknown type name va_list
112 | # define __ms_va_list va_list
| ^~~~~~~
include/winbase.h:2076:84: note: in expansion of macro __ms_va_list
2076 | WINBASEAPI DWORD WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,__ms_va_list*);
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/bcrypt/gnutls.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/bcrypt/gnutls.c b/dlls/bcrypt/gnutls.c
index 37a80bdc062..64825f5b99b 100644
--- a/dlls/bcrypt/gnutls.c
+++ b/dlls/bcrypt/gnutls.c
@@ -25,9 +25,10 @@
#include "config.h"
#include "wine/port.h"
+#include <stdarg.h>
+
#ifdef HAVE_GNUTLS_CIPHER_INIT
-#include <stdarg.h>
#include <assert.h>
#include <gnutls/gnutls.h>
#include <gnutls/crypto.h>
--
2.30.2

View File

@@ -0,0 +1,61 @@
From 281b0621aa872330ab61f927750deb0753417ec8 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 09:34:28 +1000
Subject: [PATCH] d3d10: Avoid implicit cast of interface pointer.
---
dlls/d3d10/effect.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 5a5f9f37e6d..c127cb2bd2d 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -131,7 +131,7 @@ static inline struct d3d10_effect_variable *impl_from_ID3D10EffectVariable(ID3D1
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectShaderVariable(ID3D10EffectShaderVariable *iface)
{
- return CONTAINING_RECORD(iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
+ return CONTAINING_RECORD((ID3D10EffectVariable*)iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
}
enum d3d10_effect_container_type
@@ -4969,7 +4969,7 @@ static void read_variable_array_from_buffer(struct d3d10_effect_variable *variab
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectScalarVariable(ID3D10EffectScalarVariable *iface)
{
- return CONTAINING_RECORD(iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
+ return CONTAINING_RECORD((ID3D10EffectVariable*)iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
}
static BOOL STDMETHODCALLTYPE d3d10_effect_scalar_variable_IsValid(ID3D10EffectScalarVariable *iface)
@@ -5305,7 +5305,7 @@ static const struct ID3D10EffectScalarVariableVtbl d3d10_effect_scalar_variable_
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectVectorVariable(ID3D10EffectVectorVariable *iface)
{
- return CONTAINING_RECORD(iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
+ return CONTAINING_RECORD((ID3D10EffectVariable*)iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
}
static BOOL STDMETHODCALLTYPE d3d10_effect_vector_variable_IsValid(ID3D10EffectVectorVariable *iface)
@@ -5792,7 +5792,7 @@ static void read_matrix_variable_array_from_buffer(struct d3d10_effect_variable
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectMatrixVariable(ID3D10EffectMatrixVariable *iface)
{
- return CONTAINING_RECORD(iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
+ return CONTAINING_RECORD((ID3D10EffectVariable*)iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
}
static BOOL STDMETHODCALLTYPE d3d10_effect_matrix_variable_IsValid(ID3D10EffectMatrixVariable *iface)
@@ -6315,7 +6315,7 @@ static void set_shader_resource_variable(ID3D10ShaderResourceView **src, ID3D10S
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectShaderResourceVariable(
ID3D10EffectShaderResourceVariable *iface)
{
- return CONTAINING_RECORD(iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
+ return CONTAINING_RECORD((ID3D10EffectVariable*)iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
}
static BOOL STDMETHODCALLTYPE d3d10_effect_shader_resource_variable_IsValid(ID3D10EffectShaderResourceVariable *iface)
--
2.33.0

View File

@@ -0,0 +1,34 @@
From dd8e8e98edf2f16a4fd4109cd283cf7949a3cb9b Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 09:39:56 +1000
Subject: [PATCH] d2d1: Avoid implicit cast of interface pointer.
---
dlls/d2d1/geometry.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c
index eb353669030..3e00edfd1b3 100644
--- a/dlls/d2d1/geometry.c
+++ b/dlls/d2d1/geometry.c
@@ -3615,7 +3615,7 @@ void d2d_path_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory
static inline struct d2d_geometry *impl_from_ID2D1EllipseGeometry(ID2D1EllipseGeometry *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_geometry, ID2D1Geometry_iface);
+ return CONTAINING_RECORD((ID2D1Geometry*)iface, struct d2d_geometry, ID2D1Geometry_iface);
}
static HRESULT STDMETHODCALLTYPE d2d_ellipse_geometry_QueryInterface(ID2D1EllipseGeometry *iface,
@@ -4237,7 +4237,7 @@ fail:
static inline struct d2d_geometry *impl_from_ID2D1RoundedRectangleGeometry(ID2D1RoundedRectangleGeometry *iface)
{
- return CONTAINING_RECORD(iface, struct d2d_geometry, ID2D1Geometry_iface);
+ return CONTAINING_RECORD((ID2D1Geometry*)iface, struct d2d_geometry, ID2D1Geometry_iface);
}
static HRESULT STDMETHODCALLTYPE d2d_rounded_rectangle_geometry_QueryInterface(ID2D1RoundedRectangleGeometry *iface,
--
2.30.2

View File

@@ -0,0 +1,25 @@
From f8ce184f72c416a1ce249afe313b698013e961b3 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 09:46:25 +1000
Subject: [PATCH] dxgi: Avoid implicit cast of interface pointer.
---
dlls/dxgi/output.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/dxgi/output.c b/dlls/dxgi/output.c
index f341388766c..64f87202741 100644
--- a/dlls/dxgi/output.c
+++ b/dlls/dxgi/output.c
@@ -711,7 +711,7 @@ struct dxgi_output *unsafe_impl_from_IDXGIOutput(IDXGIOutput *iface)
if (!iface)
return NULL;
assert(iface->lpVtbl == (IDXGIOutputVtbl *)&dxgi_output_vtbl);
- return CONTAINING_RECORD(iface, struct dxgi_output, IDXGIOutput6_iface);
+ return CONTAINING_RECORD((IDXGIOutput6*)iface, struct dxgi_output, IDXGIOutput6_iface);
}
static void dxgi_output_init(struct dxgi_output *output, unsigned int output_idx,
--
2.30.2

View File

@@ -0,0 +1,25 @@
From 272753daf4f20b7fe3c646eae4fd78f1b254c9a6 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 09:57:01 +1000
Subject: [PATCH] msctf: Avoid implicit cast of interface pointer.
---
dlls/msctf/range.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/msctf/range.c b/dlls/msctf/range.c
index 9690a0a15c4..e15123eeb89 100644
--- a/dlls/msctf/range.c
+++ b/dlls/msctf/range.c
@@ -54,7 +54,7 @@ static inline Range *impl_from_ITfRangeACP(ITfRangeACP *iface)
static Range *unsafe_impl_from_ITfRange(ITfRange *iface)
{
- return CONTAINING_RECORD(iface, Range, ITfRangeACP_iface);
+ return CONTAINING_RECORD((ITfRangeACP*)iface, Range, ITfRangeACP_iface);
}
static void Range_Destructor(Range *This)
--
2.30.2

View File

@@ -0,0 +1,39 @@
From f34ee38467781b2f7bae7e7f8a04a4210bf7d046 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 11:22:48 +1000
Subject: [PATCH] rpcrt4: Avoid implicit cast of interface pointer.
---
dlls/rpcrt4/ndr_marshall.c | 2 +-
dlls/rpcrt4/ndr_typelib.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c
index 764b304a047..58ea128e8a4 100644
--- a/dlls/rpcrt4/ndr_marshall.c
+++ b/dlls/rpcrt4/ndr_marshall.c
@@ -6999,7 +6999,7 @@ static unsigned char *WINAPI NdrContextHandleMarshall(
}
else
{
- NDR_SCONTEXT ctxt = CONTAINING_RECORD(pMemory, struct _NDR_SCONTEXT, userContext);
+ NDR_SCONTEXT ctxt = CONTAINING_RECORD((void * const*)pMemory, struct _NDR_SCONTEXT, userContext);
NDR_RUNDOWN rundown = pStubMsg->StubDesc->apfnNdrRundownRoutines[pFormat[2]];
NdrServerContextNewMarshall(pStubMsg, ctxt, rundown, pFormat);
}
diff --git a/dlls/rpcrt4/ndr_typelib.c b/dlls/rpcrt4/ndr_typelib.c
index f1f25885b75..126e8ec8766 100644
--- a/dlls/rpcrt4/ndr_typelib.c
+++ b/dlls/rpcrt4/ndr_typelib.c
@@ -1452,7 +1452,7 @@ struct typelib_stub
static ULONG WINAPI typelib_stub_Release(IRpcStubBuffer *iface)
{
- struct typelib_stub *stub = CONTAINING_RECORD(iface, struct typelib_stub, stub.stub_buffer);
+ struct typelib_stub *stub = CONTAINING_RECORD((CStdStubBuffer *)iface, struct typelib_stub, stub.stub_buffer);
ULONG refcount = InterlockedDecrement(&stub->stub.stub_buffer.RefCount);
TRACE("(%p) decreasing refs to %d\n", stub, refcount);
--
2.30.2

View File

@@ -0,0 +1,34 @@
From 4801b547b70654507cb8a25dcfd1efc862dcf467 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 11:38:46 +1000
Subject: [PATCH] wbemdisp: Avoid implicit cast of interface pointer.
---
dlls/wbemdisp/locator.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/wbemdisp/locator.c b/dlls/wbemdisp/locator.c
index e0a1872d38f..5bb2a187f2c 100644
--- a/dlls/wbemdisp/locator.c
+++ b/dlls/wbemdisp/locator.c
@@ -1751,7 +1751,7 @@ static struct object *unsafe_object_impl_from_IDispatch(IDispatch *iface)
FIXME( "External implementations are not supported.\n" );
return NULL;
}
- return CONTAINING_RECORD(iface, struct object, ISWbemObject_iface);
+ return CONTAINING_RECORD((ISWbemObject *)iface, struct object, ISWbemObject_iface);
}
static HRESULT SWbemObject_create( struct services *services, IWbemClassObject *wbem_object,
@@ -3587,7 +3587,7 @@ static struct namedvalueset *unsafe_valueset_impl_from_IDispatch(IDispatch *ifac
FIXME( "External implementations are not supported.\n" );
return NULL;
}
- return CONTAINING_RECORD(iface, struct namedvalueset, ISWbemNamedValueSet_iface);
+ return CONTAINING_RECORD((ISWbemNamedValueSet*)iface, struct namedvalueset, ISWbemNamedValueSet_iface);
}
HRESULT SWbemNamedValueSet_create( void **obj )
--
2.30.2

View File

@@ -1,15 +1,15 @@
From e51b05c3a9d03e4dd84a107a30841d95f8a519c3 Mon Sep 17 00:00:00 2001
From 916189d1cdf149f16867870121171e20f129da9f Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Thu, 2 Oct 2014 19:44:31 +0200
Subject: [PATCH] ntdll: Print a warning message specifying the wine-staging
branch name and version.
---
dlls/ntdll/loader.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
dlls/ntdll/loader.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index ee453700e51..c2d4b3c2f86 100644
index 3339596944a..1d435f88755 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -44,6 +44,7 @@ WINE_DECLARE_DEBUG_CHANNEL(relay);
@@ -20,7 +20,7 @@ index ee453700e51..c2d4b3c2f86 100644
#ifdef _WIN64
#define DEFAULT_SECURITY_COOKIE_64 (((ULONGLONG)0x00002b99 << 32) | 0x2ddfa232)
@@ -3307,6 +3308,7 @@ void WINAPI LdrShutdownProcess(void)
@@ -3373,6 +3374,7 @@ void WINAPI LdrShutdownProcess(void)
process_detach();
}
@@ -28,7 +28,7 @@ index ee453700e51..c2d4b3c2f86 100644
/******************************************************************
* RtlExitUserProcess (NTDLL.@)
@@ -3673,6 +3675,9 @@ static void init_wow64(void)
@@ -3783,6 +3785,9 @@ static void init_wow64( CONTEXT *context )
*/
void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR unknown3, ULONG_PTR unknown4 )
{
@@ -38,9 +38,9 @@ index ee453700e51..c2d4b3c2f86 100644
static int attach_done;
int i;
NTSTATUS status;
@@ -3753,6 +3758,17 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR
}
else wm = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
@@ -3869,6 +3874,16 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR
if (NtCurrentTeb()->WowTebOffset) init_wow64( context );
#endif
+ RtlInitUnicodeString( &staging_event_string, L"\\__wine_staging_warn_event" );
+ InitializeObjectAttributes( &staging_event_attr, &staging_event_string, OBJ_OPENIF, NULL, NULL );
@@ -51,7 +51,6 @@ index ee453700e51..c2d4b3c2f86 100644
+ }
+ else
+ WARN_(winediag)("wine-staging %s is a testing version containing experimental patches.\n", wine_get_version());
+
+
RtlAcquirePebLock();
InsertHeadList( &tls_links, &NtCurrentTeb()->TlsLinks );

View File

@@ -1,4 +1,4 @@
From 0e65ed108eb8bab24668f9a58c5757a3ad36104f Mon Sep 17 00:00:00 2001
From ffea83bdf88a4b7d35c2f9a7e1a773d3110b5771 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Tue, 12 Apr 2016 01:02:34 +0200
Subject: [PATCH] uiautomationcore: Add dll and stub some functions.
@@ -9,7 +9,7 @@ Subject: [PATCH] uiautomationcore: Add dll and stub some functions.
2 files changed, 48 insertions(+), 6 deletions(-)
diff --git a/dlls/uiautomationcore/Makefile.in b/dlls/uiautomationcore/Makefile.in
index 5c4acb232a4..412f1dbbe19 100644
index 71ea7b99c94..3e6c2d7688a 100644
--- a/dlls/uiautomationcore/Makefile.in
+++ b/dlls/uiautomationcore/Makefile.in
@@ -1,5 +1,6 @@
@@ -17,10 +17,10 @@ index 5c4acb232a4..412f1dbbe19 100644
IMPORTLIB = uiautomationcore
+IMPORTS = uuid
EXTRADLLFLAGS = -mno-cygwin -Wb,--prefer-native
EXTRADLLFLAGS = -Wb,--prefer-native
diff --git a/dlls/uiautomationcore/uia_main.c b/dlls/uiautomationcore/uia_main.c
index 42014af6035..61e165d83c0 100644
index 2dada95af80..a32ef552f15 100644
--- a/dlls/uiautomationcore/uia_main.c
+++ b/dlls/uiautomationcore/uia_main.c
@@ -1,4 +1,5 @@
@@ -121,5 +121,5 @@ index 42014af6035..61e165d83c0 100644
}
--
2.20.1
2.33.0

View File

@@ -1,4 +1,4 @@
From 6d925cb20409888ada3e469a2a09b1bfc726fa79 Mon Sep 17 00:00:00 2001
From 1768ecfc4a7181600df254069f02655fe4e5fa0b Mon Sep 17 00:00:00 2001
From: Derek Lesho <dlesho@codeweavers.com>
Date: Fri, 2 Oct 2020 11:29:24 -0500
Subject: [PATCH] bcrypt: Allow multiple backends to coexist.
@@ -8,17 +8,16 @@ Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
dlls/bcrypt/Makefile.in | 3 +-
dlls/bcrypt/bcrypt_internal.h | 3 +
dlls/bcrypt/gnutls.c | 32 ++++--
dlls/bcrypt/macos.c | 18 ++-
dlls/bcrypt/unixlib.c | 211 ++++++++++++++++++++++++++++++++++
5 files changed, 252 insertions(+), 15 deletions(-)
dlls/bcrypt/unixlib.c | 208 ++++++++++++++++++++++++++++++++++
4 files changed, 235 insertions(+), 11 deletions(-)
create mode 100644 dlls/bcrypt/unixlib.c
diff --git a/dlls/bcrypt/Makefile.in b/dlls/bcrypt/Makefile.in
index 24803fb2d7c..46a20d473dd 100644
index 63a731fa9d9..6dd3066d4a5 100644
--- a/dlls/bcrypt/Makefile.in
+++ b/dlls/bcrypt/Makefile.in
@@ -11,6 +11,7 @@ C_SRCS = \
macos.c \
@@ -8,6 +8,7 @@ C_SRCS = \
gnutls.c \
md2.c \
sha256.c \
- sha512.c
@@ -27,10 +26,10 @@ index 24803fb2d7c..46a20d473dd 100644
RC_SRCS = version.rc
diff --git a/dlls/bcrypt/bcrypt_internal.h b/dlls/bcrypt/bcrypt_internal.h
index eb136111509..3c7110d05f8 100644
index 61c367cae9d..d0697ed807e 100644
--- a/dlls/bcrypt/bcrypt_internal.h
+++ b/dlls/bcrypt/bcrypt_internal.h
@@ -218,4 +218,7 @@ struct key_funcs
@@ -219,4 +219,7 @@ struct key_funcs
NTSTATUS (CDECL *key_import_rsa)( struct key *, UCHAR *, ULONG );
};
@@ -39,10 +38,10 @@ index eb136111509..3c7110d05f8 100644
+
#endif /* __BCRYPT_INTERNAL_H */
diff --git a/dlls/bcrypt/gnutls.c b/dlls/bcrypt/gnutls.c
index 2f0c62bc6da..4a9dcf9de8a 100644
index 7b1bceda889..66845ffc8cf 100644
--- a/dlls/bcrypt/gnutls.c
+++ b/dlls/bcrypt/gnutls.c
@@ -372,9 +372,12 @@ fail:
@@ -373,9 +373,12 @@ fail:
static void gnutls_uninitialize(void)
{
@@ -58,7 +57,7 @@ index 2f0c62bc6da..4a9dcf9de8a 100644
}
struct buffer
@@ -1899,19 +1902,28 @@ static const struct key_funcs key_funcs =
@@ -1894,19 +1897,28 @@ static const struct key_funcs key_funcs =
key_import_rsa
};
@@ -94,42 +93,12 @@ index 2f0c62bc6da..4a9dcf9de8a 100644
+ return NULL;
+}
+#endif
diff --git a/dlls/bcrypt/macos.c b/dlls/bcrypt/macos.c
index 44906519cef..2a88aec8362 100644
--- a/dlls/bcrypt/macos.c
+++ b/dlls/bcrypt/macos.c
@@ -302,11 +302,21 @@ static const struct key_funcs key_funcs =
key_import_rsa
};
-NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out )
+struct key_funcs * macos_lib_init( DWORD reason )
{
- if (reason != DLL_PROCESS_ATTACH) return STATUS_SUCCESS;
- *(const struct key_funcs **)ptr_out = &key_funcs;
- return STATUS_SUCCESS;
+ if (reason != DLL_PROCESS_ATTACH) return NULL;
+ return &key_funcs;
}
+#else
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
+#include "windef.h"
+#include "winbase.h"
+#include "winternl.h"
+
+struct key_funcs * macos_lib_init( DWORD reason )
+{
+ return NULL;
+}
#endif
diff --git a/dlls/bcrypt/unixlib.c b/dlls/bcrypt/unixlib.c
new file mode 100644
index 00000000000..9cbb25f5740
index 00000000000..1937a8172a4
--- /dev/null
+++ b/dlls/bcrypt/unixlib.c
@@ -0,0 +1,211 @@
@@ -0,0 +1,208 @@
+#if 0
+#pragma makedep unix
+#endif
@@ -262,7 +231,7 @@ index 00000000000..9cbb25f5740
+}
+
+static NTSTATUS CDECL key_asymmetric_decrypt( struct key *key, UCHAR *input, ULONG input_len,
+ UCHAR *output, ULONG *output_len )
+ UCHAR *output, ULONG output_len, ULONG *ret)
+{
+ FIXME( "not implemented\n" );
+ return STATUS_NOT_IMPLEMENTED;
@@ -301,13 +270,10 @@ index 00000000000..9cbb25f5740
+NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out )
+{
+ struct key_funcs *gnutls_funcs = gnutls_lib_init(reason);
+ struct key_funcs *macos_funcs = macos_lib_init(reason);
+
+ if (reason == DLL_PROCESS_ATTACH)
+ {
+#define RESOLVE_FUNC(name) \
+ if (macos_funcs && macos_funcs->key_##name) \
+ key_funcs.key_##name = macos_funcs->key_##name; \
+ if (gnutls_funcs && gnutls_funcs->key_##name) \
+ key_funcs.key_##name = gnutls_funcs->key_##name;
+
@@ -342,5 +308,5 @@ index 00000000000..9cbb25f5740
+
+#endif
--
2.30.2
2.33.0

View File

@@ -1,4 +1,4 @@
From e2442f39015a5982bfd15479ee06d7163d36771d Mon Sep 17 00:00:00 2001
From 528d7188ba7d6e68622d1b4f95608e68f26e1852 Mon Sep 17 00:00:00 2001
From: Derek Lesho <dlesho@codeweavers.com>
Date: Fri, 2 Oct 2020 12:11:49 -0500
Subject: [PATCH] bcrypt: Implement BCryptSecretAgreement with libgcrypt.
@@ -11,17 +11,16 @@ Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
dlls/bcrypt/bcrypt_main.c | 55 ++++++-
dlls/bcrypt/gcrypt.c | 292 ++++++++++++++++++++++++++++++++++
dlls/bcrypt/gnutls.c | 3 +-
dlls/bcrypt/macos.c | 3 +-
dlls/bcrypt/tests/bcrypt.c | 2 +-
dlls/bcrypt/unixlib.c | 13 +-
9 files changed, 378 insertions(+), 9 deletions(-)
8 files changed, 376 insertions(+), 8 deletions(-)
create mode 100644 dlls/bcrypt/gcrypt.c
diff --git a/configure.ac b/configure.ac
index b6b8d49342f3..7c1c8a7ddaf4 100644
index f2401734035..b47f8d016e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,6 +46,7 @@ AC_ARG_WITH(faudio, AS_HELP_STRING([--without-faudio],[do not use FAudio (XAu
@@ -47,6 +47,7 @@ AC_ARG_WITH(faudio, AS_HELP_STRING([--without-faudio],[do not use FAudio (XAu
AC_ARG_WITH(float-abi, AS_HELP_STRING([--with-float-abi=abi],[specify the ABI (soft|softfp|hard) for ARM platforms]))
AC_ARG_WITH(fontconfig,AS_HELP_STRING([--without-fontconfig],[do not use fontconfig]))
AC_ARG_WITH(freetype, AS_HELP_STRING([--without-freetype],[do not use the FreeType library]))
@@ -29,7 +28,7 @@ index b6b8d49342f3..7c1c8a7ddaf4 100644
AC_ARG_WITH(gettext, AS_HELP_STRING([--without-gettext],[do not use gettext]))
AC_ARG_WITH(gettextpo, AS_HELP_STRING([--with-gettextpo],[use the GetTextPO library to rebuild po files]),
[if test "x$withval" = "xno"; then ac_cv_header_gettext_po_h=no; fi])
@@ -1989,6 +1990,19 @@ WINE_NOTICE_WITH(vkd3d,[test "x$ac_cv_lib_soname_vkd3d" = "x"],
@@ -1954,6 +1955,19 @@ WINE_NOTICE_WITH(vkd3d,[test "x$ac_cv_lib_soname_vkd3d" = "x"],
[vkd3d ${notice_platform}development files not found (or too old), Direct3D 12 won't be supported.])
test "x$ac_cv_lib_soname_vkd3d" != "x" || enable_d3d12=${enable_d3d12:-no}
@@ -50,22 +49,22 @@ index b6b8d49342f3..7c1c8a7ddaf4 100644
AC_SUBST(EXTRACFLAGS,"")
diff --git a/dlls/bcrypt/Makefile.in b/dlls/bcrypt/Makefile.in
index 46a20d473dd7..4a3016784af3 100644
index 6dd3066d4a5..5336c8fc66b 100644
--- a/dlls/bcrypt/Makefile.in
+++ b/dlls/bcrypt/Makefile.in
@@ -7,6 +7,7 @@ EXTRADLLFLAGS = -mno-cygwin
@@ -5,6 +5,7 @@ EXTRAINCL = $(GNUTLS_CFLAGS)
C_SRCS = \
bcrypt_main.c \
+ gcrypt.c \
gnutls.c \
macos.c \
md2.c \
sha256.c \
diff --git a/dlls/bcrypt/bcrypt_internal.h b/dlls/bcrypt/bcrypt_internal.h
index 3c7110d05f84..e7991eac077a 100644
index d0697ed807e..66898c58cd2 100644
--- a/dlls/bcrypt/bcrypt_internal.h
+++ b/dlls/bcrypt/bcrypt_internal.h
@@ -192,6 +192,8 @@ struct key
@@ -193,6 +193,8 @@ struct key
struct secret
{
struct object hdr;
@@ -74,7 +73,7 @@ index 3c7110d05f84..e7991eac077a 100644
};
struct key_funcs
@@ -216,9 +218,11 @@ struct key_funcs
@@ -217,9 +219,11 @@ struct key_funcs
NTSTATUS (CDECL *key_import_dsa_capi)( struct key *, UCHAR *, ULONG );
NTSTATUS (CDECL *key_import_ecc)( struct key *, UCHAR *, ULONG );
NTSTATUS (CDECL *key_import_rsa)( struct key *, UCHAR *, ULONG );
@@ -87,10 +86,10 @@ index 3c7110d05f84..e7991eac077a 100644
#endif /* __BCRYPT_INTERNAL_H */
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index a1423dcd8368..0655c5dcfe81 100644
index 5eb50cd616b..570f452d78e 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -1932,9 +1932,12 @@ NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE privatekey, BCRYPT_KEY_H
@@ -1925,9 +1925,12 @@ NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE privatekey, BCRYPT_KEY_H
{
struct key *privkey = privatekey;
struct key *pubkey = publickey;
@@ -104,7 +103,7 @@ index a1423dcd8368..0655c5dcfe81 100644
if (!privkey || privkey->hdr.magic != MAGIC_KEY) return STATUS_INVALID_HANDLE;
if (!pubkey || pubkey->hdr.magic != MAGIC_KEY) return STATUS_INVALID_HANDLE;
@@ -1943,18 +1946,39 @@ NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE privatekey, BCRYPT_KEY_H
@@ -1936,18 +1939,39 @@ NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE privatekey, BCRYPT_KEY_H
if (!(secret = heap_alloc_zero( sizeof(*secret) ))) return STATUS_NO_MEMORY;
secret->hdr.magic = MAGIC_SECRET;
@@ -146,7 +145,7 @@ index a1423dcd8368..0655c5dcfe81 100644
heap_free( secret );
return STATUS_SUCCESS;
}
@@ -1964,12 +1988,33 @@ NTSTATUS WINAPI BCryptDeriveKey(BCRYPT_SECRET_HANDLE handle, LPCWSTR kdf, BCrypt
@@ -1957,12 +1981,33 @@ NTSTATUS WINAPI BCryptDeriveKey(BCRYPT_SECRET_HANDLE handle, LPCWSTR kdf, BCrypt
{
struct secret *secret = handle;
@@ -184,7 +183,7 @@ index a1423dcd8368..0655c5dcfe81 100644
BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
diff --git a/dlls/bcrypt/gcrypt.c b/dlls/bcrypt/gcrypt.c
new file mode 100644
index 000000000000..e72c27feb519
index 00000000000..e72c27feb51
--- /dev/null
+++ b/dlls/bcrypt/gcrypt.c
@@ -0,0 +1,292 @@
@@ -481,10 +480,10 @@ index 000000000000..e72c27feb519
+}
+#endif
diff --git a/dlls/bcrypt/gnutls.c b/dlls/bcrypt/gnutls.c
index 9490ea8612a8..78d0f2d95966 100644
index 66845ffc8cf..64825f5b99b 100644
--- a/dlls/bcrypt/gnutls.c
+++ b/dlls/bcrypt/gnutls.c
@@ -1949,7 +1949,8 @@ static const struct key_funcs key_funcs =
@@ -1894,7 +1894,8 @@ static const struct key_funcs key_funcs =
key_export_ecc,
key_import_dsa_capi,
key_import_ecc,
@@ -494,25 +493,11 @@ index 9490ea8612a8..78d0f2d95966 100644
};
struct key_funcs * gnutls_lib_init( DWORD reason )
diff --git a/dlls/bcrypt/macos.c b/dlls/bcrypt/macos.c
index 2a88aec8362c..3ee3515f9de2 100644
--- a/dlls/bcrypt/macos.c
+++ b/dlls/bcrypt/macos.c
@@ -299,7 +299,8 @@ static const struct key_funcs key_funcs =
key_export_ecc,
key_import_dsa_capi,
key_import_ecc,
- key_import_rsa
+ key_import_rsa,
+ NULL
};
struct key_funcs * macos_lib_init( DWORD reason )
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
index 456727d04a96..6be406dee21f 100644
index fb5ac03b039..894473d5346 100644
--- a/dlls/bcrypt/tests/bcrypt.c
+++ b/dlls/bcrypt/tests/bcrypt.c
@@ -2163,7 +2163,7 @@ static void test_ECDH(void)
@@ -2248,7 +2248,7 @@ static void test_ECDH(void)
goto raw_secret_end;
}
@@ -522,7 +507,7 @@ index 456727d04a96..6be406dee21f 100644
if (status != STATUS_SUCCESS)
{
diff --git a/dlls/bcrypt/unixlib.c b/dlls/bcrypt/unixlib.c
index 9cbb25f5740c..6f8ff7f97887 100644
index 1937a8172a4..e684a608eb5 100644
--- a/dlls/bcrypt/unixlib.c
+++ b/dlls/bcrypt/unixlib.c
@@ -142,6 +142,12 @@ static NTSTATUS CDECL key_import_rsa( struct key *key, UCHAR *input, ULONG input
@@ -538,7 +523,7 @@ index 9cbb25f5740c..6f8ff7f97887 100644
static struct key_funcs key_funcs =
{
key_set_property,
@@ -164,12 +170,14 @@ static struct key_funcs key_funcs =
@@ -164,17 +170,21 @@ static struct key_funcs key_funcs =
key_import_dsa_capi,
key_import_ecc,
key_import_rsa,
@@ -548,14 +533,11 @@ index 9cbb25f5740c..6f8ff7f97887 100644
NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out )
{
struct key_funcs *gnutls_funcs = gnutls_lib_init(reason);
struct key_funcs *macos_funcs = macos_lib_init(reason);
+ struct key_funcs *gcrypt_funcs = gcrypt_lib_init(reason);
if (reason == DLL_PROCESS_ATTACH)
{
@@ -177,7 +185,9 @@ NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *p
if (macos_funcs && macos_funcs->key_##name) \
key_funcs.key_##name = macos_funcs->key_##name; \
#define RESOLVE_FUNC(name) \
if (gnutls_funcs && gnutls_funcs->key_##name) \
- key_funcs.key_##name = gnutls_funcs->key_##name;
+ key_funcs.key_##name = gnutls_funcs->key_##name; \
@@ -564,7 +546,7 @@ index 9cbb25f5740c..6f8ff7f97887 100644
RESOLVE_FUNC(set_property)
RESOLVE_FUNC(symmetric_init)
@@ -199,6 +209,7 @@ NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *p
@@ -196,6 +206,7 @@ NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *p
RESOLVE_FUNC(import_dsa_capi)
RESOLVE_FUNC(import_ecc)
RESOLVE_FUNC(import_rsa)
@@ -573,5 +555,5 @@ index 9cbb25f5740c..6f8ff7f97887 100644
#undef RESOLVE_FUNC
--
2.29.2
2.33.0

View File

@@ -2,3 +2,5 @@ Fixes: [47699] Multiple games fail to connect to online services (missing BCrypt
# Needs to be moved to the unix lib, but that's a nontrivial amount of work, and
# using gcrypt is the wrong way forward (we should expose the missing APIs from
# gnutls instead).
# Temporarily disabled pending a rebase from author.
Disabled: true

View File

@@ -1,4 +1,4 @@
From 50bd67fb1fd718eaaf9f5600fba7ab86e4b71a76 Mon Sep 17 00:00:00 2001
From a5045503cf3310058cc64814ff9626f4877a13bb Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 5 Jul 2019 13:20:23 +0800
Subject: [PATCH] cryptext: Implement CryptExtOpenCER.
@@ -17,10 +17,10 @@ Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
create mode 100644 dlls/cryptext/tests/cryptext.c
diff --git a/configure b/configure
index 2b20133cd65..f3ef3aef3a9 100755
index db592f0868d..ba13abacc46 100755
--- a/configure
+++ b/configure
@@ -20350,6 +20350,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests
@@ -20291,6 +20291,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests
wine_fn_config_makefile dlls/cryptdlg enable_cryptdlg
wine_fn_config_makefile dlls/cryptdll enable_cryptdll
wine_fn_config_makefile dlls/cryptext enable_cryptext
@@ -29,10 +29,10 @@ index 2b20133cd65..f3ef3aef3a9 100755
wine_fn_config_makefile dlls/cryptnet/tests enable_tests
wine_fn_config_makefile dlls/cryptsp enable_cryptsp
diff --git a/configure.ac b/configure.ac
index 24f5c8847d6..f71fb6f401d 100644
index d449b88fb19..af75e0e80ab 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3083,6 +3083,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
@@ -3029,6 +3029,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
WINE_CONFIG_MAKEFILE(dlls/cryptdlg)
WINE_CONFIG_MAKEFILE(dlls/cryptdll)
WINE_CONFIG_MAKEFILE(dlls/cryptext)
@@ -41,7 +41,7 @@ index 24f5c8847d6..f71fb6f401d 100644
WINE_CONFIG_MAKEFILE(dlls/cryptnet/tests)
WINE_CONFIG_MAKEFILE(dlls/cryptsp)
diff --git a/dlls/cryptext/Makefile.in b/dlls/cryptext/Makefile.in
index 3acce60ae88..590074a806f 100644
index 0ec2b8a2045..76accca43eb 100644
--- a/dlls/cryptext/Makefile.in
+++ b/dlls/cryptext/Makefile.in
@@ -1,4 +1,5 @@
@@ -49,10 +49,10 @@ index 3acce60ae88..590074a806f 100644
+MODULE = cryptext.dll
+IMPORTS = crypt32 cryptui user32
EXTRADLLFLAGS = -mno-cygwin -Wb,--prefer-native
EXTRADLLFLAGS = -Wb,--prefer-native
diff --git a/dlls/cryptext/cryptext.spec b/dlls/cryptext/cryptext.spec
index 0dba38e3934..911ab2f4ba4 100644
index ee3e155f457..24b4794c198 100644
--- a/dlls/cryptext/cryptext.spec
+++ b/dlls/cryptext/cryptext.spec
@@ -12,8 +12,8 @@
@@ -227,5 +227,5 @@ index 00000000000..cc62a772b59
+ test_CryptExtOpenCER();
+}
--
2.20.1
2.33.0

View File

@@ -1,34 +0,0 @@
From 29866a3cb6dc799b060565d94608c7b25bd26509 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 21 May 2021 23:44:39 -0500
Subject: [PATCH] d3d11/tests: Add a couple of extra tests for SRV/RTV
conflict.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/d3d11/tests/d3d11.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 47c6613d904..5ab08632367 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -32364,6 +32364,15 @@ static void test_deferred_context_state(void)
ID3D11DeviceContext_PSGetShaderResources(deferred, 0, 1, &ret_srv);
ok(!ret_srv, "Got unexpected SRV %p.\n", ret_srv);
+ ID3D11DeviceContext_PSSetShaderResources(deferred, 0, 1, &srv);
+ ID3D11DeviceContext_PSGetShaderResources(deferred, 0, 1, &ret_srv);
+ ok(!ret_srv, "Got unexpected SRV %p.\n", ret_srv);
+
+ ID3D11DeviceContext_PSSetShaderResources(immediate, 0, 1, &srv);
+ ID3D11DeviceContext_PSGetShaderResources(immediate, 0, 1, &ret_srv);
+ ok(ret_srv == srv, "Got unexpected SRV %p.\n", ret_srv);
+ ID3D11ShaderResourceView_Release(ret_srv);
+
ID3D11ShaderResourceView_Release(srv);
ID3D11RenderTargetView_Release(rtv);
ID3D11Texture2D_Release(texture);
--
2.30.2

View File

@@ -1,286 +0,0 @@
From bca2466f49202f638339644f9c92b3573b719822 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sat, 22 May 2021 00:27:53 -0500
Subject: [PATCH] wined3d: Check for SRV/RTV binding conflicts per
wined3d_state.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/wined3d/context.c | 19 ++++-
dlls/wined3d/device.c | 23 ++++--
dlls/wined3d/resource.c | 1 -
dlls/wined3d/wined3d_private.h | 125 +++++++--------------------------
4 files changed, 61 insertions(+), 107 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 2debf50de7f..7f50126204b 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -335,6 +335,23 @@ void context_update_stream_info(struct wined3d_context *context, const struct wi
}
}
+static bool is_resource_rtv_bound(const struct wined3d_state *state,
+ const struct wined3d_resource *resource)
+{
+ unsigned int i;
+
+ if (!resource->rtv_bind_count_device)
+ return false;
+
+ for (i = 0; i < ARRAY_SIZE(state->fb.render_targets); ++i)
+ {
+ if (state->fb.render_targets[i] && state->fb.render_targets[i]->resource == resource)
+ return true;
+ }
+
+ return false;
+}
+
/* Context activation is done by the caller. */
static void context_preload_texture(struct wined3d_context *context,
const struct wined3d_state *state, unsigned int idx)
@@ -344,7 +361,7 @@ static void context_preload_texture(struct wined3d_context *context,
if (!(texture = state->textures[idx]))
return;
- if ((texture->resource.rtv_full_bind_count_device + texture->resource.rtv_partial_bind_count_device)
+ if (is_resource_rtv_bound(state, &texture->resource)
|| (state->fb.depth_stencil && state->fb.depth_stencil->resource == &texture->resource))
context->uses_fbo_attached_resources = 1;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index dbb5dcf2672..2c8ebba8844 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1985,7 +1985,7 @@ void CDECL wined3d_device_context_set_shader_resource_view(struct wined3d_device
if (view == prev)
return;
- if (view && (wined3d_is_srv_rtv_bound(view)
+ if (view && (wined3d_is_srv_rtv_bound(state, view)
|| ((dsv = state->fb.depth_stencil)
&& dsv->resource == view->resource && wined3d_dsv_srv_conflict(dsv, view->format))))
{
@@ -2064,22 +2064,31 @@ void CDECL wined3d_device_context_set_unordered_access_view(struct wined3d_devic
static void wined3d_device_context_unbind_srv_for_rtv(struct wined3d_device_context *context,
const struct wined3d_rendertarget_view *view, BOOL dsv)
{
- struct wined3d_state *state = context->state;
+ const struct wined3d_state *state = context->state;
+ const struct wined3d_resource *resource;
- if (view && wined3d_is_rtv_srv_bound(view))
+ if (!view)
+ return;
+ resource = view->resource;
+
+ if (resource->srv_bind_count_device)
{
- const struct wined3d_resource *resource = view->resource;
const struct wined3d_shader_resource_view *srv;
unsigned int i, j;
- WARN("Application sets bound resource as render target.\n");
-
for (i = 0; i < WINED3D_SHADER_TYPE_COUNT; ++i)
+ {
for (j = 0; j < MAX_SHADER_RESOURCE_VIEWS; ++j)
+ {
if ((srv = state->shader_resource_view[i][j]) && srv->resource == resource
- && ((!dsv && wined3d_is_srv_rtv_bound(srv))
+ && ((!dsv && wined3d_is_srv_rtv_bound(state, srv))
|| (dsv && wined3d_dsv_srv_conflict(view, srv->format))))
+ {
+ WARN("Application sets bound resource as render target.\n");
wined3d_device_context_set_shader_resource_view(context, i, j, NULL);
+ }
+ }
+ }
}
}
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 6e34605f547..58e3e5c77fd 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -235,7 +235,6 @@ static void wined3d_resource_destroy_object(void *object)
TRACE("resource %p.\n", resource);
- heap_free(resource->sub_resource_bind_counts_device);
wined3d_resource_free_sysmem(resource);
context_resource_released(resource->device, resource);
wined3d_resource_release(resource);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 4c308d2ac05..fadad706af4 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4084,16 +4084,8 @@ struct wined3d_resource
struct list resource_list_entry;
- struct
- {
- uint32_t srv;
- uint32_t rtv;
- }
- *sub_resource_bind_counts_device;
- uint32_t srv_full_bind_count_device;
- uint32_t rtv_full_bind_count_device;
- uint32_t srv_partial_bind_count_device;
- uint32_t rtv_partial_bind_count_device;
+ uint32_t srv_bind_count_device;
+ uint32_t rtv_bind_count_device;
};
static inline ULONG wined3d_resource_incref(struct wined3d_resource *resource)
@@ -6214,120 +6206,57 @@ static inline bool wined3d_rtv_all_subresources(const struct wined3d_rendertarge
return texture->level_count == 1 && rtv->layer_count == wined3d_bind_layer_count(texture);
}
-static inline void wined3d_srv_bind_count_add(struct wined3d_shader_resource_view *srv, int value)
-{
- struct wined3d_resource *resource = srv->resource;
- struct wined3d_texture *texture;
- unsigned int level, layer;
-
- if (wined3d_srv_all_subresources(srv))
- {
- resource->srv_full_bind_count_device += value;
- return;
- }
-
- resource->srv_partial_bind_count_device += value;
-
- texture = texture_from_resource(resource);
-
- if (!resource->sub_resource_bind_counts_device
- && !(resource->sub_resource_bind_counts_device = heap_alloc_zero(texture->level_count
- * wined3d_bind_layer_count(texture) * sizeof(*resource->sub_resource_bind_counts_device))))
- return;
-
- for (layer = 0; layer < srv->desc.u.texture.layer_count; ++layer)
- for (level = 0; level < srv->desc.u.texture.level_count; ++level)
- resource->sub_resource_bind_counts_device[(layer + srv->desc.u.texture.layer_idx)
- * texture->level_count + srv->desc.u.texture.level_idx + level].srv += value;
-}
-
static inline void wined3d_srv_bind_count_inc(struct wined3d_shader_resource_view *srv)
{
- wined3d_srv_bind_count_add(srv, 1);
+ ++srv->resource->srv_bind_count_device;
}
static inline void wined3d_srv_bind_count_dec(struct wined3d_shader_resource_view *srv)
{
- wined3d_srv_bind_count_add(srv, -1);
-}
-
-static inline void wined3d_rtv_bind_count_add(struct wined3d_rendertarget_view *rtv, int value)
-{
- struct wined3d_resource *resource = rtv->resource;
- struct wined3d_texture *texture;
- unsigned int layer;
-
- if (wined3d_rtv_all_subresources(rtv))
- {
- resource->rtv_full_bind_count_device += value;
- return;
- }
-
- resource->rtv_partial_bind_count_device += value;
-
- texture = texture_from_resource(resource);
-
- if (!resource->sub_resource_bind_counts_device
- && !(resource->sub_resource_bind_counts_device = heap_alloc_zero(texture->level_count
- * wined3d_bind_layer_count(texture) * sizeof(*resource->sub_resource_bind_counts_device))))
- return;
-
- for (layer = 0; layer < rtv->layer_count; ++layer)
- resource->sub_resource_bind_counts_device[rtv->sub_resource_idx + layer * texture->level_count].rtv += value;
+ --srv->resource->srv_bind_count_device;
}
static inline void wined3d_rtv_bind_count_inc(struct wined3d_rendertarget_view *rtv)
{
- wined3d_rtv_bind_count_add(rtv, 1);
+ ++rtv->resource->rtv_bind_count_device;
}
static inline void wined3d_rtv_bind_count_dec(struct wined3d_rendertarget_view *rtv)
{
- wined3d_rtv_bind_count_add(rtv, -1);
+ --rtv->resource->rtv_bind_count_device;
}
-static inline bool wined3d_is_srv_rtv_bound(const struct wined3d_shader_resource_view *srv)
+static inline bool wined3d_rtv_overlaps_srv(const struct wined3d_rendertarget_view *rtv,
+ const struct wined3d_shader_resource_view *srv)
{
- struct wined3d_resource *resource = srv->resource;
- struct wined3d_texture *texture;
- unsigned int level, layer;
+ if (rtv->resource != srv->resource)
+ return false;
- if (!(resource->rtv_full_bind_count_device + resource->rtv_partial_bind_count_device))
- return FALSE;
+ if (wined3d_srv_all_subresources(srv) || wined3d_rtv_all_subresources(rtv))
+ return true;
- if (resource->rtv_full_bind_count_device || wined3d_srv_all_subresources(srv))
- return TRUE;
-
- texture = texture_from_resource(resource);
-
- for (layer = 0; layer < srv->desc.u.texture.layer_count; ++layer)
- for (level = 0; level < srv->desc.u.texture.level_count; ++level)
- if (resource->sub_resource_bind_counts_device[(layer + srv->desc.u.texture.layer_idx)
- * texture->level_count + srv->desc.u.texture.level_idx + level].rtv)
- return TRUE;
-
- return FALSE;
+ return rtv->sub_resource_idx >= srv->desc.u.texture.level_idx
+ && rtv->sub_resource_idx < srv->desc.u.texture.level_idx + srv->desc.u.texture.level_count
+ && rtv->layer_count >= srv->desc.u.texture.layer_idx;
}
-static inline bool wined3d_is_rtv_srv_bound(const struct wined3d_rendertarget_view *rtv)
+static inline bool wined3d_is_srv_rtv_bound(const struct wined3d_state *state,
+ const struct wined3d_shader_resource_view *srv)
{
- struct wined3d_resource *resource = rtv->resource;
- struct wined3d_texture *texture;
- unsigned int layer;
+ unsigned int i;
- if (!(resource->srv_full_bind_count_device + resource->srv_partial_bind_count_device))
- return FALSE;
+ if (!srv->resource->rtv_bind_count_device)
+ return false;
- if (resource->srv_full_bind_count_device || wined3d_rtv_all_subresources(rtv))
- return TRUE;
+ for (i = 0; i < ARRAY_SIZE(state->fb.render_targets); ++i)
+ {
+ const struct wined3d_rendertarget_view *rtv;
- texture = texture_from_resource(resource);
+ if ((rtv = state->fb.render_targets[i]) && wined3d_rtv_overlaps_srv(rtv, srv))
+ return true;
+ }
- for (layer = 0; layer < rtv->layer_count; ++layer)
- if (resource->sub_resource_bind_counts_device[rtv->sub_resource_idx + layer * texture->level_count].srv)
- return TRUE;
-
- return FALSE;
+ return false;
}
static inline void wined3d_viewport_get_z_range(const struct wined3d_viewport *vp, float *min_z, float *max_z)
--
2.30.2

View File

@@ -1,270 +0,0 @@
From d591728c209f7fd9e438eebfb3977692d13bbd6b Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Tue, 18 May 2021 21:42:01 -0500
Subject: [PATCH] d3d11/tests: Add some tests for Map() on deferred contexts.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/d3d11/tests/d3d11.c | 239 +++++++++++++++++++++++++++++++++++++++
1 file changed, 239 insertions(+)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 5ab08632367..e5d46f445a4 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -32706,6 +32706,244 @@ static void test_deferred_context_rendering(void)
release_test_context(&test_context);
}
+static void test_deferred_context_map(void)
+{
+ ID3D11DeviceContext *immediate, *deferred;
+ struct d3d11_test_context test_context;
+ D3D11_SUBRESOURCE_DATA resource_data;
+ D3D11_BUFFER_DESC buffer_desc = {0};
+ D3D11_MAPPED_SUBRESOURCE map_desc;
+ ID3D11Buffer *buffer, *buffer2;
+ struct resource_readback rb;
+ ID3D11CommandList *list;
+ float data[16], value;
+ ID3D11Device *device;
+ float *map_data;
+ unsigned int i;
+ HRESULT hr;
+
+ if (!init_test_context(&test_context, NULL))
+ return;
+
+ device = test_context.device;
+ immediate = test_context.immediate_context;
+
+ hr = ID3D11Device_CreateDeferredContext(device, 0, &deferred);
+ todo_wine ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
+ if (hr != S_OK)
+ {
+ release_test_context(&test_context);
+ return;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ data[i] = i;
+ resource_data.pSysMem = data;
+ resource_data.SysMemPitch = 0;
+ resource_data.SysMemSlicePitch = 0;
+
+ buffer_desc.ByteWidth = sizeof(data);
+ buffer_desc.Usage = D3D11_USAGE_DYNAMIC;
+ buffer_desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
+ buffer_desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ hr = ID3D11Device_CreateBuffer(device, &buffer_desc, &resource_data, &buffer);
+ ok(hr == S_OK, "Failed to create buffer, hr %#x.\n", hr);
+ hr = ID3D11Device_CreateBuffer(device, &buffer_desc, &resource_data, &buffer2);
+ ok(hr == S_OK, "Failed to create buffer, hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_READ, 0, &map_desc);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_READ_WRITE, 0, &map_desc);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE, 0, &map_desc);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &map_desc);
+ ok(hr == D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ map_data = map_desc.pData;
+ /* The previous contents of map_data are undefined and may in practice be
+ * uninitialized garbage. */
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ map_data[i] = 2 * i;
+
+ ID3D11DeviceContext_Unmap(deferred, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ map_data[i] = 2 * i;
+ ID3D11DeviceContext_Unmap(deferred, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_FinishCommandList(deferred, FALSE, &list);
+ ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11DeviceContext_ExecuteCommandList(immediate, list, TRUE);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == 2 * i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11CommandList_Release(list);
+
+ /* Test WRITE_NO_OVERWRITE. */
+
+ hr = ID3D11DeviceContext_Map(immediate, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ map_data[i] = i;
+ ID3D11DeviceContext_Unmap(immediate, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &map_desc);
+ ok(hr == D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ map_data[i] = 2 * i;
+ ID3D11DeviceContext_Unmap(deferred, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_READ, 0, &map_desc);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_READ_WRITE, 0, &map_desc);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE, 0, &map_desc);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ ok(map_data[i] == 2 * i, "Got unexpected value %.8e at %u.\n", map_data[i], i);
+ if (i % 2)
+ map_data[i] = 3 * i;
+ }
+ memcpy(data, map_data, sizeof(data));
+
+ ID3D11DeviceContext_Unmap(deferred, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ ok(map_data[i] == data[i], "Got unexpected value %.8e at %u.\n", map_data[i], i);
+ if (i % 3)
+ map_data[i] = 4 * i;
+ }
+ memcpy(data, map_data, sizeof(data));
+
+ ID3D11DeviceContext_Unmap(deferred, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_FinishCommandList(deferred, FALSE, &list);
+ ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11DeviceContext_ExecuteCommandList(immediate, list, TRUE);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == data[i], "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11CommandList_Release(list);
+
+ /* Do something with the mapped data from within the deferred context. */
+
+ hr = ID3D11DeviceContext_Map(immediate, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ map_data[i] = i;
+ ID3D11DeviceContext_Unmap(immediate, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ map_data[i] = 2 * i;
+ ID3D11DeviceContext_Unmap(deferred, (ID3D11Resource *)buffer, 0);
+
+ ID3D11DeviceContext_CopyResource(deferred, (ID3D11Resource *)buffer2, (ID3D11Resource *)buffer);
+
+ hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
+ ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ map_data = map_desc.pData;
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ map_data[i] = 3 * i;
+ ID3D11DeviceContext_Unmap(deferred, (ID3D11Resource *)buffer, 0);
+
+ hr = ID3D11DeviceContext_FinishCommandList(deferred, FALSE, &list);
+ ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11DeviceContext_ExecuteCommandList(immediate, list, TRUE);
+
+ get_buffer_readback(buffer2, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == 2 * i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == 3 * i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11CommandList_Release(list);
+
+ ID3D11Buffer_Release(buffer2);
+ ID3D11Buffer_Release(buffer);
+ ID3D11DeviceContext_Release(deferred);
+ release_test_context(&test_context);
+}
+
START_TEST(d3d11)
{
unsigned int argc, i;
@@ -32876,6 +33114,7 @@ START_TEST(d3d11)
queue_test(test_deferred_context_state);
queue_test(test_deferred_context_swap_state);
queue_test(test_deferred_context_rendering);
+ queue_test(test_deferred_context_map);
queue_test(test_unbound_streams);
run_queued_tests();
--
2.30.2

View File

@@ -1,70 +0,0 @@
From 621c0b6f10a09dd7300caa8870015a931d338e85 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 21 May 2021 22:17:30 -0500
Subject: [PATCH] d3d11/tests: Add some tests for UpdateSubresource() on a
deferred context.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/d3d11/tests/d3d11.c | 45 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index e5d46f445a4..0f5ba6c3663 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -32940,6 +32940,51 @@ static void test_deferred_context_map(void)
ID3D11Buffer_Release(buffer2);
ID3D11Buffer_Release(buffer);
+
+ /* Test UpdateSubresource. */
+
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ data[i] = i;
+
+ buffer_desc.ByteWidth = sizeof(data);
+ buffer_desc.Usage = D3D11_USAGE_DEFAULT;
+ buffer_desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
+ buffer_desc.CPUAccessFlags = 0;
+ hr = ID3D11Device_CreateBuffer(device, &buffer_desc, &resource_data, &buffer);
+ ok(hr == S_OK, "Failed to create buffer, hr %#x.\n", hr);
+ hr = ID3D11Device_CreateBuffer(device, &buffer_desc, &resource_data, &buffer2);
+ ok(hr == S_OK, "Failed to create buffer, hr %#x.\n", hr);
+
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ data[i] = 2 * i;
+ ID3D11DeviceContext_UpdateSubresource(deferred, (ID3D11Resource *)buffer, 0, NULL, data, 0, 0);
+
+ hr = ID3D11DeviceContext_FinishCommandList(deferred, FALSE, &list);
+ ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11DeviceContext_ExecuteCommandList(immediate, list, TRUE);
+
+ get_buffer_readback(buffer, &rb);
+ for (i = 0; i < ARRAY_SIZE(data); ++i)
+ {
+ value = get_readback_float(&rb, i, 0);
+ ok(value == 2 * i, "Got unexpected value %.8e at %u.\n", value, i);
+ }
+ release_resource_readback(&rb);
+
+ ID3D11CommandList_Release(list);
+
+ ID3D11Buffer_Release(buffer2);
+ ID3D11Buffer_Release(buffer);
+
ID3D11DeviceContext_Release(deferred);
release_test_context(&test_context);
}
--
2.30.2

View File

@@ -1,92 +0,0 @@
From 78d2694bb7cb03fa84c6a093ba28264f81adc143 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Wed, 12 May 2021 16:40:00 -0500
Subject: [PATCH] wined3d: Store the framebuffer state inline in struct
wined3d_cs_clear.
Avoid storing pointers to the CS data inside individual ops.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/wined3d/cs.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 14076defaa9..8702ac08631 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -107,7 +107,7 @@ struct wined3d_cs_clear
enum wined3d_cs_op opcode;
DWORD flags;
unsigned int rt_count;
- struct wined3d_fb_state *fb;
+ struct wined3d_fb_state fb;
RECT draw_rect;
struct wined3d_color color;
float depth;
@@ -684,19 +684,19 @@ static void wined3d_cs_exec_clear(struct wined3d_cs *cs, const void *data)
const struct wined3d_cs_clear *op = data;
unsigned int i;
- device->blitter->ops->blitter_clear(device->blitter, device, op->rt_count, op->fb,
+ device->blitter->ops->blitter_clear(device->blitter, device, op->rt_count, &op->fb,
op->rect_count, op->rects, &op->draw_rect, op->flags, &op->color, op->depth, op->stencil);
if (op->flags & WINED3DCLEAR_TARGET)
{
for (i = 0; i < op->rt_count; ++i)
{
- if (op->fb->render_targets[i])
- wined3d_resource_release(op->fb->render_targets[i]->resource);
+ if (op->fb.render_targets[i])
+ wined3d_resource_release(op->fb.render_targets[i]->resource);
}
}
if (op->flags & (WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL))
- wined3d_resource_release(op->fb->depth_stencil->resource);
+ wined3d_resource_release(op->fb.depth_stencil->resource);
}
void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects,
@@ -715,7 +715,7 @@ void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *
op->opcode = WINED3D_CS_OP_CLEAR;
op->flags = flags & (WINED3DCLEAR_TARGET | WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL);
op->rt_count = rt_count;
- op->fb = &cs->state.fb;
+ op->fb = state->fb;
SetRect(&op->draw_rect, vp->x, vp->y, vp->x + vp->width, vp->y + vp->height);
if (state->rasterizer_state && state->rasterizer_state->desc.scissor)
IntersectRect(&op->draw_rect, &op->draw_rect, &state->scissor_rects[0]);
@@ -746,24 +746,23 @@ void wined3d_device_context_emit_clear_rendertarget_view(struct wined3d_device_c
struct wined3d_cs_clear *op;
size_t size;
- size = FIELD_OFFSET(struct wined3d_cs_clear, rects[1]) + sizeof(struct wined3d_fb_state);
+ size = FIELD_OFFSET(struct wined3d_cs_clear, rects[1]);
op = wined3d_device_context_require_space(context, size, WINED3D_CS_QUEUE_DEFAULT);
- op->fb = (void *)&op->rects[1];
op->opcode = WINED3D_CS_OP_CLEAR;
op->flags = flags & (WINED3DCLEAR_TARGET | WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL);
if (flags & WINED3DCLEAR_TARGET)
{
op->rt_count = 1;
- op->fb->render_targets[0] = view;
- op->fb->depth_stencil = NULL;
+ op->fb.render_targets[0] = view;
+ op->fb.depth_stencil = NULL;
op->color = *color;
}
else
{
op->rt_count = 0;
- op->fb->render_targets[0] = NULL;
- op->fb->depth_stencil = view;
+ op->fb.render_targets[0] = NULL;
+ op->fb.depth_stencil = view;
op->depth = depth;
op->stencil = stencil;
}
--
2.30.2

View File

@@ -1,487 +0,0 @@
From 6b084cc6c70ca2e68709bf417f9d485199e0a04c Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Thu, 6 May 2021 20:49:03 -0500
Subject: [PATCH] d3d11: Implement ID3D11Device::CreateDeferredContext().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42191
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/d3d11/d3d11_private.h | 1 +
dlls/d3d11/device.c | 70 +++++++++++++++---
dlls/d3d11/tests/d3d11.c | 65 ++++++++--------
dlls/wined3d/cs.c | 147 +++++++++++++++++++++++++++++++++++++
dlls/wined3d/wined3d.spec | 3 +
include/wine/wined3d.h | 3 +
6 files changed, 250 insertions(+), 39 deletions(-)
diff --git a/dlls/d3d11/d3d11_private.h b/dlls/d3d11/d3d11_private.h
index 1a8cdc6d77c..2b5a51afbd1 100644
--- a/dlls/d3d11/d3d11_private.h
+++ b/dlls/d3d11/d3d11_private.h
@@ -547,6 +547,7 @@ struct d3d11_device_context
ID3D11Multithread ID3D11Multithread_iface;
LONG refcount;
+ D3D11_DEVICE_CONTEXT_TYPE type;
struct wined3d_device_context *wined3d_context;
struct d3d_device *device;
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 2a012fce144..459c49145cd 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -351,7 +351,7 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_context_QueryInterface(ID3D11Devic
{
*out = &context->ID3D11DeviceContext1_iface;
}
- else if (IsEqualGUID(iid, &IID_ID3D11Multithread))
+ else if (context->type == D3D11_DEVICE_CONTEXT_IMMEDIATE && IsEqualGUID(iid, &IID_ID3D11Multithread))
{
*out = &context->ID3D11Multithread_iface;
}
@@ -390,6 +390,11 @@ static ULONG STDMETHODCALLTYPE d3d11_device_context_Release(ID3D11DeviceContext1
if (!refcount)
{
+ if (context->type != D3D11_DEVICE_CONTEXT_IMMEDIATE)
+ {
+ wined3d_deferred_context_destroy(context->wined3d_context);
+ heap_free(context);
+ }
ID3D11Device2_Release(&context->device->ID3D11Device2_iface);
}
@@ -2645,9 +2650,11 @@ static void STDMETHODCALLTYPE d3d11_device_context_Flush(ID3D11DeviceContext1 *i
static D3D11_DEVICE_CONTEXT_TYPE STDMETHODCALLTYPE d3d11_device_context_GetType(ID3D11DeviceContext1 *iface)
{
+ struct d3d11_device_context *context = impl_from_ID3D11DeviceContext1(iface);
+
TRACE("iface %p.\n", iface);
- return D3D11_DEVICE_CONTEXT_IMMEDIATE;
+ return context->type;
}
static UINT STDMETHODCALLTYPE d3d11_device_context_GetContextFlags(ID3D11DeviceContext1 *iface)
@@ -2826,13 +2833,18 @@ static void STDMETHODCALLTYPE d3d11_device_context_SwapDeviceContextState(ID3D11
TRACE("iface %p, state %p, prev %p.\n", iface, state, prev);
- if (!state)
+ if (prev)
+ *prev = NULL;
+
+ if (context->type != D3D11_DEVICE_CONTEXT_IMMEDIATE)
{
- if (prev)
- *prev = NULL;
+ WARN("SwapDeviceContextState is not allowed on a deferred context.\n");
return;
}
+ if (!state)
+ return;
+
wined3d_mutex_lock();
prev_impl = device->state;
@@ -3082,11 +3094,13 @@ static const struct ID3D11MultithreadVtbl d3d11_multithread_vtbl =
d3d11_multithread_GetMultithreadProtected,
};
-static void d3d11_device_context_init(struct d3d11_device_context *context, struct d3d_device *device)
+static void d3d11_device_context_init(struct d3d11_device_context *context, struct d3d_device *device,
+ D3D11_DEVICE_CONTEXT_TYPE type)
{
context->ID3D11DeviceContext1_iface.lpVtbl = &d3d11_device_context_vtbl;
context->ID3D11Multithread_iface.lpVtbl = &d3d11_multithread_vtbl;
context->refcount = 1;
+ context->type = type;
context->device = device;
ID3D11Device2_AddRef(&device->ID3D11Device2_iface);
@@ -3575,13 +3589,49 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateCounter(ID3D11Device2 *iface
return E_NOTIMPL;
}
+static HRESULT d3d11_deferred_context_create(struct d3d_device *device,
+ UINT flags, struct d3d11_device_context **context)
+{
+ struct d3d11_device_context *object;
+ HRESULT hr;
+
+ if (flags)
+ FIXME("Ignoring flags %#x.\n", flags);
+
+ if (!(object = heap_alloc_zero(sizeof(*object))))
+ return E_OUTOFMEMORY;
+ d3d11_device_context_init(object, device, D3D11_DEVICE_CONTEXT_DEFERRED);
+
+ wined3d_mutex_lock();
+ if (FAILED(hr = wined3d_deferred_context_create(device->wined3d_device, &object->wined3d_context)))
+ {
+ WARN("Failed to create wined3d deferred context, hr %#x.\n", hr);
+ heap_free(object);
+ wined3d_mutex_unlock();
+ return hr;
+ }
+ wined3d_mutex_unlock();
+
+ TRACE("Created deferred context %p.\n", object);
+ *context = object;
+
+ return S_OK;
+}
+
static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeferredContext(ID3D11Device2 *iface, UINT flags,
ID3D11DeviceContext **context)
{
- FIXME("iface %p, flags %#x, context %p stub!\n", iface, flags, context);
+ struct d3d_device *device = impl_from_ID3D11Device2(iface);
+ struct d3d11_device_context *object;
+ HRESULT hr;
- *context = NULL;
- return E_NOTIMPL;
+ TRACE("iface %p, flags %#x, context %p.\n", iface, flags, context);
+
+ if (FAILED(hr = d3d11_deferred_context_create(device, flags, &object)))
+ return hr;
+
+ *context = (ID3D11DeviceContext *)&object->ID3D11DeviceContext1_iface;
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d11_device_OpenSharedResource(ID3D11Device2 *iface, HANDLE resource, REFIID iid,
@@ -6655,7 +6705,7 @@ void d3d_device_init(struct d3d_device *device, void *outer_unknown)
device->d3d11_only = FALSE;
device->state = NULL;
- d3d11_device_context_init(&device->immediate_context, device);
+ d3d11_device_context_init(&device->immediate_context, device, D3D11_DEVICE_CONTEXT_IMMEDIATE);
ID3D11DeviceContext1_Release(&device->immediate_context.ID3D11DeviceContext1_iface);
wine_rb_init(&device->blend_states, d3d_blend_state_compare);
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 0f5ba6c3663..43ea70d2e9b 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -2266,6 +2266,8 @@ static void test_create_deferred_context(void)
hr = ID3D11Device_CreateDeferredContext(device, 0, &context);
todo_wine ok(hr == DXGI_ERROR_INVALID_CALL, "Failed to create deferred context, hr %#x.\n", hr);
+ if (hr == S_OK)
+ ID3D11DeviceContext_Release(context);
refcount = ID3D11Device_Release(device);
ok(!refcount, "Device has %u references left.\n", refcount);
@@ -2278,9 +2280,7 @@ static void test_create_deferred_context(void)
expected_refcount = get_refcount(device) + 1;
hr = ID3D11Device_CreateDeferredContext(device, 0, &context);
- todo_wine ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
- if (FAILED(hr))
- goto done;
+ ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
refcount = get_refcount(device);
ok(refcount == expected_refcount, "Got refcount %u, expected %u.\n", refcount, expected_refcount);
refcount = get_refcount(context);
@@ -2294,7 +2294,6 @@ static void test_create_deferred_context(void)
refcount = ID3D11DeviceContext_Release(context);
ok(!refcount, "Got unexpected refcount %u.\n", refcount);
-done:
refcount = ID3D11Device_Release(device);
ok(!refcount, "Device has %u references left.\n", refcount);
}
@@ -32270,14 +32269,7 @@ static void test_deferred_context_state(void)
ID3D11DeviceContext_PSSetConstantBuffers(immediate, 0, 1, &green_buffer);
hr = ID3D11Device_CreateDeferredContext(device, 0, &deferred);
- todo_wine ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
- if (hr != S_OK)
- {
- ID3D11Buffer_Release(blue_buffer);
- ID3D11Buffer_Release(green_buffer);
- release_test_context(&test_context);
- return;
- }
+ ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
ID3D11DeviceContext_PSGetConstantBuffers(deferred, 0, 1, &ret_buffer);
ok(!ret_buffer, "Got unexpected buffer %p.\n", ret_buffer);
@@ -32289,7 +32281,15 @@ static void test_deferred_context_state(void)
ID3D11Buffer_Release(ret_buffer);
hr = ID3D11DeviceContext_FinishCommandList(deferred, TRUE, &list1);
- ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+ todo_wine ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+ if (hr != S_OK)
+ {
+ ID3D11DeviceContext_Release(deferred);
+ ID3D11Buffer_Release(blue_buffer);
+ ID3D11Buffer_Release(green_buffer);
+ release_test_context(&test_context);
+ return;
+ }
ID3D11DeviceContext_PSGetConstantBuffers(deferred, 0, 1, &ret_buffer);
ok(ret_buffer == blue_buffer, "Got unexpected buffer %p.\n", ret_buffer);
@@ -32468,12 +32468,7 @@ static void test_deferred_context_rendering(void)
immediate = test_context.immediate_context;
hr = ID3D11Device_CreateDeferredContext(device, 0, &deferred);
- todo_wine ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
- if (hr != S_OK)
- {
- release_test_context(&test_context);
- return;
- }
+ ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
memset(&blend_desc, 0, sizeof(blend_desc));
@@ -32492,7 +32487,16 @@ static void test_deferred_context_rendering(void)
ID3D11DeviceContext_ClearRenderTargetView(deferred, test_context.backbuffer_rtv, green);
hr = ID3D11DeviceContext_FinishCommandList(deferred, TRUE, &list1);
- ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+ todo_wine ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
+ if (hr != S_OK)
+ {
+ ID3D11BlendState_Release(red_blend);
+ ID3D11BlendState_Release(green_blend);
+ ID3D11BlendState_Release(blue_blend);
+ ID3D11DeviceContext_Release(deferred);
+ release_test_context(&test_context);
+ return;
+ }
hr = ID3D11DeviceContext_FinishCommandList(deferred, TRUE, &list2);
ok(hr == S_OK, "Failed to create command list, hr %#x.\n", hr);
@@ -32729,12 +32733,7 @@ static void test_deferred_context_map(void)
immediate = test_context.immediate_context;
hr = ID3D11Device_CreateDeferredContext(device, 0, &deferred);
- todo_wine ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
- if (hr != S_OK)
- {
- release_test_context(&test_context);
- return;
- }
+ ok(hr == S_OK, "Failed to create deferred context, hr %#x.\n", hr);
for (i = 0; i < ARRAY_SIZE(data); ++i)
data[i] = i;
@@ -32758,13 +32757,21 @@ static void test_deferred_context_map(void)
ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE, 0, &map_desc);
- ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+ todo_wine ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &map_desc);
- ok(hr == D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD, "Got unexpected hr %#x.\n", hr);
+ todo_wine ok(hr == D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD, "Got unexpected hr %#x.\n", hr);
hr = ID3D11DeviceContext_Map(deferred, (ID3D11Resource *)buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map_desc);
- ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ todo_wine ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+ if (hr != S_OK)
+ {
+ ID3D11Buffer_Release(buffer2);
+ ID3D11Buffer_Release(buffer);
+ ID3D11DeviceContext_Release(deferred);
+ release_test_context(&test_context);
+ return;
+ }
map_data = map_desc.pData;
/* The previous contents of map_data are undefined and may in practice be
* uninitialized garbage. */
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 8702ac08631..9a143b915ed 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -3162,3 +3162,150 @@ void wined3d_cs_destroy(struct wined3d_cs *cs)
heap_free(cs->data);
heap_free(cs);
}
+
+struct wined3d_deferred_context
+{
+ struct wined3d_device_context c;
+
+ SIZE_T data_size, data_capacity;
+ void *data;
+};
+
+static struct wined3d_deferred_context *wined3d_deferred_context_from_context(struct wined3d_device_context *context)
+{
+ return CONTAINING_RECORD(context, struct wined3d_deferred_context, c);
+}
+
+static void *wined3d_deferred_context_require_space(struct wined3d_device_context *context,
+ size_t size, enum wined3d_cs_queue_id queue_id)
+{
+ struct wined3d_deferred_context *deferred = wined3d_deferred_context_from_context(context);
+ struct wined3d_cs_packet *packet;
+ size_t header_size, packet_size;
+
+ assert(queue_id == WINED3D_CS_QUEUE_DEFAULT);
+
+ header_size = offsetof(struct wined3d_cs_packet, data[0]);
+ packet_size = offsetof(struct wined3d_cs_packet, data[size]);
+ packet_size = (packet_size + header_size - 1) & ~(header_size - 1);
+
+ if (!wined3d_array_reserve(&deferred->data, &deferred->data_capacity, deferred->data_size + packet_size, 1))
+ return NULL;
+
+ packet = (struct wined3d_cs_packet *)((BYTE *)deferred->data + deferred->data_size);
+ TRACE("size was %zu, adding %zu\n", (size_t)deferred->data_size, packet_size);
+ deferred->data_size += packet_size;
+ packet->size = packet_size - header_size;
+ return &packet->data;
+}
+
+static void wined3d_deferred_context_submit(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id)
+{
+ assert(queue_id == WINED3D_CS_QUEUE_DEFAULT);
+
+ /* Nothing to do. */
+}
+
+static void wined3d_deferred_context_finish(struct wined3d_device_context *context, enum wined3d_cs_queue_id queue_id)
+{
+ /* This should not happen; we cannot meaningfully finish a deferred context. */
+ ERR("Ignoring finish() on a deferred context.\n");
+}
+
+static void wined3d_deferred_context_push_constants(struct wined3d_device_context *context,
+ enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants)
+{
+ FIXME("context %p, p %#x, start_idx %u, count %u, constants %p, stub!\n", context, p, start_idx, count, constants);
+}
+
+static HRESULT wined3d_deferred_context_map(struct wined3d_device_context *context,
+ struct wined3d_resource *resource, unsigned int sub_resource_idx,
+ struct wined3d_map_desc *map_desc, const struct wined3d_box *box, unsigned int flags)
+{
+ FIXME("context %p, resource %p, sub_resource_idx %u, map_desc %p, box %p, flags %#x, stub!\n",
+ context, resource, sub_resource_idx, map_desc, box, flags);
+ return E_NOTIMPL;
+}
+
+static HRESULT wined3d_deferred_context_unmap(struct wined3d_device_context *context,
+ struct wined3d_resource *resource, unsigned int sub_resource_idx)
+{
+ FIXME("context %p, resource %p, sub_resource_idx %u, stub!\n",
+ context, resource, sub_resource_idx);
+ return E_NOTIMPL;
+}
+
+static void wined3d_deferred_context_update_sub_resource(struct wined3d_device_context *context,
+ struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box,
+ const void *data, unsigned int row_pitch, unsigned int slice_pitch)
+{
+ FIXME("context %p, resource %p, sub_resource_idx %u, box %p, data %p, row_pitch %u, slice_pitch %u, stub!\n",
+ context, resource, sub_resource_idx, box, data, row_pitch, slice_pitch);
+}
+
+static void wined3d_deferred_context_issue_query(struct wined3d_device_context *context,
+ struct wined3d_query *query, unsigned int flags)
+{
+ FIXME("context %p, query %p, flags %#x, stub!\n", context, query, flags);
+}
+
+static void wined3d_deferred_context_flush(struct wined3d_device_context *context)
+{
+ FIXME("context %p, stub!\n", context);
+}
+
+static void wined3d_deferred_context_acquire_resource(struct wined3d_device_context *context,
+ struct wined3d_resource *resource)
+{
+ FIXME("context %p, resource %p, stub!\n", context, resource);
+}
+
+static const struct wined3d_device_context_ops wined3d_deferred_context_ops =
+{
+ wined3d_deferred_context_require_space,
+ wined3d_deferred_context_submit,
+ wined3d_deferred_context_finish,
+ wined3d_deferred_context_push_constants,
+ wined3d_deferred_context_map,
+ wined3d_deferred_context_unmap,
+ wined3d_deferred_context_update_sub_resource,
+ wined3d_deferred_context_issue_query,
+ wined3d_deferred_context_flush,
+ wined3d_deferred_context_acquire_resource,
+};
+
+HRESULT CDECL wined3d_deferred_context_create(struct wined3d_device *device, struct wined3d_device_context **context)
+{
+ struct wined3d_deferred_context *object;
+ HRESULT hr;
+
+ TRACE("device %p, context %p.\n", device, context);
+
+ if (!(object = heap_alloc_zero(sizeof(*object))))
+ return E_OUTOFMEMORY;
+
+ if (FAILED(hr = wined3d_state_create(device, &device->cs->c.state->feature_level, 1, &object->c.state)))
+ {
+ heap_free(object);
+ return hr;
+ }
+
+ object->c.ops = &wined3d_deferred_context_ops;
+ object->c.device = device;
+
+ TRACE("Created deferred context %p.\n", context);
+ *context = &object->c;
+
+ return S_OK;
+}
+
+void CDECL wined3d_deferred_context_destroy(struct wined3d_device_context *context)
+{
+ struct wined3d_deferred_context *deferred = wined3d_deferred_context_from_context(context);
+
+ TRACE("context %p.\n", context);
+
+ wined3d_state_destroy(deferred->c.state);
+ heap_free(deferred->data);
+ heap_free(deferred);
+}
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 9f3dfed7ef8..901e9bee621 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -33,6 +33,9 @@
@ cdecl wined3d_buffer_get_resource(ptr)
@ cdecl wined3d_buffer_incref(ptr)
+@ cdecl wined3d_deferred_context_create(ptr ptr)
+@ cdecl wined3d_deferred_context_destroy(ptr)
+
@ cdecl wined3d_depth_stencil_state_create(ptr ptr ptr ptr ptr)
@ cdecl wined3d_depth_stencil_state_decref(ptr)
@ cdecl wined3d_depth_stencil_state_get_parent(ptr)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 2ee18bcaaed..0be192b0f01 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2340,6 +2340,9 @@ void * __cdecl wined3d_buffer_get_parent(const struct wined3d_buffer *buffer);
struct wined3d_resource * __cdecl wined3d_buffer_get_resource(struct wined3d_buffer *buffer);
ULONG __cdecl wined3d_buffer_incref(struct wined3d_buffer *buffer);
+HRESULT __cdecl wined3d_deferred_context_create(struct wined3d_device *device, struct wined3d_device_context **context);
+void __cdecl wined3d_deferred_context_destroy(struct wined3d_device_context *context);
+
HRESULT __cdecl wined3d_depth_stencil_state_create(struct wined3d_device *device,
const struct wined3d_depth_stencil_state_desc *desc, void *parent,
const struct wined3d_parent_ops *parent_ops, struct wined3d_depth_stencil_state **state);
--
2.30.2

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