Compare commits

..

111 Commits

Author SHA1 Message Date
Alistair Leslie-Hughes
3a1f2a42bb Release v8.0-rc2 2022-12-22 21:13:49 +11:00
Alistair Leslie-Hughes
3aca66f24e Rebase against 2b0cd25b5f5794463a59cac999583fb52fa021cc. 2022-12-20 10:58:41 +11:00
Alistair Leslie-Hughes
32c64aa429 Rebase against 17e5ff74308f41ab662d46f684db2c6023a4a16b. 2022-12-17 17:40:41 +11:00
Paul Gofman
ffc4a7a5a0 Update and reenable ntdll-NtDevicePath patchset. 2022-12-15 16:06:29 -06:00
Alistair Leslie-Hughes
13c3e61937 Rebase against ec62575e9d99fc35752760cc37ded207febdfd11. 2022-12-14 13:25:45 +11:00
Alistair Leslie-Hughes
c5281120df Release v8.0-rc1 2022-12-11 15:51:42 +11:00
Alistair Leslie-Hughes
18941e7959 Rebase against 772badd0d7f3286a7881a71f16fad417e2d7787d. 2022-12-11 11:12:41 +11:00
Zebediah Figura
8581775098 Rebase against 7acd3aa429f2d45d96f4699906dc81e47ebd9c13. 2022-12-08 22:22:11 -06:00
Alistair Leslie-Hughes
f912827a38 Rebase against 0da7ad35f130a2ea59380dcad2179b972b3a909d. 2022-12-07 09:31:52 +11:00
Alistair Leslie-Hughes
d269579b4b Rebase against 6b816b8969576a931af25fe5cc32326f03bb7359. 2022-12-06 11:42:36 +11:00
Alistair Leslie-Hughes
cc4bced66e Rebase against 0fe562b4ae3f66f9c0e29ab8f27a4abf2ac78501. 2022-12-03 14:30:04 +11:00
Alistair Leslie-Hughes
ab806dce36 Rebase against 4febd9d880abe22e77a3d8283de245a691cf2b7f. 2022-12-02 12:37:57 +11:00
Alistair Leslie-Hughes
2f85e74399 Rebase against 30c33c2f982fc8c0ef6d97683c6581ebddd46814. 2022-12-01 11:07:36 +11:00
Alistair Leslie-Hughes
d007ef33ee Rebase against 6905b76b9400209ded97983ceca9f9c15de22d98. 2022-11-29 10:30:08 +11:00
Alistair Leslie-Hughes
c3db92d75d Updated nvcuda-CUDA_Support patchset 2022-11-27 13:39:48 +11:00
Alistair Leslie-Hughes
d8881486da Release v7.22 2022-11-27 12:03:01 +11:00
Alistair Leslie-Hughes
8c90eb42eb Rebase against 20d86f34a066657048610803e7143232efa6c0d3. 2022-11-27 08:14:29 +11:00
Alistair Leslie-Hughes
da453ddf66 Rebase against 81a6c8c882e9d00a3f459983d8281327f25e333a. 2022-11-25 10:43:01 +11:00
Alistair Leslie-Hughes
6c3797b3e8 Rebase against fbf23011777e2ff308ccbc09a07b81917f08796d. 2022-11-23 12:08:59 +11:00
Alistair Leslie-Hughes
3d15623eaf Rebase against ae73e09a8d071eaa33fafe785e8295384b9e64a7. 2022-11-22 10:32:11 +11:00
Alistair Leslie-Hughes
bf51996097 Rebase against 5d1820c40bd93e6810f072a39745ee739ba99b81. 2022-11-19 11:16:02 +11:00
Alistair Leslie-Hughes
8a5220955b Rebase against 623bc9fa54311d941d09760dc5300697ba11debe. 2022-11-16 10:25:40 +11:00
Zebediah Figura
5088fc67ba Rebase against a8c1d5c108fc57e4d78e9db126f395c89083a83d. 2022-11-14 17:51:19 -06:00
Zebediah Figura
a16b6b9c1e ntdll-DOS_Attributes: Remove already upstream patch 0005. 2022-11-14 17:16:12 -06:00
Alistair Leslie-Hughes
d935a41e61 Release v7.21 2022-11-13 14:32:51 +11:00
Paul Gofman
31acabe792 Updated and re-enabled ntdll-ForceBottomUpAlloc patchset. 2022-11-13 12:02:37 +11:00
Paul Gofman
1a2b47b084 Added ntdll-Placeholders patchset. 2022-11-13 12:02:37 +11:00
Paul Gofman
2e9f238732 Updated and re-enabled ntdll-Syscall_Emulation patchset. 2022-11-13 12:02:37 +11:00
Zebediah Figura
cf32a7092b eventfd_synchronization: Fix compilation with patch 0002.
esync doesn't work when partially applied, but it should at least compile, and
function with WINEESYNC=0.
2022-11-11 16:54:02 -06:00
Alistair Leslie-Hughes
4303e3ee3b Rebase against 384b0b35c357ca31ccb080162e1f39f93ec70054. 2022-11-11 17:01:04 +11:00
Zebediah Figura
49ed7ae4a0 Rebase against 13cc08e32d6c04f8f915d07cda39638ee99c3d43. 2022-11-08 16:54:42 -06:00
Alistair Leslie-Hughes
eff142bc57 Rebase against 1d636da205e39436bbd71849ceeebc5420bf98a9. 2022-11-08 11:03:43 +11:00
Alistair Leslie-Hughes
bd2608b12c Rebase against 7be72ce2a708ec88aa2362352f37db30529251c4. 2022-11-02 10:28:15 +11:00
Alistair Leslie-Hughes
acb054627a Release v7.20 2022-11-01 10:26:30 +11:00
Alistair Leslie-Hughes
f07f287395 Updated mfplat-streaming-support patchset
Re-enabled.

0065 Disabled until it can properly be rebased.

Patch 0055 - Helps some games which request ARB32 output but doesn't always draw well.
2022-10-25 13:35:44 +11:00
Alistair Leslie-Hughes
8703ad8375 Rebase against 65797763b3ac4fcab7ffc83a4f95b2e87c81f58a. 2022-10-25 11:28:21 +11:00
Alistair Leslie-Hughes
1f500db5b7 Updated nvcuda-CUDA_Support patchset
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53809
2022-10-21 14:54:58 +11:00
Alistair Leslie-Hughes
1deec9df95 Small change 2022-10-20 21:45:55 +11:00
Alistair Leslie-Hughes
a8e296715c Updated URL's to gitlab 2022-10-20 21:24:52 +11:00
Alistair Leslie-Hughes
43d5c1e0f5 Rebase against e72a16b57f66b63a16bb3d1619ac4d42632cb141. 2022-10-20 11:18:53 +11:00
Alistair Leslie-Hughes
41a3c56c50 Release v7.19 2022-10-17 12:17:38 +11:00
Zebediah Figura
5be23b8ae8 Rebase against e3f00bf7c944f1cde6151fde969f2b49649c3de7. 2022-10-16 16:22:20 -05:00
Zebediah Figura
769ddd9f00 ntdll-Junction_Points: Updates from Erich E. Hoover. 2022-10-16 16:22:16 -05:00
Zebediah Figura
aabde22767 Rebase against fded20df6c7422e85dbcd5a20475fd0c5d38d3c6. 2022-10-13 19:46:39 -05:00
Zebediah Figura
ca3220cbd6 Rebase against f87ad783e23a2b6f5e9b8cf78dbf99bad4471a25. 2022-10-13 16:00:57 -05:00
Alistair Leslie-Hughes
ff6cef5d72 Rebase against f87ad783e23a2b6f5e9b8cf78dbf99bad4471a25. 2022-10-13 08:52:08 +11:00
Alistair Leslie-Hughes
d2b7b686f1 Fix Rebase 2022-10-12 13:52:20 +11:00
Alistair Leslie-Hughes
c5c29f9395 Rebase against 4312be1646cad32548f855e25823857092bf31dc. 2022-10-12 11:27:25 +11:00
Zebediah Figura
08ad410761 secur32-InitializeSecurityContext: Remove patch set.
Fixed upstream by c1993458ac.
2022-10-10 22:28:33 -05:00
Zebediah Figura
e6f9a449cd Rebase against 16c6c249a5134de2422fbd3471ead7425c968301. 2022-10-10 22:27:34 -05:00
Alistair Leslie-Hughes
0ea57a0262 Updated wined3d-bindless-texture patchset 2022-09-30 09:31:13 +10:00
Alistair Leslie-Hughes
4f75966580 Updated ntdll-DOS_Attributes patchset
Fixes: https://bugs.winehq.org/show_bug.cgi?id=53715
2022-09-30 09:31:13 +10:00
Zebediah Figura
9f9285256f mfplat-streaming-support: Remove patch 0067.
Upstreamed as 2d7c37da495c.
2022-09-29 16:04:31 -05:00
Alistair Leslie-Hughes
21009111bd Rebase against 2a4ec7dafc7ee38108f6a9f626a7c39e6b6777e0. 2022-09-27 10:29:23 +10:00
Alistair Leslie-Hughes
fe476e7241 Release v7.18 2022-09-24 09:52:05 +10:00
Alistair Leslie-Hughes
29e810ed54 Merge pull request #84 from Gcenx/patch-3
macOS.yml: Remove wine-devel action
2022-09-24 08:43:52 +10:00
Dean M Greer
1dc3666fd0 macOS.yml: Remove wine-devel action
Since gitlab.winehq.org hosts it’s own macOS runner this is no longer required
2022-09-23 10:40:26 -04:00
Alistair Leslie-Hughes
78837ecadc Rebase against 52a83ffe4ef1ef58520b09f8d2144dcf291b622b. 2022-09-23 14:18:51 +10:00
Alistair Leslie-Hughes
626e3d77cd Rebase against e2a5bf7540a3b1f5b3889f6339795e5edf7f590f. 2022-09-22 09:57:30 +10:00
Alistair Leslie-Hughes
5013933ea5 Rebase against b07e06e297dd8bca67fc1ee523fc235cecebbf1e. 2022-09-21 09:21:47 +10:00
Alistair Leslie-Hughes
c10d599428 Rebase against cb0e4f5f4f7dc10a0933349ad780a11405cd736e. 2022-09-20 08:49:48 +10:00
Alistair Leslie-Hughes
1d75f6950a Rebase against f5b92137257b9564dca623ee9578c49b4495e220. 2022-09-17 08:35:46 +10:00
Zebediah Figura
ffaf883b19 Rebase against 7feaa6795a26c97b5ce4327a23129eb20a049859. 2022-09-14 17:30:59 -05:00
Zebediah Figura
19c062dbc7 dwrite-FontFallback: Remove remaining patches.
Per Nikolay, these are upstream now.

They would appear to be obviated by a10ae49292 and b783100773.
2022-09-14 10:34:47 -05:00
Zebediah Figura
1ed196f0ef ntdll-Junction_Points: Updates from Erich E. Hoover.
Includes a fundamental rewrite of the way reparse points are stored.
2022-09-12 10:58:36 -05:00
Zebediah Figura
533337e25e server-unix_name: Rebase and re-enable. 2022-09-11 17:05:58 -05:00
Zebediah Figura
7e2f1d392c mfplat-streaming-support: Remove patch 0080.
Per private correspondence with Rémi, this is correctly implemented upstream in
a different way, on the wg_transform side.
2022-09-11 17:05:58 -05:00
Zebediah Figura
129ce257fd mfplat-streaming-support: Remove patch 0041.
Per private correspondence with Rémi, this will probably be submitted a
different way upstream. Since it's only API cleanup, there's no reason to keep
it around in wine-staging.
2022-09-11 17:05:58 -05:00
Zebediah Figura
a27ba94091 mfplat-streaming-support: Remove patch 0042.
This patch looks questionable and, per private correspondence with Rémi, was probably a red herring.
2022-09-11 17:05:58 -05:00
Zebediah Figura
d490a981e1 mfplat-streaming-support: Remove patch 0083.
Per private correspondence with Rémi, this doesn't seem to be necessary.
2022-09-11 17:05:58 -05:00
Zebediah Figura
092bc29352 mfplat-streaming-support: Remove more patches which were already implemented upstream.
I missed these the first time; thanks Rémi for pointing them out.
2022-09-11 17:05:58 -05:00
Zebediah Figura
2ee26de43f dwrite-FontFallback: Drop some patches.
These are superseded and/or no longer useful upstream, per private correspondence with Nikolay.
2022-09-11 17:05:58 -05:00
Alistair Leslie-Hughes
6d46b1e13f Release v7.17 2022-09-10 11:15:18 +10:00
Alistair Leslie-Hughes
64d7f6c5f3 Rebase against 1d0f66a3c6c6cf77ab49c834ba0d05f5232f637d. 2022-09-09 08:53:46 +10:00
Zebediah Figura
99fc74eb6c mfplat-streaming-support: Remove patch 0044.
This was based on a misreading of the documentation; see the following thread:

https://gitlab.winehq.org/wine/wine/-/merge_requests/242#note_2170
2022-09-03 15:56:35 -05:00
Zebediah Figura
73351fd593 mfplat-streaming-support: Remove transform patches already implemented or superseded upstream. 2022-09-03 15:54:56 -05:00
Zebediah Figura
34b3ffed35 mfplat-streaming-support: Remove patch 0036.
This was fixed upstream by 6dc35196, which rewrote the relevant code and
propagates failure from SetOutputType().
2022-09-03 15:34:17 -05:00
Zebediah Figura
d6a9c88bf3 mfplat-streaming-support: Remove more hacks.
These are not going in the right direction, and accordingly we don't want them
in wine-staging.
2022-09-03 15:21:09 -05:00
Zebediah Figura
c61fed05c0 mfplat-streaming-support: Remove hacks obviated by the ASF reader implementation. 2022-09-03 15:21:09 -05:00
Zebediah Figura
55c3361918 mfplat-streaming-support: Remove hacks for the Proton runtime environment.
Upstream Wine doesn't need these.
2022-09-03 15:21:09 -05:00
Zebediah Figura
4ecbce03f5 msxml3-FreeThreadedXMLHTTP60: Fix a whitespace error. 2022-09-03 15:21:09 -05:00
Zebediah Figura
b4004c7c84 nvcuda-CUDA_Support: Fix a whitespace error. 2022-09-03 15:21:09 -05:00
Zebediah Figura
6f59ab8034 windows.networking.connectivity-new-dll: Fix a whitespace error. 2022-09-03 15:21:09 -05:00
Zebediah Figura
4966b421fc windows.networking.connectivity-new-dll: Remove manual WinRT class registration.
widl generates these now.
2022-09-03 15:21:09 -05:00
Zebediah Figura
57a12e6845 Rebase against 7546b4a63d437c2f7f8673cae9341d358f84f1a5. 2022-09-01 17:13:59 -05:00
Alistair Leslie-Hughes
aa2eb6eed6 Release v7.16 2022-08-29 13:47:16 +10:00
Alistair Leslie-Hughes
4ae0f97bc7 Rebase against a4930f003f45ab82c4c05746cbd29cbd4af09735. 2022-08-29 10:59:27 +10:00
Alistair Leslie-Hughes
b31a964e1e Rebase against 4e55dfb7c5e26d45794406a4ce8e50a6bc725b74. 2022-08-25 15:32:33 +10:00
Alistair Leslie-Hughes
fa8d0abc9d Updated winepulse-aux_channels patchset
Add a reference to proton report which this patch would help.
2022-08-18 20:07:09 +10:00
Alistair Leslie-Hughes
2c5c068424 Rebase against 4a3c7e2758ac10b7947e859015f2a755d25fd7fe. 2022-08-18 08:18:00 +10:00
Alistair Leslie-Hughes
e893644049 Rebase against 4608e1e1257a377cd554a0e885368e3feb7d286f. 2022-08-17 08:24:50 +10:00
Alistair Leslie-Hughes
afbc5756c9 Rebase against b4a5556da983c7ebc8a25b228100c08947024c59. 2022-08-16 10:15:01 +10:00
Alistair Leslie-Hughes
552b03f70a Release v7.15 2022-08-14 14:16:57 +10:00
Alistair Leslie-Hughes
1f218b6822 Added wined3d-adapter_create_output Patchset 2022-08-14 13:51:20 +10:00
Alistair Leslie-Hughes
d9e4a75d19 Added dsdmo-fx-support patchset 2022-08-13 15:59:13 +10:00
Alistair Leslie-Hughes
0106909ec5 Added ntdll-wine-frames patchset 2022-08-12 13:34:16 +10:00
Alistair Leslie-Hughes
ec592e937b Rebase against 8e27f6c2ef327d6d643e29a271245e76aa6f4792. 2022-08-11 08:24:04 +10:00
Alistair Leslie-Hughes
4bc5bffe2f Rebase against 7b51216198237c04a8994cda1bdb45fdb4482b32. 2022-08-09 07:58:38 +10:00
Alistair Leslie-Hughes
f2648a9a40 Rebase against e43288348de170fef5dfd122675ba367dd7ea0ec. 2022-08-05 10:35:39 +10:00
Alistair Leslie-Hughes
1d21e2b6f5 Release v7.14 2022-07-30 20:21:15 +10:00
Alistair Leslie-Hughes
fcaab59ec5 Added winspool.drv-ClosePrinter patchset 2022-07-30 18:10:37 +10:00
Alistair Leslie-Hughes
8708356647 Rebase against d909f2759066afd128aa1a299d3367c7ab76da8f. 2022-07-29 08:38:12 +10:00
Alistair Leslie-Hughes
d3ed71430a Rebase against 1381ced8ecbfaa57aa378ab32e94d5aa51873160. 2022-07-28 16:20:21 +10:00
Alistair Leslie-Hughes
fb2b3b3c69 Rebase against 889fe64d9f2e1a0d9a3660bbb94e0a9b74155827. 2022-07-26 09:14:17 +10:00
Alistair Leslie-Hughes
9fd1bb66d3 Rebase against 7b77b4e3b4ea732ed592ac15f000875f5d1f1daa. 2022-07-23 09:53:09 +10:00
Alistair Leslie-Hughes
86091d3b1f Updated xactengine3_7-callbacks patchset
Tested with
- Lost Chronicles of Zerzura.
- Monkey Island 2.
- Gridrunner   (Might still crashes in some scenario)
- Neptunia Rebirth1
2022-07-22 14:24:42 +10:00
Alistair Leslie-Hughes
ab31919ee5 Rebase against 97f10736db6fc9c58ed181b3f23534513d6f9e13. 2022-07-22 09:22:53 +10:00
Alistair Leslie-Hughes
6638f9ee79 Rebase against 236476417ac6777951d1cfc26c0393bff2a64c23. 2022-07-21 14:22:07 +10:00
Alistair Leslie-Hughes
92ce758ac8 Updated xactengine3_7-Notification patchset
Updated to reflect upstream changse and re-enable.
2022-07-20 11:03:38 +10:00
Alistair Leslie-Hughes
0de9d1028b Rebase against e0d8bd3f5a7b4c8722d3632a9954f1647851f3d3. 2022-07-20 10:33:28 +10:00
Alistair Leslie-Hughes
7a2920aa2a Rebase against 1113f42aa748d9e0a27c4663b9d8de1237f95e73. 2022-07-19 13:15:49 +10:00
307 changed files with 6547 additions and 24027 deletions

View File

@@ -64,60 +64,3 @@ jobs:
run: |
cd $GITHUB_WORKSPACE/wine
make -j$(sysctl -n hw.ncpu 2>/dev/null)
wine-devel:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
brew update
brew install --cask xquartz
brew install bison \
gphoto2 \
gst-plugins-base \
mingw-w64 \
molten-vk \
mpg123
- name: Add bison & krb5 to $PATH
run: |
set -eu
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
echo "$(brew --prefix krb5)/bin" >> $GITHUB_PATH
- name: Get upstream-commit
run: |
mkdir $GITHUB_WORKSPACE/wine
cd wine
git init
git fetch git://source.winehq.org/git/wine.git $($GITHUB_WORKSPACE/patches/patchinstall.sh --upstream-commit) --depth=1
git checkout $($GITHUB_WORKSPACE/patches/patchinstall.sh --upstream-commit)
- name: Configure wine64
env:
LDFLAGS: "-Wl,-rpath,/opt/X11/lib"
# Avoid weird linker errors with Xcode 10 and later
MACOSX_DEPLOYMENT_TARGET: "10.14"
run: |
cd $GITHUB_WORKSPACE/wine
cd $GITHUB_WORKSPACE/wine
./configure --enable-win64 \
--without-alsa \
--without-capi \
--without-dbus \
--without-inotify \
--without-oss \
--without-pulse \
--without-udev \
--without-v4l2 \
--x-include=/opt/X11/include \
--x-lib=/opt/X11/lib
- name: Build wine64
run: |
cd $GITHUB_WORKSPACE/wine
make -j$(sysctl -n hw.ncpu 2>/dev/null)

View File

@@ -94,17 +94,17 @@ proper implementation. In the event that this happens, we add the patches to
wine-staging instead, and keep them updated and maintained as well as attempt to
clean them up to be upstreamed. We also both write and verify patches which fix
various bugs that may not have patches, and in turn allow them run better using
WINE. This includes testing on various hardware, games, and applications.
WINE. This includes testing on various hardware, games and applications.
Any expenses for applications, games, or hardware which we do not own comes out
of pocket. In order to alleviate these expenses, we are now accepting donations.
This in turn allows us to continue to perform testing, provide fixes, and get
them upstreamed, ultimately aiming to provide a better experience for all WINE
users. All of our work is provided publicly for free and can be found at
<https://github.com/wine-staging/wine-staging>. We do not expect to be paid for
<https://gitlab.winehq.org/wine/wine-staging>. We do not expect to be paid for
any of the work provided, nor will donators receive any special benefits or
compensation.
Donations are recieved through Patreon. Anyone interested may donate here:
https://www.patreon.com/winestaging
https://www.patreon.com/winestaging

View File

@@ -1,4 +1,4 @@
From 92914d4648be5dd7ee62b35d3ca2fc7376d0dbd0 Mon Sep 17 00:00:00 2001
From 4edf58f26172ec7f931eab57d14aca564d8b58e3 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.
@@ -13,10 +13,10 @@ Subject: [PATCH] d2d1: Avoid implicit cast of interface pointer.
6 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c
index 971e3c7ff6b..fcd96eb6374 100644
index 1cba26f5ca4..df88fb70469 100644
--- a/dlls/d2d1/bitmap.c
+++ b/dlls/d2d1/bitmap.c
@@ -646,5 +646,5 @@ struct d2d_bitmap *unsafe_impl_from_ID2D1Bitmap(ID2D1Bitmap *iface)
@@ -762,5 +762,5 @@ struct d2d_bitmap *unsafe_impl_from_ID2D1Bitmap(ID2D1Bitmap *iface)
if (!iface)
return NULL;
assert(iface->lpVtbl == (ID2D1BitmapVtbl *)&d2d_bitmap_vtbl);
@@ -24,7 +24,7 @@ index 971e3c7ff6b..fcd96eb6374 100644
+ return CONTAINING_RECORD((ID2D1Bitmap1*)iface, struct d2d_bitmap, ID2D1Bitmap1_iface);
}
diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c
index b9a673fe54c..c5a52db6b01 100644
index 98aa889aa5f..52fc0a9854a 100644
--- a/dlls/d2d1/brush.c
+++ b/dlls/d2d1/brush.c
@@ -259,7 +259,7 @@ static void d2d_brush_init(struct d2d_brush *brush, ID2D1Factory *factory,
@@ -64,7 +64,7 @@ index b9a673fe54c..c5a52db6b01 100644
static HRESULT STDMETHODCALLTYPE d2d_bitmap_brush_QueryInterface(ID2D1BitmapBrush1 *iface,
diff --git a/dlls/d2d1/dc_render_target.c b/dlls/d2d1/dc_render_target.c
index e7e0fa57ed7..1166ae204c2 100644
index 30eafe361d1..0a38aa8613a 100644
--- a/dlls/d2d1/dc_render_target.c
+++ b/dlls/d2d1/dc_render_target.c
@@ -23,7 +23,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d2d);
@@ -77,10 +77,10 @@ index e7e0fa57ed7..1166ae204c2 100644
static HRESULT d2d_dc_render_target_present(IUnknown *outer_unknown)
diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c
index e97bae0b54a..661387b570b 100644
index d6ee91de005..781e9aa8511 100644
--- a/dlls/d2d1/geometry.c
+++ b/dlls/d2d1/geometry.c
@@ -3356,7 +3356,7 @@ static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl =
@@ -3360,7 +3360,7 @@ static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl =
static inline struct d2d_geometry *impl_from_ID2D1PathGeometry1(ID2D1PathGeometry1 *iface)
{
@@ -89,7 +89,7 @@ index e97bae0b54a..661387b570b 100644
}
static HRESULT STDMETHODCALLTYPE d2d_path_geometry_QueryInterface(ID2D1PathGeometry1 *iface, REFIID iid, void **out)
@@ -4229,7 +4229,7 @@ fail:
@@ -4233,7 +4233,7 @@ fail:
static inline struct d2d_geometry *impl_from_ID2D1RectangleGeometry(ID2D1RectangleGeometry *iface)
{
@@ -98,7 +98,7 @@ index e97bae0b54a..661387b570b 100644
}
static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_QueryInterface(ID2D1RectangleGeometry *iface,
@@ -4941,7 +4941,7 @@ fail:
@@ -4945,7 +4945,7 @@ fail:
static inline struct d2d_geometry *impl_from_ID2D1TransformedGeometry(ID2D1TransformedGeometry *iface)
{
@@ -107,7 +107,7 @@ index e97bae0b54a..661387b570b 100644
}
static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_QueryInterface(ID2D1TransformedGeometry *iface,
@@ -5225,7 +5225,7 @@ void d2d_transformed_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *
@@ -5229,7 +5229,7 @@ void d2d_transformed_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *
static inline struct d2d_geometry *impl_from_ID2D1GeometryGroup(ID2D1GeometryGroup *iface)
{
@@ -117,7 +117,7 @@ index e97bae0b54a..661387b570b 100644
static HRESULT STDMETHODCALLTYPE d2d_geometry_group_QueryInterface(ID2D1GeometryGroup *iface,
diff --git a/dlls/d2d1/hwnd_render_target.c b/dlls/d2d1/hwnd_render_target.c
index 4ce220bf433..32eeaf02c9f 100644
index 4d3fe43a1b3..ccb7067fabf 100644
--- a/dlls/d2d1/hwnd_render_target.c
+++ b/dlls/d2d1/hwnd_render_target.c
@@ -23,7 +23,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d2d);
@@ -130,16 +130,16 @@ index 4ce220bf433..32eeaf02c9f 100644
static HRESULT d2d_hwnd_render_target_present(IUnknown *outer_unknown)
diff --git a/dlls/d2d1/state_block.c b/dlls/d2d1/state_block.c
index 114a3efd883..4f662be4549 100644
index 770c165fd90..a3b48095436 100644
--- a/dlls/d2d1/state_block.c
+++ b/dlls/d2d1/state_block.c
@@ -187,5 +187,5 @@ struct d2d_state_block *unsafe_impl_from_ID2D1DrawingStateBlock(ID2D1DrawingStat
if (!iface)
@@ -191,5 +191,5 @@ struct d2d_state_block *unsafe_impl_from_ID2D1DrawingStateBlock(ID2D1DrawingStat
WARN("Unexpected state block vtbl %p.\n", iface->lpVtbl);
return NULL;
assert(iface->lpVtbl == (ID2D1DrawingStateBlockVtbl *)&d2d_state_block_vtbl);
}
- return CONTAINING_RECORD(iface, struct d2d_state_block, ID2D1DrawingStateBlock1_iface);
+ return CONTAINING_RECORD((ID2D1DrawingStateBlock1*)iface, struct d2d_state_block, ID2D1DrawingStateBlock1_iface);
}
--
2.35.1
2.38.1

View File

@@ -67,7 +67,7 @@ index cacb7ea7751..19a807c1624 100644
- Note: Launching internal wine processes cannot specify a full path to exe */
- status = CreateProcessW(thisDir,
- command, NULL, NULL, TRUE, 0, NULL, NULL, &st, &pe);
- heap_free(st.lpReserved2);
- free(st.lpReserved2);
- if ((opt_c || opt_k) && !opt_s && !status
- && GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='\"') {
- /* strip first and last quote WCHARacters and try again */
@@ -143,7 +143,7 @@ index cacb7ea7751..19a807c1624 100644
+ WINE_TRACE("Launching via CreateProcess\n");
+ status = CreateProcessW(thisDir,
+ command, NULL, NULL, TRUE, 0, NULL, NULL, &st, &pe);
+ heap_free(st.lpReserved2);
+ free(st.lpReserved2);
+ if ((opt_c || opt_k) && !opt_s && !status
+ && GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='\"') {
+ /* strip first and last quote WCHARacters and try again */

View File

@@ -1,4 +1,4 @@
From c88a1acf9ac625cb2a7cbfc90ac3bb2d426889a0 Mon Sep 17 00:00:00 2001
From 7362e037e8160046fffcf062a663ea8e7ac45290 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Tue, 12 Nov 2019 18:13:20 +0800
Subject: [PATCH] comctl32: Bump version to 6.0.
@@ -14,10 +14,10 @@ Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/comctl32/comctl32.h b/dlls/comctl32/comctl32.h
index 66b341ae5ad..1af9baea7ee 100644
index 7dfdf089eb1..17ec7eeab40 100644
--- a/dlls/comctl32/comctl32.h
+++ b/dlls/comctl32/comctl32.h
@@ -193,7 +193,7 @@ BOOL Str_SetPtrAtoW (LPWSTR *lppDest, LPCSTR lpSrc) DECLSPEC_HIDDEN;
@@ -194,7 +194,7 @@ BOOL Str_SetPtrAtoW (LPWSTR *lppDest, LPCSTR lpSrc) DECLSPEC_HIDDEN;
BOOL Str_SetPtrWtoA (LPSTR *lppDest, LPCWSTR lpSrc) DECLSPEC_HIDDEN;
BOOL imagelist_has_alpha(HIMAGELIST, UINT) DECLSPEC_HIDDEN;
@@ -40,12 +40,12 @@ index c9aa1ba6253..be6e2425193 100644
#define WINE_PRODUCTVERSION_STR WINE_FILEVERSION_STR
diff --git a/include/commctrl.h b/include/commctrl.h
index dfd2f4a37d2..0784478ce14 100644
index a54de13d8b2..e0b0e22d4dc 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -51,7 +51,7 @@ enum _LI_METRIC
HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE, const WCHAR *, int, int, HICON *);
HRESULT WINAPI LoadIconMetric(HINSTANCE, const WCHAR *, int, HICON *);
@@ -59,7 +59,7 @@ enum _LI_METRIC
WINCOMMCTRLAPI HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE, const WCHAR *, int, int, HICON *);
WINCOMMCTRLAPI HRESULT WINAPI LoadIconMetric(HINSTANCE, const WCHAR *, int, HICON *);
-#define COMCTL32_VERSION 5 /* dll version */
+#define COMCTL32_VERSION 6 /* dll version */
@@ -53,5 +53,5 @@ index dfd2f4a37d2..0784478ce14 100644
#define ICC_LISTVIEW_CLASSES 0x00000001 /* listview, header */
#define ICC_TREEVIEW_CLASSES 0x00000002 /* treeview, tooltips */
--
2.25.1
2.35.1

View File

@@ -1,4 +1,4 @@
From 12a9a9cb506aede4748611c8fa3339afcee7c070 Mon Sep 17 00:00:00 2001
From eddc40dbf4048ceea1fda7f842adad340865723b 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,29 +17,29 @@ Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
create mode 100644 dlls/cryptext/tests/cryptext.c
diff --git a/configure b/configure
index 20bcb96a2a6..b8fd60dbb53 100755
index 6425e4da5f8..c97671cdfc6 100755
--- a/configure
+++ b/configure
@@ -20910,6 +20910,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests
@@ -21346,6 +21346,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
+wine_fn_config_makefile dlls/cryptext/tests enable_tests
wine_fn_config_makefile dlls/cryptnet enable_cryptnet
wine_fn_config_makefile dlls/cryptnet/tests enable_tests
wine_fn_config_makefile dlls/cryptsp enable_cryptsp
wine_fn_config_makefile dlls/cryptowinrt enable_cryptowinrt
diff --git a/configure.ac b/configure.ac
index 6cbd947bf31..c68c5975e63 100644
index b5a3b0069fb..73b1b1c8c2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2361,6 +2361,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
@@ -2450,6 +2450,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
WINE_CONFIG_MAKEFILE(dlls/cryptdlg)
WINE_CONFIG_MAKEFILE(dlls/cryptdll)
WINE_CONFIG_MAKEFILE(dlls/cryptext)
+WINE_CONFIG_MAKEFILE(dlls/cryptext/tests)
WINE_CONFIG_MAKEFILE(dlls/cryptnet)
WINE_CONFIG_MAKEFILE(dlls/cryptnet/tests)
WINE_CONFIG_MAKEFILE(dlls/cryptsp)
WINE_CONFIG_MAKEFILE(dlls/cryptowinrt)
diff --git a/dlls/cryptext/Makefile.in b/dlls/cryptext/Makefile.in
index 0ec2b8a2045..76accca43eb 100644
--- a/dlls/cryptext/Makefile.in
@@ -67,7 +67,7 @@ index ee3e155f457..24b4794c198 100644
@ stub CryptExtOpenCRLW
@ stub CryptExtOpenCTL
diff --git a/dlls/cryptext/cryptext_main.c b/dlls/cryptext/cryptext_main.c
index 537ba66cd3b..f9e34d1f8c5 100644
index 537ba66cd3b..a4314518eac 100644
--- a/dlls/cryptext/cryptext_main.c
+++ b/dlls/cryptext/cryptext_main.c
@@ -22,10 +22,29 @@
@@ -161,7 +161,7 @@ index 00000000000..522fc60a4af
+ cryptext.c
diff --git a/dlls/cryptext/tests/cryptext.c b/dlls/cryptext/tests/cryptext.c
new file mode 100644
index 00000000000..cc62a772b59
index 00000000000..ab1007dbd82
--- /dev/null
+++ b/dlls/cryptext/tests/cryptext.c
@@ -0,0 +1,61 @@
@@ -227,5 +227,5 @@ index 00000000000..cc62a772b59
+ test_CryptExtOpenCER();
+}
--
2.34.1
2.35.1

View File

@@ -1,16 +1,16 @@
From 33e4e3219056f09ed8b406d154b87bafedb1ebe0 Mon Sep 17 00:00:00 2001
From 7ba5e4a89be15deeb704078ad8321c7cc5aa02eb Mon Sep 17 00:00:00 2001
From: Christian Costa <titan.costa@gmail.com>
Date: Mon, 22 Jul 2013 21:51:20 +0200
Subject: d3dx9_36: Implement ID3DXSkinInfoImpl_UpdateSkinnedMesh.
Subject: [PATCH] d3dx9_36: Implement ID3DXSkinInfoImpl_UpdateSkinnedMesh.
This patch fixes last problem of bug 32572.
---
dlls/d3dx9_36/skin.c | 86 ++++++++++++++++++++++++++++++++++++++++++++--
dlls/d3dx9_36/tests/mesh.c | 83 ++++++++++++++++++++++++++++++++++++++++++++
dlls/d3dx9_36/skin.c | 86 ++++++++++++++++++++++++++++++++++++--
dlls/d3dx9_36/tests/mesh.c | 83 ++++++++++++++++++++++++++++++++++++
2 files changed, 166 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dx9_36/skin.c b/dlls/d3dx9_36/skin.c
index aa5acf2..bd7e581 100644
index b81fb6863d3..75ee6d44a95 100644
--- a/dlls/d3dx9_36/skin.c
+++ b/dlls/d3dx9_36/skin.c
@@ -2,6 +2,7 @@
@@ -21,7 +21,7 @@ index aa5acf2..bd7e581 100644
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -375,10 +376,89 @@ static HRESULT WINAPI d3dx9_skin_info_GetDeclaration(ID3DXSkinInfo *iface,
@@ -399,10 +400,89 @@ static HRESULT WINAPI d3dx9_skin_info_GetDeclaration(ID3DXSkinInfo *iface,
static HRESULT WINAPI d3dx9_skin_info_UpdateSkinnedMesh(ID3DXSkinInfo *iface, const D3DXMATRIX *bone_transforms,
const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices)
{
@@ -115,11 +115,11 @@ index aa5acf2..bd7e581 100644
static HRESULT WINAPI d3dx9_skin_info_ConvertToBlendedMesh(ID3DXSkinInfo *iface, ID3DXMesh *mesh_in,
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
index 17c5d9c..e255eac 100644
index 1daec158a5f..64b02276843 100644
--- a/dlls/d3dx9_36/tests/mesh.c
+++ b/dlls/d3dx9_36/tests/mesh.c
@@ -5152,6 +5152,88 @@ static void test_create_skin_info(void)
ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#x\n", hr);
@@ -5241,6 +5241,88 @@ static void test_create_skin_info(void)
ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#lx\n", hr);
}
+static void test_update_skinned_mesh(void)
@@ -207,7 +207,7 @@ index 17c5d9c..e255eac 100644
static void test_convert_adjacency_to_point_reps(void)
{
HRESULT hr;
@@ -10468,6 +10550,7 @@ START_TEST(mesh)
@@ -11484,6 +11566,7 @@ START_TEST(mesh)
D3DXGenerateAdjacencyTest();
test_update_semantics();
test_create_skin_info();
@@ -216,5 +216,5 @@ index 17c5d9c..e255eac 100644
test_convert_point_reps_to_adjacency();
test_weld_vertices();
--
2.1.2
2.38.1

View File

@@ -1,116 +0,0 @@
From 861cd6c6409efce4eb03aad3bc01f5df772e77fb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 6 Feb 2016 01:15:07 +0100
Subject: [PATCH] ddraw: Don't set HWTRANSFORMANDLIGHT flag on d3d7 RGB device.
---
dlls/ddraw/ddraw.c | 9 +++++++++
dlls/ddraw/tests/ddraw7.c | 18 ++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 705d0335d95..1d916f93c4f 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -49,6 +49,7 @@ static struct enum_device_entry
char interface_name[100];
char device_name[100];
const GUID *device_guid;
+ DWORD remove_caps;
} device_list7[] =
{
/* T&L HAL device */
@@ -56,6 +57,7 @@ static struct enum_device_entry
"WINE Direct3D7 Hardware Transform and Lighting acceleration using WineD3D",
"Wine D3D7 T&L HAL",
&IID_IDirect3DTnLHalDevice,
+ 0,
},
/* HAL device */
@@ -63,6 +65,7 @@ static struct enum_device_entry
"WINE Direct3D7 Hardware acceleration using WineD3D",
"Direct3D HAL",
&IID_IDirect3DHALDevice,
+ 0,
},
/* RGB device */
@@ -70,6 +73,7 @@ static struct enum_device_entry
"WINE Direct3D7 RGB Software Emulation using WineD3D",
"Wine D3D7 RGB",
&IID_IDirect3DRGBDevice,
+ D3DDEVCAPS_HWTRANSFORMANDLIGHT,
},
};
@@ -3749,6 +3753,7 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
{
struct ddraw *ddraw = impl_from_IDirect3D7(iface);
D3DDEVICEDESC7 device_desc7;
+ DWORD dev_caps;
HRESULT hr;
size_t i;
@@ -3765,11 +3770,15 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
return hr;
}
+ dev_caps = device_desc7.dwDevCaps;
+
for (i = 0; i < ARRAY_SIZE(device_list7); i++)
{
HRESULT ret;
device_desc7.deviceGUID = *device_list7[i].device_guid;
+ device_desc7.dwDevCaps = dev_caps & ~device_list7[i].remove_caps;
+
ret = callback(device_list7[i].interface_name, device_list7[i].device_name, &device_desc7, context);
if (ret != DDENUMRET_OK)
{
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index d641595baa2..54cc18b74f2 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -577,6 +577,19 @@ static IDirect3DDevice7 *create_device_ex(HWND window, DWORD coop_level, const G
return device;
}
+static HRESULT WINAPI enum_devtype_software_cb(char *desc_str, char *name, D3DDEVICEDESC7 *desc, void *ctx)
+{
+ BOOL *software_ok = ctx;
+ if (IsEqualGUID(&desc->deviceGUID, &IID_IDirect3DRGBDevice))
+ {
+ ok(!(desc->dwDevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT),
+ "RGB emulation device shouldn't have HWTRANSFORMANDLIGHT flag\n");
+ *software_ok = TRUE;
+ return DDENUMRET_CANCEL;
+ }
+ return DDENUMRET_OK;
+}
+
static IDirect3DDevice7 *create_device(HWND window, DWORD coop_level)
{
const GUID *device_guid = &IID_IDirect3DHALDevice;
@@ -6719,6 +6732,7 @@ static void test_surface_lock(void)
ULONG refcount;
DDPIXELFORMAT z_fmt;
BOOL hal_ok = FALSE;
+ BOOL software_ok = FALSE;
const GUID *devtype = &IID_IDirect3DHALDevice;
D3DDEVICEDESC7 device_desc;
BOOL cubemap_supported;
@@ -6844,6 +6858,10 @@ static void test_surface_lock(void)
if (hal_ok)
devtype = &IID_IDirect3DTnLHalDevice;
+ hr = IDirect3D7_EnumDevices(d3d, enum_devtype_software_cb, &software_ok);
+ ok(SUCCEEDED(hr), "Failed to enumerate devices, hr %#x.\n", hr);
+ if (!software_ok) win_skip("RGB device not found, unable to check flags\n");
+
memset(&z_fmt, 0, sizeof(z_fmt));
hr = IDirect3D7_EnumZBufferFormats(d3d, devtype, enum_z_fmt, &z_fmt);
if (FAILED(hr) || !z_fmt.dwSize)
--
2.20.1

View File

@@ -8,3 +8,4 @@
# The Sims Online
Fixes: [19153] Resident Evil 1 fails to start (needs IDirect3D3::EnumDevices() to return a device named "RGB Emulation")
Depends: ddraw-Device_Caps
Disabled: True

View File

@@ -1,69 +0,0 @@
From b1690a5bc6ea4cf670f3117f8caf9e229cd1f47d Mon Sep 17 00:00:00 2001
From: Lucian Poston <lucianposton@pm.me>
Date: Sun, 20 May 2018 21:40:39 -0700
Subject: [PATCH] dwrite: Test IDWriteTextFormat with nonexistent font
Signed-off-by: Lucian Poston <lucianposton@pm.me>
---
dlls/dwrite/tests/layout.c | 45 ++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index d19f91311db..d89ccc9d995 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -3290,6 +3290,51 @@ todo_wine
ok(metrics.lineCount == 1, "Unexpected line count %u.\n", metrics.lineCount);
IDWriteTextLayout_Release(layout);
+ IDWriteTextFormat_Release(format);
+
+ /* nonexistent font */
+ hr = IDWriteFactory_CreateTextFormat(factory, L"Blah!", NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
+ DWRITE_FONT_STRETCH_NORMAL, 10.0, L"en-us", &format);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IDWriteFactory_CreateTextLayout(factory, strW, 4, format, 500.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ count = 0;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+todo_wine
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+todo_wine
+ ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth);
+todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+
+ IDWriteTextLayout_Release(layout);
+
IDWriteTextFormat_Release(format);
IDWriteFactory_Release(factory);
}
--
2.17.1

View File

@@ -1,332 +0,0 @@
From 79b9dda91ac0e33add2252f9ad5c10ba752ddabb Mon Sep 17 00:00:00 2001
From: Lucian Poston <lucianposton@pm.me>
Date: Wed, 23 May 2018 00:01:42 -0700
Subject: [PATCH] dwrite: Test GetMetrics with custom fontcollection
Signed-off-by: Lucian Poston <lucianposton@pm.me>
---
dlls/dwrite/tests/layout.c | 280 ++++++++++++++++++++++++++++++++++++-
1 file changed, 279 insertions(+), 1 deletion(-)
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 9a450495146..9f1051b4905 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -3363,7 +3363,7 @@ todo_wine
DWRITE_FONT_STRETCH_NORMAL, 10.0, L"en-us", &format);
ok(hr == S_OK, "got 0x%08x\n", hr);
- hr = IDWriteFactory_CreateTextLayout(factory, strW, 4, format, 500.0, 1000.0, &layout);
+ hr = IDWriteFactory_CreateTextLayout(factory, L"A", 4, format, 500.0, 1000.0, &layout);
ok(hr == S_OK, "got 0x%08x\n", hr);
count = 0;
@@ -4546,6 +4546,7 @@ static void test_SetWordWrapping(void)
/* Collection dedicated to fallback testing */
static const WCHAR g_blahfontW[] = {'B','l','a','h',0};
+static const WCHAR g_fontNotInCollectionW[] = {'n','o','t','B','l','a','h',0};
static HRESULT WINAPI fontcollection_QI(IDWriteFontCollection *iface, REFIID riid, void **obj)
{
if (IsEqualIID(riid, &IID_IDWriteFontCollection) || IsEqualIID(riid, &IID_IUnknown)) {
@@ -4607,6 +4608,9 @@ static HRESULT WINAPI fontcollection_FindFamilyName(IDWriteFontCollection *iface
*index = 123456;
*exists = TRUE;
return S_OK;
+ } else if (!lstrcmpW(name, g_fontNotInCollectionW)) {
+ *exists = FALSE;
+ return S_OK;
}
ok(0, "unexpected call, name %s\n", wine_dbgstr_w(name));
return E_NOTIMPL;
@@ -6405,6 +6409,279 @@ static void test_layout_range_length(void)
IDWriteFactory_Release(factory);
}
+static void test_GetMetrics_with_custom_fontcollection(void)
+{
+ static const WCHAR emptystringW[] = {0};
+ static const WCHAR mappedW[] = {'a','b','c','d',0};
+ static const WCHAR notmappedW[] = {'a',0xffff,'b',0}; // u+ffff = not a unicode character
+ DWRITE_CLUSTER_METRICS clusters[4];
+ DWRITE_TEXT_METRICS metrics;
+ IDWriteTextFormat *format;
+ IDWriteTextLayout *layout;
+ IDWriteFactory *factory;
+ UINT32 count, i;
+ FLOAT width;
+ HRESULT hr;
+
+ factory = create_factory();
+
+ /* font is in font collection */
+ hr = IDWriteFactory_CreateTextFormat(factory, g_blahfontW, &fallbackcollection,
+ DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
+ DWRITE_FONT_STRETCH_NORMAL, 10.0, L"en-us", &format);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* text is mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, mappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* text is not mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, notmappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* zero-length empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 0, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 0, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ IDWriteTextFormat_Release(format);
+
+ /* font not in font collection */
+ hr = IDWriteFactory_CreateTextFormat(factory, g_fontNotInCollectionW, &fallbackcollection,
+ DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
+ DWRITE_FONT_STRETCH_NORMAL, 10.0, L"en-us", &format);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* text is mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, mappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* text is not mapped by fontfallback */
+ hr = IDWriteFactory_CreateTextLayout(factory, notmappedW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 4, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(count == 4, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ /* zero-length empty string */
+ hr = IDWriteFactory_CreateTextLayout(factory, emptystringW, 0, format, 1000.0, 1000.0, &layout);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ count = 9999;
+ hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(count == 0, "got %u\n", count);
+ for (i = 0, width = 0.0; i < count; i++)
+ width += clusters[i].width;
+ memset(&metrics, 0xcc, sizeof(metrics));
+ hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
+ todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ todo_wine
+ ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
+ todo_wine
+ ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
+ todo_wine
+ ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
+ todo_wine
+ ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
+ metrics.widthIncludingTrailingWhitespace, width);
+ todo_wine
+ ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
+ todo_wine
+ ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
+ todo_wine
+ ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
+ todo_wine
+ ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
+ todo_wine
+ ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
+ IDWriteTextLayout_Release(layout);
+
+ IDWriteTextFormat_Release(format);
+
+ IDWriteFactory_Release(factory);
+}
+
START_TEST(layout)
{
IDWriteFactory *factory;
@@ -6438,6 +6715,7 @@ START_TEST(layout)
test_SetFontStretch();
test_SetStrikethrough();
test_GetMetrics();
+ test_GetMetrics_with_custom_fontcollection();
test_SetFlowDirection();
test_SetDrawingEffect();
test_GetLineMetrics();
--
2.20.1

View File

@@ -1,311 +0,0 @@
From bf4cc6cfca946ff719763bb7be25fe268577f0d3 Mon Sep 17 00:00:00 2001
From: Lucian Poston <lucianposton@pm.me>
Date: Mon, 21 May 2018 18:13:00 -0700
Subject: [PATCH] dwrite: Use font fallback when mapping characters
Signed-off-by: Lucian Poston <lucianposton@pm.me>
---
dlls/dwrite/analyzer.c | 77 +++++++++++++++++++++++++++++---------
dlls/dwrite/layout.c | 6 +++
dlls/dwrite/tests/layout.c | 54 ++++----------------------
3 files changed, 73 insertions(+), 64 deletions(-)
diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index 7ffcfa8070c..aab309c2a8c 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -2094,6 +2094,7 @@ static HRESULT fallback_get_fallback_font(struct dwrite_fontfallback *fallback,
IDWriteFont **mapped_font)
{
const struct fallback_mapping *mapping;
+ IDWriteFontCollection *collection;
HRESULT hr;
UINT32 i;
@@ -2105,9 +2106,15 @@ static HRESULT fallback_get_fallback_font(struct dwrite_fontfallback *fallback,
return E_FAIL;
}
+ if (mapping->collection) {
+ collection = mapping->collection;
+ } else {
+ collection = (IDWriteFontCollection *)fallback->systemcollection;
+ }
+
/* Now let's see what fallback can handle. Pick first font that could be created. */
for (i = 0; i < mapping->families_count; i++) {
- hr = create_matching_font((IDWriteFontCollection *)fallback->systemcollection, mapping->families[i],
+ hr = create_matching_font(collection, mapping->families[i],
weight, style, stretch, mapped_font);
if (hr == S_OK) {
TRACE("Created fallback font using family %s.\n", debugstr_w(mapping->families[i]));
@@ -2164,32 +2171,66 @@ static HRESULT WINAPI fontfallback_MapCharacters(IDWriteFontFallback1 *iface, ID
if (basefamily && *basefamily) {
hr = create_matching_font(basecollection, basefamily, weight, style, stretch, ret_font);
- if (FAILED(hr))
- goto done;
-
- hr = fallback_map_characters(*ret_font, text, length, mapped_length);
- if (FAILED(hr))
- goto done;
+ if (SUCCEEDED(hr)) {
+ hr = fallback_map_characters(*ret_font, text, length, mapped_length);
+ if (FAILED(hr)) {
+ IDWriteFont_Release(*ret_font);
+ *ret_font = NULL;
+ WARN("Mapping with requested family %s failed, hr %#x.\n", debugstr_w(basefamily), hr);
+ }
+ }
}
if (!*mapped_length) {
- IDWriteFont *mapped_font;
+ if (*ret_font) {
+ IDWriteFont_Release(*ret_font);
+ *ret_font = NULL;
+ }
- hr = fallback_get_fallback_font(fallback, text, length, weight, style, stretch, mapped_length, &mapped_font);
+ hr = fallback_get_fallback_font(fallback, text, length, weight, style, stretch, mapped_length, ret_font);
if (FAILED(hr)) {
- /* fallback wasn't found, keep base font if any, so we can get at least some visual output */
- if (*ret_font) {
- *mapped_length = length;
- hr = S_OK;
- }
+ WARN("Mapping with fallback families failed, hr %#x.\n", hr);
}
- else {
- if (*ret_font)
- IDWriteFont_Release(*ret_font);
- *ret_font = mapped_font;
+ }
+
+ /**
+ * This is a rough hack. We search the system font collection because
+ * the system fontfallback, which would have been searched above, is not
+ * fully implemented as it isn't populated with any system fonts. Once
+ * implemented, the block below can be removed.
+ * */
+ if (!*mapped_length) {
+ IDWriteFontFamily *family;
+ IDWriteFont *font;
+ UINT32 i, count = IDWriteFontCollection_GetFontFamilyCount((IDWriteFontCollection *)fallback->systemcollection);
+ for (i = 0; i < count; i++) {
+ hr = IDWriteFontCollection_GetFontFamily((IDWriteFontCollection *)fallback->systemcollection, i, &family);
+ if (FAILED(hr)) {
+ ERR("Failed to get font family.\n");
+ continue;
+ }
+
+ hr = IDWriteFontFamily_GetFirstMatchingFont(family, weight, stretch, style, &font);
+ IDWriteFontFamily_Release(family);
+ if (FAILED(hr)) {
+ continue;
+ }
+
+ hr = fallback_map_characters(font, text, length, mapped_length);
+ if (SUCCEEDED(hr) && mapped_length > 0) {
+ *ret_font = font;
+ break;
+ }
+
+ IDWriteFont_Release(font);
}
}
+ if (!*mapped_length) {
+ *mapped_length = length == 0 ? 0 : 1;
+ hr = S_OK;
+ }
+
done:
free(buff);
return hr;
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index ba80c3f70e8..c7845f9b675 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -725,6 +725,12 @@ static HRESULT layout_resolve_fonts(struct dwrite_textlayout *layout)
goto fatal;
}
+ if (!font) {
+ hr = E_FAIL;
+ WARN("Failed to create font face, hr %#x.\n", hr);
+ goto fatal;
+ }
+
hr = IDWriteFont_CreateFontFace(font, &run->run.fontFace);
IDWriteFont_Release(font);
if (FAILED(hr)) {
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 3efedd3df95..07687c76c60 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -3366,35 +3366,23 @@ static void test_GetMetrics(void)
count = 0;
hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
-todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
-todo_wine
ok(count == 4, "got %u\n", count);
for (i = 0, width = 0.0; i < count; i++)
width += clusters[i].width;
memset(&metrics, 0xcc, sizeof(metrics));
hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
-todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
-todo_wine
ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
-todo_wine
ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
-todo_wine
ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
-todo_wine
ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
metrics.widthIncludingTrailingWhitespace, width);
-todo_wine
ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
-todo_wine
ok(metrics.layoutWidth == 500.0, "got %.2f\n", metrics.layoutWidth);
-todo_wine
ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
-todo_wine
ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
-todo_wine
ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
IDWriteTextLayout_Release(layout);
@@ -4688,16 +4676,12 @@ static void test_MapCharacters(void)
font = NULL;
hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 0, 1, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale);
-todo_wine {
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(mappedlength == 1, "got %u\n", mappedlength);
-}
ok(scale == 1.0f, "got %f\n", scale);
- todo_wine
ok(font != NULL, "got %p\n", font);
-if (font) {
IDWriteFont_Release(font);
-}
+
/* same Latin text, full length */
g_source = L"abc";
mappedlength = 0;
@@ -4705,16 +4689,12 @@ if (font) {
font = NULL;
hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 0, 3, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale);
-todo_wine {
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(mappedlength == 3, "got %u\n", mappedlength);
-}
ok(scale == 1.0f, "got %f\n", scale);
- todo_wine
ok(font != NULL, "got %p\n", font);
-if (font) {
IDWriteFont_Release(font);
-}
+
/* string 'a\x3058b' */
g_source = str2W;
mappedlength = 0;
@@ -4722,32 +4702,24 @@ if (font) {
font = NULL;
hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 0, 3, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale);
-todo_wine {
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(mappedlength == 1, "got %u\n", mappedlength);
-}
ok(scale == 1.0f, "got %f\n", scale);
- todo_wine
ok(font != NULL, "got %p\n", font);
-if (font) {
IDWriteFont_Release(font);
-}
+
g_source = str2W;
mappedlength = 0;
scale = 0.0f;
font = NULL;
hr = IDWriteFontFallback_MapCharacters(fallback, &analysissource, 1, 2, NULL, NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, &mappedlength, &font, &scale);
-todo_wine {
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(mappedlength == 1, "got %u\n", mappedlength);
-}
ok(scale == 1.0f, "got %f\n", scale);
- todo_wine
ok(font != NULL, "got %p\n", font);
-if (font) {
IDWriteFont_Release(font);
-}
+
/* Try with explicit collection, Tahoma will be forced. */
/* 1. Latin part */
g_source = str2W;
@@ -4770,7 +4742,10 @@ if (font) {
IDWriteLocalizedStrings_Release(strings);
IDWriteFont_Release(font);
- /* 2. Hiragana character, force Tahoma font does not support Japanese */
+ /**
+ * 2. Hiragana character. Tahoma is requested, but it doesn't support
+ * Japanese. A NULL font is returned if there is no fallback for Japanese.
+ */
g_source = str2W;
mappedlength = 0;
scale = 0.0f;
@@ -4780,7 +4755,6 @@ if (font) {
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(mappedlength == 1, "got %u\n", mappedlength);
ok(scale == 1.0f, "got %f\n", scale);
- ok(font != NULL, "got %p\n", font);
exists = FALSE;
hr = IDWriteFont_GetInformationalStrings(font, DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES, &strings, &exists);
@@ -6667,34 +6641,22 @@ static void test_GetMetrics_with_custom_fontcollection(void)
ok(hr == S_OK, "got 0x%08x\n", hr);
count = 9999;
hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
- todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine
ok(count == 4, "got %u\n", count);
for (i = 0, width = 0.0; i < count; i++)
width += clusters[i].width;
memset(&metrics, 0xcc, sizeof(metrics));
hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
- todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine
ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
- todo_wine
ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
- todo_wine
ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
- todo_wine
ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
metrics.widthIncludingTrailingWhitespace, width);
- todo_wine
ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
- todo_wine
ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
- todo_wine
ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
- todo_wine
ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
- todo_wine
ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
IDWriteTextLayout_Release(layout);
--
2.35.1

View File

@@ -1,128 +0,0 @@
From 838b8a5edeca6c06c20bdc301f4d5d658e835cc9 Mon Sep 17 00:00:00 2001
From: Lucian Poston <lucianposton@pm.me>
Date: Wed, 23 May 2018 05:59:20 -0700
Subject: [PATCH 5/6] dwrite: Use MapCharacters for non-visual characters
Signed-off-by: Lucian Poston <lucianposton@pm.me>
---
dlls/dwrite/layout.c | 22 +++++++++++++++-------
dlls/dwrite/tests/layout.c | 24 ------------------------
2 files changed, 15 insertions(+), 31 deletions(-)
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index df3f3beabb..5d06bf9348 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -822,7 +822,8 @@ static HRESULT layout_resolve_fonts(struct dwrite_textlayout *layout)
LIST_FOR_EACH_ENTRY(r, &layout->runs, struct layout_run, entry) {
struct regular_layout_run *run = &r->u.regular;
IDWriteFont *font;
- UINT32 length;
+ UINT32 length, mapped_length;
+ FLOAT scale;
if (r->kind == LAYOUT_RUN_INLINE)
continue;
@@ -830,12 +831,19 @@ static HRESULT layout_resolve_fonts(struct dwrite_textlayout *layout)
range = get_layout_range_by_pos(layout, run->descr.textPosition);
if (run->sa.shapes == DWRITE_SCRIPT_SHAPES_NO_VISUAL) {
- IDWriteFontCollection *collection;
-
- collection = range->collection ? range->collection : sys_collection;
-
- if (FAILED(hr = create_matching_font(collection, range->fontfamily, range->weight, range->style,
- range->stretch, &font))) {
+ hr = IDWriteFontFallback_MapCharacters(fallback,
+ (IDWriteTextAnalysisSource *)&layout->IDWriteTextAnalysisSource1_iface,
+ run->descr.textPosition,
+ run->descr.stringLength,
+ range->collection,
+ range->fontfamily,
+ range->weight,
+ range->style,
+ range->stretch,
+ &mapped_length,
+ &font,
+ &scale);
+ if (FAILED(hr)) {
WARN("%s: failed to create matching font for non visual run, family %s, collection %p\n",
debugstr_rundescr(&run->descr), debugstr_w(range->fontfamily), range->collection);
break;
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 430bb1f0eb..cf1d5d7060 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -5713,34 +5713,22 @@ static void test_GetMetrics_with_custom_fontcollection(void)
ok(hr == S_OK, "got 0x%08x\n", hr);
count = 9999;
hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
- todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine
ok(count == 4, "got %u\n", count);
for (i = 0, width = 0.0; i < count; i++)
width += clusters[i].width;
memset(&metrics, 0xcc, sizeof(metrics));
hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
- todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine
ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
- todo_wine
ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
- todo_wine
ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
- todo_wine
ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
metrics.widthIncludingTrailingWhitespace, width);
- todo_wine
ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
- todo_wine
ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
- todo_wine
ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
- todo_wine
ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
- todo_wine
ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
IDWriteTextLayout_Release(layout);
@@ -5749,34 +5737,22 @@ static void test_GetMetrics_with_custom_fontcollection(void)
ok(hr == S_OK, "got 0x%08x\n", hr);
count = 9999;
hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
- todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine
ok(count == 4, "got %u\n", count);
for (i = 0, width = 0.0; i < count; i++)
width += clusters[i].width;
memset(&metrics, 0xcc, sizeof(metrics));
hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
- todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine
ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
- todo_wine
ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
- todo_wine
ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
- todo_wine
ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
metrics.widthIncludingTrailingWhitespace, width);
- todo_wine
ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
- todo_wine
ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
- todo_wine
ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
- todo_wine
ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
- todo_wine
ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
IDWriteTextLayout_Release(layout);
--
2.18.0

View File

@@ -1,96 +0,0 @@
From a0f4bde380003f7a8e3b713028215bf985dbb3c0 Mon Sep 17 00:00:00 2001
From: Lucian Poston <lucianposton@pm.me>
Date: Wed, 23 May 2018 07:03:44 -0700
Subject: [PATCH 6/6] dwrite: Use MapCharacters for dummy line metrics
Fixes: https://bugs.winehq.org/show_bug.cgi?id=44052
Signed-off-by: Lucian Poston <lucianposton@pm.me>
---
dlls/dwrite/layout.c | 29 +++++++++++++++++++++++++++++
dlls/dwrite/tests/layout.c | 8 --------
2 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index 5d06bf9348..2213717f92 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -1808,8 +1808,11 @@ static HRESULT layout_set_dummy_line_metrics(struct dwrite_textlayout *layout, U
DWRITE_FONT_METRICS fontmetrics;
struct layout_range *range;
IDWriteFontFace *fontface;
+ IDWriteFontFallback *fallback;
IDWriteFont *font;
HRESULT hr;
+ UINT32 mapped_length;
+ FLOAT scale;
range = get_layout_range_by_pos(layout, pos);
hr = create_matching_font(range->collection,
@@ -1818,8 +1821,34 @@ static HRESULT layout_set_dummy_line_metrics(struct dwrite_textlayout *layout, U
range->style,
range->stretch,
&font);
+
+ if (FAILED(hr)) {
+ if (layout->format.fallback) {
+ fallback = layout->format.fallback;
+ IDWriteFontFallback_AddRef(fallback);
+ } else if (FAILED(hr = IDWriteFactory7_GetSystemFontFallback(layout->factory, &fallback))) {
+ WARN("Failed to get system fallback, hr %#x.\n", hr);
+ return hr;
+ }
+
+ hr = IDWriteFontFallback_MapCharacters(fallback,
+ (IDWriteTextAnalysisSource *)&layout->IDWriteTextAnalysisSource1_iface,
+ pos,
+ layout->len,
+ range->collection,
+ range->fontfamily,
+ range->weight,
+ range->style,
+ range->stretch,
+ &mapped_length,
+ &font,
+ &scale);
+ IDWriteFontFallback_Release(fallback);
+ }
if (FAILED(hr))
return hr;
+ if (font == NULL)
+ return S_OK;
hr = IDWriteFont_CreateFontFace(font, &fontface);
IDWriteFont_Release(font);
if (FAILED(hr))
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index cf1d5d7060..6ed7b3c334 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -5767,24 +5767,16 @@ static void test_GetMetrics_with_custom_fontcollection(void)
width += clusters[i].width;
memset(&metrics, 0xcc, sizeof(metrics));
hr = IDWriteTextLayout_GetMetrics(layout, &metrics);
- todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine
ok(metrics.left == 0.0, "got %.2f\n", metrics.left);
- todo_wine
ok(metrics.top == 0.0, "got %.2f\n", metrics.top);
- todo_wine
ok(metrics.width == width, "got %.2f, expected %.2f\n", metrics.width, width);
- todo_wine
ok(metrics.widthIncludingTrailingWhitespace == width, "got %.2f, expected %.2f\n",
metrics.widthIncludingTrailingWhitespace, width);
todo_wine
ok(metrics.height > 0.0, "got %.2f\n", metrics.height);
- todo_wine
ok(metrics.layoutWidth == 1000.0, "got %.2f\n", metrics.layoutWidth);
- todo_wine
ok(metrics.layoutHeight == 1000.0, "got %.2f\n", metrics.layoutHeight);
- todo_wine
ok(metrics.maxBidiReorderingDepth == 1, "got %u\n", metrics.maxBidiReorderingDepth);
todo_wine
ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
--
2.18.0

View File

@@ -1 +0,0 @@
Fixes: [44052] - Support for font fallback.

View File

@@ -1,4 +1,4 @@
From f2401390227b40c68bb97983fc028d5060a70e8c Mon Sep 17 00:00:00 2001
From 3069c254173b551cde229830af857fc5e3abd911 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Wed, 13 Jun 2018 10:44:49 -0500
Subject: [PATCH] configure: Check for sys/eventfd.h, ppoll(), and shm_open().
@@ -12,18 +12,18 @@ Although perhaps we shouldn't since the server doesn't do this.
2 files changed, 17 insertions(+)
diff --git a/configure.ac b/configure.ac
index 9683798b57b..b4465a98794 100644
index f4e454ae217..de28e5228e9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -478,6 +478,7 @@ AC_CHECK_HEADERS(\
@@ -464,6 +464,7 @@ AC_CHECK_HEADERS(\
sys/cdio.h \
sys/epoll.h \
sys/event.h \
+ sys/eventfd.h \
sys/extattr.h \
sys/filio.h \
sys/ipc.h \
sys/link.h \
@@ -1991,6 +1992,7 @@ AC_CHECK_FUNCS(\
@@ -2044,6 +2045,7 @@ AC_CHECK_FUNCS(\
port_create \
posix_fadvise \
posix_fallocate \
@@ -31,7 +31,7 @@ index 9683798b57b..b4465a98794 100644
prctl \
proc_pidinfo \
sched_yield \
@@ -2033,6 +2035,12 @@ case $host_os in
@@ -2085,6 +2087,12 @@ case $host_os in
;;
esac
@@ -41,14 +41,14 @@ index 9683798b57b..b4465a98794 100644
+ test "$ac_res" = "none required" || AC_SUBST(RT_LIBS,"$ac_res")])
+LIBS=$ac_save_LIBS
+
dnl **** Check for OpenLDAP ***
if test "x$with_ldap" != "xno"
then
AC_CACHE_CHECK([for sched_setaffinity],wine_cv_have_sched_setaffinity,
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[#include <sched.h>]], [[sched_setaffinity(0, 0, 0);]])],[wine_cv_have_sched_setaffinity=yes],[wine_cv_have_sched_setaffinity=no]))
diff --git a/include/config.h.in b/include/config.h.in
index 197c3b97f09..13f822cb36c 100644
index 509dd2869bf..d6b19f96a9c 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -362,6 +362,9 @@
@@ -335,6 +335,9 @@
/* Define to 1 if you have the `posix_fallocate' function. */
#undef HAVE_POSIX_FALLOCATE
@@ -58,7 +58,7 @@ index 197c3b97f09..13f822cb36c 100644
/* Define to 1 if you have the `prctl' function. */
#undef HAVE_PRCTL
@@ -434,6 +437,9 @@
@@ -404,6 +407,9 @@
/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
#undef HAVE_SG_IO_HDR_T_INTERFACE_ID
@@ -68,7 +68,7 @@ index 197c3b97f09..13f822cb36c 100644
/* Define if sigaddset is supported */
#undef HAVE_SIGADDSET
@@ -574,6 +580,9 @@
@@ -553,6 +559,9 @@
/* Define to 1 if you have the <sys/epoll.h> header file. */
#undef HAVE_SYS_EPOLL_H
@@ -79,5 +79,5 @@ index 197c3b97f09..13f822cb36c 100644
#undef HAVE_SYS_EVENT_H
--
2.33.0
2.38.1

View File

@@ -1,4 +1,4 @@
From 846f2603e9d2a3a3b5a56b0e1140bb49a95053a6 Mon Sep 17 00:00:00 2001
From ec18233558b62aa736b5ecf20d2f7487e2823286 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,7 +15,7 @@ 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 c81a2112632..da20dff9f56 100644
index 3b9446fe224..776faec63e4 100644
--- a/server/Makefile.in
+++ b/server/Makefile.in
@@ -11,6 +11,7 @@ C_SRCS = \
@@ -28,7 +28,7 @@ index c81a2112632..da20dff9f56 100644
file.c \
diff --git a/server/esync.c b/server/esync.c
new file mode 100644
index 00000000000..b9dbfa322bc
index 00000000000..35b4833fd4c
--- /dev/null
+++ b/server/esync.c
@@ -0,0 +1,318 @@
@@ -158,7 +158,7 @@ index 00000000000..b9dbfa322bc
+ NULL, /* satisfied */
+ no_signal, /* signal */
+ no_get_fd, /* get_fd */
+ no_map_access, /* map_access */
+ default_map_access, /* map_access */
+ default_get_sd, /* get_sd */
+ default_set_sd, /* set_sd */
+ default_get_full_name, /* get_full_name */
@@ -403,10 +403,10 @@ index a134d811d82..3436b0871b4 100644
set_current_time();
init_scheduler();
diff --git a/server/protocol.def b/server/protocol.def
index 6bfcda213a4..6b0e0e6f6e4 100644
index 99df502e398..9e15ada5bd0 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3738,7 +3738,6 @@ struct handle_info
@@ -3777,7 +3777,6 @@ struct handle_info
obj_handle_t handle; /* process handle */
@END
@@ -414,7 +414,7 @@ index 6bfcda213a4..6b0e0e6f6e4 100644
/* Iterate thread list for process */
@REQ(get_next_thread)
obj_handle_t process; /* process handle */
@@ -3749,3 +3748,27 @@ struct handle_info
@@ -3788,3 +3787,27 @@ struct handle_info
@REPLY
obj_handle_t handle; /* next thread handle */
@END
@@ -443,5 +443,5 @@ index 6bfcda213a4..6b0e0e6f6e4 100644
+ unsigned int shm_idx;
+@END
--
2.35.1
2.38.1

View File

@@ -1,4 +1,4 @@
From c204c9ed2a8504868c3cbf487e7a29c4e7254d3f Mon Sep 17 00:00:00 2001
From 271f43a1fafb19e1404b05ec597b504ecad74784 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 12:09:22 -0500
Subject: [PATCH] ntdll: Create eventfd-based objects for semaphores.
@@ -16,10 +16,10 @@ Subject: [PATCH] ntdll: Create eventfd-based objects for semaphores.
create mode 100644 dlls/ntdll/unix/esync.h
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
index 185bc563e68..d7c757cab32 100644
index 07688a5fcf6..4e490c475a2 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -46,6 +46,7 @@ C_SRCS = \
@@ -47,6 +47,7 @@ C_SRCS = \
unix/cdrom.c \
unix/debug.c \
unix/env.c \
@@ -346,7 +346,7 @@ index 00000000000..a50a755149a
+
+extern int receive_fd( obj_handle_t *handle ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index 10884a7a673..28cc48e04bf 100644
index 35f2e5f986f..4d95c29ab24 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -89,6 +89,7 @@
@@ -357,8 +357,8 @@ index 10884a7a673..28cc48e04bf 100644
#include "wine/list.h"
#include "wine/debug.h"
@@ -2082,6 +2083,7 @@ static void start_main_thread(void)
signal_init_thread( teb );
@@ -2188,6 +2189,7 @@ static void start_main_thread(void)
signal_alloc_thread( teb );
dbg_init();
startup_info_size = server_init_process();
+ esync_init();
@@ -366,7 +366,7 @@ index 10884a7a673..28cc48e04bf 100644
init_cpu_info();
init_files();
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
index 6a3224d8385..de65f936a59 100644
index b7d8733f2bc..8cd5f0474e6 100644
--- a/dlls/ntdll/unix/server.c
+++ b/dlls/ntdll/unix/server.c
@@ -106,7 +106,7 @@ sigset_t server_block_set; /* signals to block during server calls */
@@ -378,7 +378,7 @@ index 6a3224d8385..de65f936a59 100644
/* atomically exchange a 64-bit value */
static inline LONG64 interlocked_xchg64( LONG64 *dest, LONG64 val )
@@ -803,7 +803,7 @@ void wine_server_send_fd( int fd )
@@ -834,7 +834,7 @@ void wine_server_send_fd( int fd )
*
* Receive a file descriptor passed from the server.
*/
@@ -388,7 +388,7 @@ index 6a3224d8385..de65f936a59 100644
struct iovec vec;
struct msghdr msghdr;
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index 442243d8bcf..72cbf92f93c 100644
index 9112572c67d..c5f30428f79 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -64,6 +64,7 @@
@@ -399,7 +399,7 @@ index 442243d8bcf..72cbf92f93c 100644
WINE_DEFAULT_DEBUG_CHANNEL(sync);
@@ -262,6 +263,9 @@ NTSTATUS WINAPI NtCreateSemaphore( HANDLE *handle, ACCESS_MASK access, const OBJ
@@ -273,6 +274,9 @@ NTSTATUS WINAPI NtCreateSemaphore( HANDLE *handle, ACCESS_MASK access, const OBJ
if (max <= 0 || initial < 0 || initial > max) return STATUS_INVALID_PARAMETER;
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
@@ -422,5 +422,5 @@ index b9dbfa322bc..99e57eca44c 100644
int do_esync(void)
{
--
2.34.1
2.38.1

View File

@@ -1,4 +1,4 @@
From 4c255f91363e09892de43bf5f3b991ef5ccce3b2 Mon Sep 17 00:00:00 2001
From 06faa163af3dd5fa6e4794bf244c662533a88b69 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 12:16:34 -0500
Subject: [PATCH] ntdll: Implement NtReleaseSemaphore().
@@ -90,12 +90,12 @@ index a50a755149a..09838e95535 100644
/* We have to synchronize on the fd cache mutex so that our calls to receive_fd
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index 72cbf92f93c..db992f3a9ad 100644
index fff4970549b..fbd28292524 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -348,6 +348,9 @@ NTSTATUS WINAPI NtReleaseSemaphore( HANDLE handle, ULONG count, ULONG *previous
@@ -359,6 +359,9 @@ NTSTATUS WINAPI NtReleaseSemaphore( HANDLE handle, ULONG count, ULONG *previous
{
NTSTATUS ret;
unsigned int ret;
+ if (do_esync())
+ return esync_release_semaphore( handle, count, previous );
@@ -104,5 +104,5 @@ index 72cbf92f93c..db992f3a9ad 100644
{
req->handle = wine_server_obj_handle( handle );
--
2.33.0
2.38.1

View File

@@ -1,4 +1,4 @@
From bb4f401e45ff4017600e8037ceb69456c2c0171d Mon Sep 17 00:00:00 2001
From ff044319027197bb9a1f20a19f01d8c299835818 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 14:46:24 -0500
Subject: [PATCH] ntdll: Implement NtSetEvent().
@@ -10,10 +10,10 @@ Subject: [PATCH] ntdll: Implement NtSetEvent().
3 files changed, 20 insertions(+)
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
index e440e9baa4a..b8fb27edf38 100644
index 059d7fd9ca6..410cfd3c2ce 100644
--- a/dlls/ntdll/unix/esync.c
+++ b/dlls/ntdll/unix/esync.c
@@ -316,6 +316,21 @@ NTSTATUS esync_create_event( HANDLE *handle, ACCESS_MASK access,
@@ -314,6 +314,21 @@ NTSTATUS esync_create_event( HANDLE *handle, ACCESS_MASK access,
return create_esync( type, handle, access, attr, initial, 0 );
}
@@ -48,15 +48,15 @@ index d9c7df967f8..b585af047ee 100644
extern NTSTATUS esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEAN wait_any,
BOOLEAN alertable, const LARGE_INTEGER *timeout ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index f3ced2d63b6..686255d4d99 100644
index 7be736927b2..8e793941711 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -429,8 +429,12 @@ NTSTATUS WINAPI NtOpenEvent( HANDLE *handle, ACCESS_MASK access, const OBJECT_AT
@@ -440,8 +440,12 @@ NTSTATUS WINAPI NtOpenEvent( HANDLE *handle, ACCESS_MASK access, const OBJECT_AT
*/
NTSTATUS WINAPI NtSetEvent( HANDLE handle, LONG *prev_state )
{
+ /* This comment is a dummy to make sure this patch applies in the right place. */
NTSTATUS ret;
unsigned int ret;
+ if (do_esync())
+ return esync_set_event( handle );
@@ -65,5 +65,5 @@ index f3ced2d63b6..686255d4d99 100644
{
req->handle = wine_server_obj_handle( handle );
--
2.29.2
2.38.1

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