Compare commits

...

53 Commits
v6.3 ... v6.6

Author SHA1 Message Date
Zebediah Figura
00aab80494 Release v6.6 2021-04-09 17:47:34 -05:00
Zebediah Figura
86424f3ac1 bcrypt-ECDHSecretAgreement: Remove a commented "Disabled: true" directive. 2021-04-09 17:40:52 -05:00
Zebediah Figura
661df7b889 user32-rawinput-*: Replace with new patches from Rémi Bernon. 2021-04-09 17:39:38 -05:00
Zebediah Figura
64ea26c0cb Rebase against a24bdfc2c69c5648cbb3df762149b2647e209a09. 2021-04-09 15:23:33 -05:00
Zebediah Figura
9319c38de2 Rebase against 3269da9b46eaec8e3ea263fc8ecfcd24d3d8b6e6. 2021-04-08 18:18:17 -05:00
Zebediah Figura
03f7334e65 Actually rebase against ac65e1540960e64ce29e40ec19e4eade8369d520. 2021-04-07 18:35:45 -05:00
Zebediah Figura
eb40bf85d6 Rebase against ac65e1540960e64ce29e40ec19e4eade8369d520. 2021-04-07 17:30:55 -05:00
Zebediah Figura
d1169e15ee Rebase against 5a8bc554ef06c4a21d8b49ea8d936299f2cb2f34. 2021-04-06 18:45:52 -05:00
Zebediah Figura
0c295023f1 Rebase against 8d076bc5e46cc11ec94db631e7c608f62d75cee2. 2021-04-06 17:41:23 -05:00
Zebediah Figura
733a420dd7 server-Key_State: Replace with new patches from Rémi Bernon.
This also serves as a rebase against 2fcc1d0ecdebc55a5f515b1390ce715303f6a6ad.
2021-04-02 20:15:01 -05:00
Zebediah Figura
545073aafa Rebase against 97b420224e767b24d89722ff5efeca38a8ecf1e2. 2021-04-01 23:03:15 -05:00
Zebediah Figura
4e2dc89043 Rebase against 29d9659095fd76e303f204050ab4c85d0a0486e4. 2021-03-31 16:49:32 -05:00
Zebediah Figura
2929606a6a msxml3-FreeThreadedXMLHTTP60: Change bug reference to reflect split upstream bug. 2021-03-31 16:04:59 -05:00
Zebediah Figura
d90a798a26 Rebase against 7c62e6b169f18f4a5d5809490f8aebdb5a9375eb. 2021-03-30 17:06:03 -05:00
Zebediah Figura
2e42e7d996 Rebase against 6ca1a92684fcbaa1c569b60411a8036b6d11dc99. 2021-03-29 17:03:49 -05:00
Alistair Leslie-Hughes
34ba08404f Release v6.5 2021-03-28 18:24:50 +11:00
Zebediah Figura
7b199110bb Rebase against 71d41b37a1917cdf20cdb171dc73c20dbfdaeefa. 2021-03-27 10:31:02 -05:00
Alistair Leslie-Hughes
3d3cbfce86 Updated ntdll-Hide_Wine_Exports patchset 2021-03-26 15:05:50 +11:00
Alistair Leslie-Hughes
0547bb4578 Rebase against 34652f37e443a9e7698f66d13df3b4811b1c0cc3. 2021-03-26 10:38:20 +11:00
Zebediah Figura
f20c33fa04 Rebase against 12cfe6826773708e3b15f73b9674ccb959000d8b. 2021-03-24 16:48:35 -05:00
Zebediah Figura
a644c49d6d winmm-Delay_Import_Depends: Remove patch set.
This was fixed upstream at some point.
2021-03-24 11:27:50 -05:00
Zebediah Figura
d2102728fe Rebase against f69c8f018188af49d5a3916f7bb7e3ab984fd3ec. 2021-03-23 17:24:09 -05:00
Zebediah Figura
a93d3b6369 Use source.winehq.org in CI scripts. 2021-03-22 18:20:56 -05:00
Zebediah Figura
09fdb3b5c9 Rebase against d1764a45cfd12f8c5699fd7428cf90f90a2d31ef.
Actually rebase this time.
2021-03-22 18:18:36 -05:00
Zebediah Figura
5897bc1d27 Rebase against 41df83c50e1c3cfdd6e8ffb65de7838f8503632c. 2021-03-22 17:37:48 -05:00
Zebediah Figura
f8b6fde40c Rebase against 41df83c50e1c3cfdd6e8ffb65de7838f8503632c. 2021-03-19 21:15:35 -05:00
Alistair Leslie-Hughes
34d5c3568f Rebase against 6d26689484070b2c4ad4e0e16812c6eb8176cd40. 2021-03-19 14:27:44 +11:00
Zebediah Figura
44af049de7 Rebase against 2828d0820a1661e46f606f28db090d710cef11f4. 2021-03-18 00:32:41 -05:00
Alistair Leslie-Hughes
c747e46d75 Rebase against 4d5824112e13160e538013a25f1c13a124565180. 2021-03-17 09:44:07 +11:00
Zebediah Figura
1f89c15143 Rebase against 23ffd0a7986421958c23cffce138afa389209920. 2021-03-15 18:28:35 -05:00
Alistair Leslie-Hughes
7ec998e17a Release v6.4 2021-03-15 08:31:03 +11:00
Zebediah Figura
186c17f454 ntdll-Junction_Points: Updates from Erich E. Hoover. 2021-03-12 21:53:58 -06:00
Zebediah Figura
4a427fa757 Rebase against 4336ed0b84b3dd3097bbbbf8e4b9de2e4d444ad7. 2021-03-12 16:12:02 -06:00
Alistair Leslie-Hughes
5bcba4ef5a Rebase against 0ae1669ec2798193b11fd2d2ac74d51203f673b2. 2021-03-12 10:33:43 +11:00
Zebediah Figura
acc0de4def Rebase against 580413032c61bc142078d08efb1d1167fe385a97. 2021-03-10 19:40:52 -06:00
Zebediah Figura
3790a70510 setupapi-SPFILENOTIFY_FILEINCABINET: Remove patch set.
This is fixed upstream now.
2021-03-09 17:07:04 -06:00
Alistair Leslie-Hughes
e7c08665ab Rebase against 9107f591d3d73a3b4040db2e13ef51d9846591c9. 2021-03-10 08:55:33 +11:00
Alistair Leslie-Hughes
a11594e19e Merge pull request #77 from Gcenx/master
Add a GitHub action to test building for macOS
2021-03-07 13:14:15 +11:00
Dean M Greer
bbebe570f3 Create macOS.yml 2021-03-06 07:11:22 -05:00
Zebediah Figura
89c049ee68 ntdll-Junction_Points: Updates from Erich E. Hoover. 2021-03-05 21:27:36 -06:00
Zebediah Figura
f4cb879b3d ntdll-NtAlertThreadByThreadId: Include mach/mach.h in unix_private.h.
Thanks to Dean Greer for finding this one.
2021-03-05 21:24:30 -06:00
Zebediah Figura
cb2a6e06e1 Rebase against 5bccf6fc3f309207ef4162df335157649f627f50. 2021-03-05 21:21:19 -06:00
Zebediah Figura
3a33c70a9a Rebase against 31af1aeb7895bddf59a73886b89759f76881bc9e. 2021-03-04 17:50:31 -06:00
Alistair Leslie-Hughes
64efb6f0d3 Added ntdll-RtlFirstFreeAce patchset 2021-03-04 12:06:54 +11:00
Alistair Leslie-Hughes
404b698d44 Rebase against 6d5659103f49db9e045087dd0093acc3b9a4b919. 2021-03-04 11:24:46 +11:00
Erich E. Hoover
a2ca43d98b ntdll-Junction_Points: Fix compilation on MacOS. 2021-03-02 20:26:41 -06:00
Zebediah Figura
0b1ffe4b94 Rebase against 7fa74fa78e2f8fedeea6fa3c796f0f2eb202825e. 2021-03-02 20:22:19 -06:00
Zebediah Figura
5d8901ac21 ntdll-set_full_cpu_context: Remove patch set.
These prefixes are redundant. We're restoring the context from 32-bit code, so
%ss = %ds already, and if we're on this side of the code then our %ss = the
target %ss.

Still, why was the patch written?

Before 44fbc018ed, there was a single path to restore contexts, and it looked
like this:

    output( "2:\tpushl 0x94(%%ecx)\n");     /* SegEs */
    output( "\tpopl %%es\n" );
    output( "\tpushl 0x90(%%ecx)\n");       /* SegFs */
    output( "\tpopl %%fs\n" );
    output( "\tpushl 0x8c(%%ecx)\n");       /* SegGs */
    output( "\tpopl %%gs\n" );

    output( "\tmovl 0x9c(%%ecx),%%edi\n");  /* Edi */
    output( "\tmovl 0xa0(%%ecx),%%esi\n");  /* Esi */
    output( "\tmovl 0xa8(%%ecx),%%edx\n");  /* Edx */
    output( "\tmovl 0xa4(%%ecx),%%ebx\n");  /* Ebx */
    output( "\tmovl 0xb0(%%ecx),%%eax\n");  /* Eax */
    output( "\tmovl 0xb4(%%ecx),%%ebp\n");  /* Ebp */

    output( "\tpushl 0xc8(%%ecx)\n");       /* SegSs */
    output( "\tpopl %%ss\n" );
    output( "\tmovl 0xc4(%%ecx),%%esp\n");  /* Esp */

    output( "\tpushl 0xc0(%%ecx)\n");       /* EFlags */
    output( "\tpushl 0xbc(%%ecx)\n");       /* SegCs */
    output( "\tpushl 0xb8(%%ecx)\n");       /* Eip */
    output( "\tpushl 0x98(%%ecx)\n");       /* SegDs */
    output( "\tmovl 0xac(%%ecx),%%ecx\n");  /* Ecx */

    output( "\tpopl %%ds\n" );
    output( "\tiret\n" );

Very simple: we restore most registers (but not %ds), then switch stacks, then
push control registers and %ds to the current (target) stack, then pop %ds and
iret.

This was vulnerable to signal races:

+    /* As soon as we have switched stacks the context structure could
+     * be invalid (when signal handlers are executed for example). Copy
+     * values on the target stack before changing ESP. */

so 44fbc018ed changed the path to a different one:

    output( "\tpushl 0xc8(%%ecx)\n" );      /* SegSs */
    output( "\tpopl %%es\n" );
    output( "\tmovl 0xc4(%%ecx),%%eax\n" ); /* Esp */
    output( "\tleal -4*4(%%eax),%%eax\n" );

    output( "\tmovl 0xc0(%%ecx),%%edx\n" ); /* EFlags */
    output( "\t.byte 0x26\n\tmovl %%edx,3*4(%%eax)\n" );
    output( "\tmovl 0xbc(%%ecx),%%edx\n" ); /* SegCs */
    output( "\t.byte 0x26\n\tmovl %%edx,2*4(%%eax)\n" );
    output( "\tmovl 0xb8(%%ecx),%%edx\n" ); /* Eip */
    output( "\t.byte 0x26\n\tmovl %%edx,1*4(%%eax)\n" );
    output( "\tmovl 0xb0(%%ecx),%%edx\n" ); /* Eax */
    output( "\t.byte 0x26\n\tmovl %%edx,0*4(%%eax)\n" );

    output( "\tpushl %%es\n" );
    output( "\tpushl 0x98(%%ecx)\n" );      /* SegDs */

    output(" \tpushl 0x94(%%ecx)\n" );      /* SegEs */
    output( "\tpopl %%es\n" );
    output( "\tpushl 0x90(%%ecx)\n");       /* SegFs */
    output( "\tpopl %%fs\n" );
    output( "\tpushl 0x8c(%%ecx)\n");       /* SegGs */
    output( "\tpopl %%gs\n" );

    output( "\tmovl 0x9c(%%ecx),%%edi\n" ); /* Edi */
    output( "\tmovl 0xa0(%%ecx),%%esi\n" ); /* Esi */
    output( "\tmovl 0xa4(%%ecx),%%ebx\n" ); /* Ebx */
    output( "\tmovl 0xa8(%%ecx),%%edx\n" ); /* Edx */
    output( "\tmovl 0xb4(%%ecx),%%ebp\n" ); /* Ebp */
    output( "\tmovl 0xac(%%ecx),%%ecx\n" ); /* Ecx */

    output( "\tpopl %%ds\n" );
    output( "\tpopl %%ss\n" );
    output( "\tmovl %%eax,%%esp\n" );

    output( "\tpopl %%eax\n" );
    output( "\tiret\n" );

That is, we set %es to the target %ss, write control regs onto the target stack
using %es, switch to the target stack, then pop + iret. In this case the %es
overrides make perfect sense: the target stack might be different from ours
(i.e. we are returning to 16-bit code).

Evidently this was invalid:

+    /* Restore the context when the stack segment changes. We can't use
+     * the same code as above because we do not know if the stack segment
+     * is 16 or 32 bit, and 'movl' will throw an exception when we try to
+     * access memory above the limit. */

In 4c8b3f63be1 slackner introduced two different paths. If we need to switch
stacks, we use the original path. (I think it's still vulnerable to signal
races, but we have no way of preventing those.) Meanwhile the other path can be
simplified a bit, since we're already on the target stack:

-    output( "\tpushl 0xc8(%%ecx)\n" );      /* SegSs */
-    output( "\tpopl %%es\n" );
     output( "\tmovl 0xc4(%%ecx),%%eax\n" ); /* Esp */
     output( "\tleal -4*4(%%eax),%%eax\n" );

     output( "\tmovl 0xc0(%%ecx),%%edx\n" ); /* EFlags */
-    output( "\t.byte 0x26\n\tmovl %%edx,3*4(%%eax)\n" );
+    output( "\t.byte 0x36\n\tmovl %%edx,3*4(%%eax)\n" );
     output( "\tmovl 0xbc(%%ecx),%%edx\n" ); /* SegCs */
-    output( "\t.byte 0x26\n\tmovl %%edx,2*4(%%eax)\n" );
+    output( "\t.byte 0x36\n\tmovl %%edx,2*4(%%eax)\n" );
     output( "\tmovl 0xb8(%%ecx),%%edx\n" ); /* Eip */
-    output( "\t.byte 0x26\n\tmovl %%edx,1*4(%%eax)\n" );
+    output( "\t.byte 0x36\n\tmovl %%edx,1*4(%%eax)\n" );
     output( "\tmovl 0xb0(%%ecx),%%edx\n" ); /* Eax */
-    output( "\t.byte 0x26\n\tmovl %%edx,0*4(%%eax)\n" );
+    output( "\t.byte 0x36\n\tmovl %%edx,0*4(%%eax)\n" );

-    output( "\tpushl %%es\n" );
     output( "\tpushl 0x98(%%ecx)\n" );      /* SegDs */

@@ -890,11 +889,37 @@ static void build_call_from_regs_x86(void)
     output( "\tmovl 0xac(%%ecx),%%ecx\n" ); /* Ecx */

     output( "\tpopl %%ds\n" );
-    output( "\tpopl %%ss\n" );
     output( "\tmovl %%eax,%%esp\n" );

     output( "\tpopl %%eax\n" );
     output( "\tiret\n" );

Sebastian got rid of the setting of %es, and replaced the %es prefixes with %ss
prefixes. What I think happened is that he made a subtle mistake—or, well, not a
mistake, but a redundancy. %es: was changed to %ss: by analogy, but it's
actually not necessary: we're operating on the source stack, and we know the
source stack is 32-bit, and we haven't set %ds yet, so %ds == %ss already, and
we can use the %implicit %ds prefix.

Alexandre presumably saw this in bab6ece63, and silently removed them. My guess
is that Sebastian saw that, wasn't sure, but (in the best case) didn't want to
submit his fix upstream until he had checked whether it was actually correct,
and never got around to checking. (Alternatively, he thought that the %ss should
have been retained for clarity, and decided not to try to submit that upstream.)
2021-03-02 20:22:01 -06:00
Zebediah Figura
6b24c39d32 Rebase against 3c2db20f66806074b047b0b3c76aa86ad79e3175. 2021-03-01 16:31:44 -06:00
Zebediah Figura
15f4220e49 Fix some whitespace errors. 2021-02-28 15:17:57 -06:00
Zebediah Figura
b0ddfb4172 Remove obsolete dependencies from some definition files. 2021-02-28 15:09:58 -06:00
Zebediah Figura
0fb17feeaa ntdll-NtQueryVirtualMemory: Remove patch 0007.
K32GetMappedFileName() is implemented upstream now.
2021-02-28 15:06:13 -06:00
Zebediah Figura
ba02aa0e4d ntdll-NtAlertThreadByThreadId: Restore the NTDLL_UNIXLIB_VERSION changes. 2021-02-27 17:16:06 -06:00
207 changed files with 5217 additions and 11091 deletions

128
.github/workflows/macOS.yml vendored Normal file
View File

@@ -0,0 +1,128 @@
name: MacOS
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
wine-staging:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
brew install --cask xquartz
brew install bison \
faudio \
gphoto2 \
gst-plugins-base \
little-cms2 \
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: Run patchinstall.sh --all
run: |
$GITHUB_WORKSPACE/patches/patchinstall.sh DESTDIR=$GITHUB_WORKSPACE/wine --all
- 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
./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)
wine-devel:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
brew install --cask xquartz
brew install bison \
faudio \
gphoto2 \
gst-plugins-base \
little-cms2 \
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

@@ -1,4 +1,4 @@
From 0cf6433af95363c5fbba2af482b2ba50b863dfb7 Mon Sep 17 00:00:00 2001
From a4d9189613ecacb289595663302c1db8676c8d9d 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
@@ -9,7 +9,7 @@ Subject: [PATCH] ntdll: Print a warning message specifying the wine-staging
1 file changed, 15 insertions(+)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 20bc3f977d1..c2187a19397 100644
index 7a714a5aa6d..e5325ec31ff 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -44,6 +44,7 @@ WINE_DECLARE_DEBUG_CHANNEL(relay);
@@ -20,15 +20,15 @@ index 20bc3f977d1..c2187a19397 100644
#ifdef _WIN64
#define DEFAULT_SECURITY_COOKIE_64 (((ULONGLONG)0x00002b99 << 32) | 0x2ddfa232)
@@ -3456,6 +3457,7 @@ static void process_breakpoint(void)
__ENDTRY
@@ -3235,6 +3236,7 @@ void WINAPI LdrShutdownProcess(void)
process_detach();
}
+extern const char * CDECL wine_get_version(void);
/******************************************************************
* LdrInitializeThunk (NTDLL.@)
@@ -3465,6 +3467,9 @@ static void process_breakpoint(void)
* RtlExitUserProcess (NTDLL.@)
@@ -3597,6 +3599,9 @@ static void init_wow64(void)
*/
void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR unknown3, ULONG_PTR unknown4 )
{
@@ -38,7 +38,7 @@ index 20bc3f977d1..c2187a19397 100644
static int attach_done;
int i;
NTSTATUS status;
@@ -3483,6 +3488,16 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR
@@ -3614,6 +3619,16 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR
entry = (void **)&context->u.s.X0;
#endif
@@ -56,5 +56,5 @@ index 20bc3f977d1..c2187a19397 100644
RtlEnterCriticalSection( &loader_section );
--
2.28.0
2.30.2

View File

@@ -1,15 +1,14 @@
From ce5e1fc75139e4de9d92dfe27b4a513a96da013c Mon Sep 17 00:00:00 2001
From cfcc687562d4fa68b507cbf2c29722ef523d26aa Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Thu, 2 Oct 2014 19:53:46 +0200
Subject: [PATCH] winelib: Append '(Staging)' at the end of the version string.
---
Makefile.in | 2 +-
dlls/ntdll/Makefile.in | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
Makefile.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile.in b/Makefile.in
index 307a95b3b1a..61019fed949 100644
index b52495f741f..d5a8cad20da 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -116,7 +116,7 @@ install-manpages:: manpages
@@ -21,15 +20,6 @@ index 307a95b3b1a..61019fed949 100644
programs/winetest/build.rc: dummy
@build="STRINGTABLE { 1 \"`GIT_DIR=$(srcdir)/.git git rev-parse HEAD 2>/dev/null`\" }" && (echo $$build | cmp -s - $@) || echo $$build >$@ || (rm -f $@ && exit 1)
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
index f39ffb42c6f..67847bb9392 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -79,3 +79,4 @@ unix_loader_EXTRADEFS = \
-DBINDIR=\"${bindir}\" \
-DDLL_TO_BINDIR=\"`${MAKEDEP} -R ${dlldir} ${bindir}`\" \
-DBIN_TO_DATADIR=\"`${MAKEDEP} -R ${bindir} ${datadir}/wine`\"
+
--
2.28.0
2.20.1

View File

@@ -1 +0,0 @@
#Depends: ntdll-NtAlertThreadByThreadId

View File

@@ -1,4 +1,4 @@
From 3478a4e41c07a66e7e913c54bcf5ad52e16a8fee Mon Sep 17 00:00:00 2001
From 6d925cb20409888ada3e469a2a09b1bfc726fa79 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.
@@ -14,7 +14,7 @@ Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
create mode 100644 dlls/bcrypt/unixlib.c
diff --git a/dlls/bcrypt/Makefile.in b/dlls/bcrypt/Makefile.in
index 24803fb2d7cb..46a20d473dd7 100644
index 24803fb2d7c..46a20d473dd 100644
--- a/dlls/bcrypt/Makefile.in
+++ b/dlls/bcrypt/Makefile.in
@@ -11,6 +11,7 @@ C_SRCS = \
@@ -27,7 +27,7 @@ index 24803fb2d7cb..46a20d473dd7 100644
RC_SRCS = version.rc
diff --git a/dlls/bcrypt/bcrypt_internal.h b/dlls/bcrypt/bcrypt_internal.h
index eb1361115093..3c7110d05f84 100644
index eb136111509..3c7110d05f8 100644
--- a/dlls/bcrypt/bcrypt_internal.h
+++ b/dlls/bcrypt/bcrypt_internal.h
@@ -218,4 +218,7 @@ struct key_funcs
@@ -39,10 +39,10 @@ index eb1361115093..3c7110d05f84 100644
+
#endif /* __BCRYPT_INTERNAL_H */
diff --git a/dlls/bcrypt/gnutls.c b/dlls/bcrypt/gnutls.c
index c065ac31fba3..9490ea8612a8 100644
index 2f0c62bc6da..4a9dcf9de8a 100644
--- a/dlls/bcrypt/gnutls.c
+++ b/dlls/bcrypt/gnutls.c
@@ -371,9 +371,12 @@ fail:
@@ -372,9 +372,12 @@ fail:
static void gnutls_uninitialize(void)
{
@@ -58,7 +58,7 @@ index c065ac31fba3..9490ea8612a8 100644
}
struct buffer
@@ -1949,19 +1952,28 @@ static const struct key_funcs key_funcs =
@@ -1899,19 +1902,28 @@ static const struct key_funcs key_funcs =
key_import_rsa
};
@@ -74,7 +74,7 @@ index c065ac31fba3..9490ea8612a8 100644
+ if (!gnutls_initialize()) return NULL;
+ return &key_funcs;
case DLL_PROCESS_DETACH:
gnutls_uninitialize();
if (libgnutls_handle) gnutls_uninitialize();
- break;
}
- return STATUS_SUCCESS;
@@ -95,7 +95,7 @@ index c065ac31fba3..9490ea8612a8 100644
+}
+#endif
diff --git a/dlls/bcrypt/macos.c b/dlls/bcrypt/macos.c
index 44906519cef0..2a88aec8362c 100644
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 =
@@ -126,7 +126,7 @@ index 44906519cef0..2a88aec8362c 100644
#endif
diff --git a/dlls/bcrypt/unixlib.c b/dlls/bcrypt/unixlib.c
new file mode 100644
index 000000000000..9cbb25f5740c
index 00000000000..9cbb25f5740
--- /dev/null
+++ b/dlls/bcrypt/unixlib.c
@@ -0,0 +1,211 @@
@@ -342,5 +342,5 @@ index 000000000000..9cbb25f5740c
+
+#endif
--
2.29.2
2.30.2

View File

@@ -2,4 +2,3 @@ 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).
#Disabled: true

View File

@@ -1,4 +1,4 @@
From 4a511591eb74436feb8aa12e33f6caac544ba54a Mon Sep 17 00:00:00 2001
From 50bd67fb1fd718eaaf9f5600fba7ab86e4b71a76 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.
@@ -8,19 +8,19 @@ Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
configure | 1 +
configure.ac | 1 +
dlls/cryptext/Makefile.in | 3 +-
dlls/cryptext/cryptext.spec | 4 +-
dlls/cryptext/cryptext_main.c | 80 +++++++++++++++++++++++++++++++++
dlls/cryptext/tests/Makefile.in | 4 ++
dlls/cryptext/tests/cryptext.c | 61 +++++++++++++++++++++++++
7 files changed, 151 insertions(+), 3 deletions(-)
dlls/cryptext/cryptext.spec | 4 +--
dlls/cryptext/cryptext_main.c | 64 +++++++++++++++++++++++++++++++++
dlls/cryptext/tests/Makefile.in | 4 +++
dlls/cryptext/tests/cryptext.c | 61 +++++++++++++++++++++++++++++++
7 files changed, 135 insertions(+), 3 deletions(-)
create mode 100644 dlls/cryptext/tests/Makefile.in
create mode 100644 dlls/cryptext/tests/cryptext.c
diff --git a/configure b/configure
index 08936ff0ec1..79c966d23b1 100755
index 2b20133cd65..f3ef3aef3a9 100755
--- a/configure
+++ b/configure
@@ -20347,6 +20347,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests
@@ -20350,6 +20350,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 08936ff0ec1..79c966d23b1 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 fea6fe89c83..1a10f687682 100644
index 24f5c8847d6..f71fb6f401d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3095,6 +3095,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
@@ -3083,6 +3083,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
WINE_CONFIG_MAKEFILE(dlls/cryptdlg)
WINE_CONFIG_MAKEFILE(dlls/cryptdll)
WINE_CONFIG_MAKEFILE(dlls/cryptext)
@@ -67,10 +67,10 @@ index 0dba38e3934..911ab2f4ba4 100644
@ stub CryptExtOpenCRLW
@ stub CryptExtOpenCTL
diff --git a/dlls/cryptext/cryptext_main.c b/dlls/cryptext/cryptext_main.c
index 537ba66cd3b..2a381782d68 100644
index 537ba66cd3b..f9e34d1f8c5 100644
--- a/dlls/cryptext/cryptext_main.c
+++ b/dlls/cryptext/cryptext_main.c
@@ -22,10 +22,45 @@
@@ -22,10 +22,29 @@
#include "windef.h"
#include "winbase.h"
@@ -96,27 +96,11 @@ index 537ba66cd3b..2a381782d68 100644
+ MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+ return ret;
+}
+
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
+{
+ TRACE("(%p, %u, %p)\n", instance, reason, reserved);
+
+ switch (reason)
+ {
+ case DLL_WINE_PREATTACH:
+ return FALSE; /* prefer native version */
+ case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(instance);
+ break;
+ }
+
+ return TRUE;
+}
+
/***********************************************************************
* CryptExtAddPFX (CRYPTEXT.@)
*/
@@ -43,3 +78,48 @@ HRESULT WINAPI CryptExtAddPFXW(LPCWSTR filename)
@@ -43,3 +62,48 @@ HRESULT WINAPI CryptExtAddPFXW(LPCWSTR filename)
FIXME("stub: %s\n", debugstr_w(filename));
return E_NOTIMPL;
}
@@ -243,5 +227,5 @@ index 00000000000..cc62a772b59
+ test_CryptExtOpenCER();
+}
--
2.30.0
2.20.1

View File

@@ -1,4 +1,4 @@
From 504969929eb7932fe22880768461f2172080f0eb Mon Sep 17 00:00:00 2001
From 4527c01f3e96ad841fb26002c1e73a2b4d9ac55e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 19 Jan 2017 16:56:56 +0100
Subject: [PATCH] d3d11: Initial implementation for deferred contexts.
@@ -8,7 +8,7 @@ Subject: [PATCH] d3d11: Initial implementation for deferred contexts.
1 file changed, 1041 insertions(+), 31 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 454003128dc..4beb7cea4fa 100644
index 47f43a796e3..ca21e9be6ea 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -16,6 +16,7 @@
@@ -18,8 +18,8 @@ index 454003128dc..4beb7cea4fa 100644
+#include "wine/list.h"
#define NONAMELESSUNION
#include "d3d11_private.h"
@@ -48,6 +49,174 @@ static BOOL d3d_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, S
#define WINE_NO_NAMELESS_EXTENSION
@@ -49,6 +50,174 @@ static BOOL d3d_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, S
return TRUE;
}
@@ -194,7 +194,7 @@ index 454003128dc..4beb7cea4fa 100644
/* ID3D11DeviceContext - deferred context */
struct d3d11_deferred_context
{
@@ -55,9 +224,532 @@ struct d3d11_deferred_context
@@ -56,9 +225,532 @@ struct d3d11_deferred_context
ID3D11Device *device;
LONG refcount;
@@ -727,7 +727,7 @@ index 454003128dc..4beb7cea4fa 100644
static void STDMETHODCALLTYPE d3d_null_wined3d_object_destroyed(void *parent) {}
static const struct wined3d_parent_ops d3d_null_wined3d_parent_ops =
@@ -1415,7 +2107,20 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_ResolveSubresource(ID3D11D
@@ -1428,7 +2120,20 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_ResolveSubresource(ID3D11D
static void STDMETHODCALLTYPE d3d11_immediate_context_ExecuteCommandList(ID3D11DeviceContext1 *iface,
ID3D11CommandList *command_list, BOOL restore_state)
{
@@ -749,7 +749,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_immediate_context_HSSetShaderResources(ID3D11DeviceContext1 *iface,
@@ -3169,6 +3874,7 @@ static ULONG STDMETHODCALLTYPE d3d11_deferred_context_Release(ID3D11DeviceContex
@@ -3167,6 +3872,7 @@ static ULONG STDMETHODCALLTYPE d3d11_deferred_context_Release(ID3D11DeviceContex
if (!refcount)
{
@@ -757,7 +757,7 @@ index 454003128dc..4beb7cea4fa 100644
wined3d_private_store_cleanup(&context->private_store);
ID3D11Device_Release(context->device);
HeapFree(GetProcessHeap(), 0, context);
@@ -3220,43 +3926,86 @@ static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_SetPrivateDataInterface(
@@ -3218,43 +3924,86 @@ static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_SetPrivateDataInterface(
static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetConstantBuffers(ID3D11DeviceContext *iface,
UINT start_slot, UINT buffer_count, ID3D11Buffer *const *buffers)
{
@@ -850,7 +850,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_Draw(ID3D11DeviceContext *iface,
@@ -3269,53 +4018,169 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_Draw(ID3D11DeviceContext *i
@@ -3267,53 +4016,169 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_Draw(ID3D11DeviceContext *i
static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_Map(ID3D11DeviceContext *iface, ID3D11Resource *resource,
UINT subresource_idx, D3D11_MAP map_type, UINT map_flags, D3D11_MAPPED_SUBRESOURCE *mapped_subresource)
{
@@ -1029,7 +1029,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_DrawInstanced(ID3D11DeviceContext *iface,
@@ -3344,7 +4209,16 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShader(ID3D11DeviceCon
@@ -3342,7 +4207,16 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_GSSetShader(ID3D11DeviceCon
static void STDMETHODCALLTYPE d3d11_deferred_context_IASetPrimitiveTopology(ID3D11DeviceContext *iface,
D3D11_PRIMITIVE_TOPOLOGY topology)
{
@@ -1047,7 +1047,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_VSSetShaderResources(ID3D11DeviceContext *iface,
@@ -3404,8 +4278,28 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargets(ID3D11De
@@ -3402,8 +4276,28 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargets(ID3D11De
UINT render_target_view_count, ID3D11RenderTargetView *const *render_target_views,
ID3D11DepthStencilView *depth_stencil_view)
{
@@ -1077,7 +1077,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargetsAndUnorderedAccessViews(
@@ -3425,15 +4319,44 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargetsAndUnorde
@@ -3423,15 +4317,44 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetRenderTargetsAndUnorde
static void STDMETHODCALLTYPE d3d11_deferred_context_OMSetBlendState(ID3D11DeviceContext *iface,
ID3D11BlendState *blend_state, const float blend_factor[4], UINT sample_mask)
{
@@ -1124,7 +1124,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_SOSetTargets(ID3D11DeviceContext *iface, UINT buffer_count,
@@ -3475,13 +4398,34 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_DispatchIndirect(ID3D11Devi
@@ -3473,13 +4396,34 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_DispatchIndirect(ID3D11Devi
static void STDMETHODCALLTYPE d3d11_deferred_context_RSSetState(ID3D11DeviceContext *iface,
ID3D11RasterizerState *rasterizer_state)
{
@@ -1161,7 +1161,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_RSSetScissorRects(ID3D11DeviceContext *iface,
@@ -3596,8 +4540,18 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShaderResources(ID3D11
@@ -3594,8 +4538,18 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShaderResources(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetShader(ID3D11DeviceContext *iface,
ID3D11HullShader *shader, ID3D11ClassInstance *const *class_instances, UINT class_instance_count)
{
@@ -1181,7 +1181,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetSamplers(ID3D11DeviceContext *iface,
@@ -3610,36 +4564,62 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetSamplers(ID3D11DeviceC
@@ -3608,36 +4562,62 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetSamplers(ID3D11DeviceC
static void STDMETHODCALLTYPE d3d11_deferred_context_HSSetConstantBuffers(ID3D11DeviceContext *iface,
UINT start_slot, UINT buffer_count, ID3D11Buffer *const *buffers)
{
@@ -1249,7 +1249,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_CSSetShaderResources(ID3D11DeviceContext *iface,
@@ -3940,7 +4920,15 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_CSGetConstantBuffers(ID3D11
@@ -3938,7 +4918,15 @@ static void STDMETHODCALLTYPE d3d11_deferred_context_CSGetConstantBuffers(ID3D11
static void STDMETHODCALLTYPE d3d11_deferred_context_ClearState(ID3D11DeviceContext *iface)
{
@@ -1266,7 +1266,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static void STDMETHODCALLTYPE d3d11_deferred_context_Flush(ID3D11DeviceContext *iface)
@@ -3965,9 +4953,29 @@ static UINT STDMETHODCALLTYPE d3d11_deferred_context_GetContextFlags(ID3D11Devic
@@ -3963,9 +4951,29 @@ static UINT STDMETHODCALLTYPE d3d11_deferred_context_GetContextFlags(ID3D11Devic
static HRESULT STDMETHODCALLTYPE d3d11_deferred_context_FinishCommandList(ID3D11DeviceContext *iface,
BOOL restore, ID3D11CommandList **command_list)
{
@@ -1298,7 +1298,7 @@ index 454003128dc..4beb7cea4fa 100644
}
static const struct ID3D11DeviceContextVtbl d3d11_deferred_context_vtbl =
@@ -4582,6 +5590,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeferredContext(ID3D11Device
@@ -4580,6 +5588,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeferredContext(ID3D11Device
object->device = (ID3D11Device *)iface;
object->refcount = 1;
@@ -1308,5 +1308,5 @@ index 454003128dc..4beb7cea4fa 100644
wined3d_private_store_init(&object->private_store);
--
2.30.0
2.30.2

View File

@@ -1,8 +1,7 @@
From 980d867a89c72225b595b6e2a7313c1ddd42c9ad Mon Sep 17 00:00:00 2001
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 1/3] ddraw: Don't set HWTRANSFORMANDLIGHT flag on d3d7 RGB
device.
Subject: [PATCH] ddraw: Don't set HWTRANSFORMANDLIGHT flag on d3d7 RGB device.
---
dlls/ddraw/ddraw.c | 9 +++++++++
@@ -10,10 +9,10 @@ Subject: [PATCH 1/3] ddraw: Don't set HWTRANSFORMANDLIGHT flag on d3d7 RGB
2 files changed, 27 insertions(+)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 97a11ef..9a19536 100644
index 705d0335d95..1d916f93c4f 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -50,6 +50,7 @@ static struct enum_device_entry
@@ -49,6 +49,7 @@ static struct enum_device_entry
char interface_name[100];
char device_name[100];
const GUID *device_guid;
@@ -21,7 +20,7 @@ index 97a11ef..9a19536 100644
} device_list7[] =
{
/* T&L HAL device */
@@ -57,6 +58,7 @@ static struct enum_device_entry
@@ -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,
@@ -29,7 +28,7 @@ index 97a11ef..9a19536 100644
},
/* HAL device */
@@ -64,6 +66,7 @@ static struct enum_device_entry
@@ -63,6 +65,7 @@ static struct enum_device_entry
"WINE Direct3D7 Hardware acceleration using WineD3D",
"Direct3D HAL",
&IID_IDirect3DHALDevice,
@@ -37,7 +36,7 @@ index 97a11ef..9a19536 100644
},
/* RGB device */
@@ -71,6 +74,7 @@ static struct enum_device_entry
@@ -70,6 +73,7 @@ static struct enum_device_entry
"WINE Direct3D7 RGB Software Emulation using WineD3D",
"Wine D3D7 RGB",
&IID_IDirect3DRGBDevice,
@@ -45,7 +44,7 @@ index 97a11ef..9a19536 100644
},
};
@@ -3627,6 +3631,7 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
@@ -3749,6 +3753,7 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
{
struct ddraw *ddraw = impl_from_IDirect3D7(iface);
D3DDEVICEDESC7 device_desc7;
@@ -53,7 +52,7 @@ index 97a11ef..9a19536 100644
HRESULT hr;
size_t i;
@@ -3643,11 +3648,15 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
@@ -3765,11 +3770,15 @@ static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBA
return hr;
}
@@ -70,11 +69,11 @@ index 97a11ef..9a19536 100644
if (ret != DDENUMRET_OK)
{
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 3f433a6..aa7214a 100644
index d641595baa2..54cc18b74f2 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -311,6 +311,19 @@ static HRESULT WINAPI enum_devtype_cb(char *desc_str, char *name, D3DDEVICEDESC7
return DDENUMRET_OK;
@@ -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)
@@ -92,26 +91,26 @@ index 3f433a6..aa7214a 100644
+
static IDirect3DDevice7 *create_device(HWND window, DWORD coop_level)
{
IDirectDrawSurface7 *surface, *ds;
@@ -321,6 +334,7 @@ static IDirect3DDevice7 *create_device(HWND window, DWORD coop_level)
IDirect3D7 *d3d7;
HRESULT hr;
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;
if (!(ddraw = create_ddraw()))
@@ -364,6 +378,10 @@ static IDirect3DDevice7 *create_device(HWND window, DWORD coop_level)
ok(SUCCEEDED(hr), "Failed to enumerate devices, hr %#x.\n", hr);
if (hal_ok) devtype = &IID_IDirect3DTnLHalDevice;
+ hr = IDirect3D7_EnumDevices(d3d7, enum_devtype_software_cb , &software_ok);
+ 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(d3d7, devtype, enum_z_fmt, &z_fmt);
hr = IDirect3D7_EnumZBufferFormats(d3d, devtype, enum_z_fmt, &z_fmt);
if (FAILED(hr) || !z_fmt.dwSize)
--
2.7.4
2.20.1

View File

@@ -1,18 +1,18 @@
From 87c1fab3efb367d863fcfb4870a4a1b1485f65f7 Mon Sep 17 00:00:00 2001
From 7e0e8ea02fa2670a29e1c312f88205b870521a9e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 30 May 2015 02:55:03 +0200
Subject: [PATCH] ddraw: Allow size and format conversions in
IDirect3DTexture2::Load.
---
dlls/ddraw/surface.c | 151 +++++++++++++++++++++++++++------------------------
1 file changed, 80 insertions(+), 71 deletions(-)
dlls/ddraw/surface.c | 153 +++++++++++++++++++++++--------------------
1 file changed, 82 insertions(+), 71 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 47a143a..a30b44f 100644
index f5c3528cfa4..a8b919c05c2 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -5187,6 +5187,46 @@ static struct ddraw_surface *get_sub_mimaplevel(struct ddraw_surface *surface)
@@ -5316,6 +5316,46 @@ static struct ddraw_surface *get_sub_mimaplevel(struct ddraw_surface *surface)
return impl_from_IDirectDrawSurface7(next_level);
}
@@ -59,7 +59,7 @@ index 47a143a..a30b44f 100644
/*****************************************************************************
* IDirect3DTexture2::Load
*
@@ -5208,7 +5248,7 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
@@ -5337,7 +5377,7 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
{
struct ddraw_surface *dst_surface = impl_from_IDirect3DTexture2(iface);
struct ddraw_surface *src_surface = unsafe_impl_from_IDirect3DTexture2(src_texture);
@@ -68,12 +68,12 @@ index 47a143a..a30b44f 100644
HRESULT hr;
TRACE("iface %p, src_texture %p.\n", iface, src_texture);
@@ -5221,90 +5261,60 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
@@ -5350,90 +5390,62 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
wined3d_mutex_lock();
- dst_resource = wined3d_texture_get_resource(dst_surface->wined3d_texture);
- src_resource = wined3d_texture_get_resource(src_surface->wined3d_texture);
- dst_resource = wined3d_texture_get_resource(ddraw_surface_get_default_texture(dst_surface, DDRAW_SURFACE_WRITE));
- src_resource = wined3d_texture_get_resource(ddraw_surface_get_default_texture(src_surface, DDRAW_SURFACE_READ));
-
- if (((src_surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_MIPMAP)
- != (dst_surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_MIPMAP))
@@ -184,9 +184,11 @@ index 47a143a..a30b44f 100644
- wined3d_resource_unmap(dst_resource, dst_surface->sub_resource_idx);
- wined3d_resource_unmap(src_resource, src_surface->sub_resource_idx);
+ hr = wined3d_texture_blt(dst_surface->wined3d_texture, dst_surface->sub_resource_idx, &dst_rect,
+ src_surface->wined3d_texture, src_surface->sub_resource_idx, &src_rect,
+ 0, NULL, WINED3D_TEXF_LINEAR);
+ hr = wined3d_device_context_blt(dst_surface->ddraw->immediate_context,
+ ddraw_surface_get_default_texture(dst_surface, DDRAW_SURFACE_WRITE),
+ dst_surface->sub_resource_idx, &dst_rect,
+ ddraw_surface_get_default_texture(src_surface, DDRAW_SURFACE_READ),
+ src_surface->sub_resource_idx, &src_rect, 0, NULL, WINED3D_TEXF_LINEAR);
+ if (FAILED(hr))
+ {
+ ERR("Failed to blit surface, hr %#x.\n", hr);
@@ -195,7 +197,7 @@ index 47a143a..a30b44f 100644
}
if (src_surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_MIPMAP)
@@ -5317,12 +5327,11 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
@@ -5446,12 +5458,11 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
else
dst_surface = NULL;
@@ -212,5 +214,5 @@ index 47a143a..a30b44f 100644
wined3d_mutex_unlock();
--
1.9.1
2.30.2

View File

@@ -1,213 +0,0 @@
From 2097fbe83a66a3a423bdd148ecfc4f16c1237110 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Wed, 29 Jul 2015 17:09:50 +0200
Subject: [PATCH] ddraw: Create rendering targets in video memory if possible.
Based on a patch by Henri Verbeet.
---
dlls/ddraw/ddraw.c | 6 +++---
dlls/ddraw/ddraw_private.h | 3 ++-
dlls/ddraw/device.c | 23 +++++++++++++---------
dlls/ddraw/surface.c | 39 ++++++++++++++++++++++++++++++++++++--
4 files changed, 56 insertions(+), 15 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 050f625f7..9655f9e47 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4214,7 +4214,7 @@ static HRESULT WINAPI d3d7_CreateDevice(IDirect3D7 *iface, REFCLSID riid,
TRACE("iface %p, riid %s, surface %p, device %p.\n", iface, debugstr_guid(riid), surface, device);
wined3d_mutex_lock();
- if (SUCCEEDED(hr = d3d_device_create(ddraw, target, (IUnknown *)surface, 7, &object, NULL)))
+ if (SUCCEEDED(hr = d3d_device_create(ddraw, riid, target, (IUnknown *)surface, 7, &object, NULL)))
{
*device = &object->IDirect3DDevice7_iface;
}
@@ -4243,7 +4243,7 @@ static HRESULT WINAPI d3d3_CreateDevice(IDirect3D3 *iface, REFCLSID riid,
return CLASS_E_NOAGGREGATION;
wined3d_mutex_lock();
- if (SUCCEEDED(hr = d3d_device_create(ddraw, surface_impl, (IUnknown *)surface, 3, &device_impl, NULL)))
+ if (SUCCEEDED(hr = d3d_device_create(ddraw, riid, surface_impl, (IUnknown *)surface, 3, &device_impl, NULL)))
{
*device = &device_impl->IDirect3DDevice3_iface;
}
@@ -4269,7 +4269,7 @@ static HRESULT WINAPI d3d2_CreateDevice(IDirect3D2 *iface, REFCLSID riid,
iface, debugstr_guid(riid), surface, device);
wined3d_mutex_lock();
- if (SUCCEEDED(hr = d3d_device_create(ddraw, surface_impl, (IUnknown *)surface, 2, &device_impl, NULL)))
+ if (SUCCEEDED(hr = d3d_device_create(ddraw, riid, surface_impl, (IUnknown *)surface, 2, &device_impl, NULL)))
{
*device = &device_impl->IDirect3DDevice2_iface;
}
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index f4fe970a6..ba0ec73d8 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -313,6 +313,7 @@ struct d3d_device
IUnknown IUnknown_inner;
LONG ref;
UINT version;
+ BOOL hw;
IUnknown *outer_unknown;
struct wined3d_device *wined3d_device;
@@ -360,7 +361,7 @@ struct d3d_device
const struct wined3d_stateblock_state *stateblock_state;
};
-HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUnknown *rt_iface,
+HRESULT d3d_device_create(struct ddraw *ddraw, const GUID *guid, struct ddraw_surface *target, IUnknown *rt_iface,
UINT version, struct d3d_device **device, IUnknown *outer_unknown) DECLSPEC_HIDDEN;
enum wined3d_depth_buffer_type d3d_device_update_depth_stencil(struct d3d_device *device) DECLSPEC_HIDDEN;
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 048ba7fba..ce74a0fb8 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -1858,7 +1858,7 @@ static HRESULT d3d_device7_SetRenderTarget(IDirect3DDevice7 *iface,
return DDERR_INVALIDCAPS;
}
- if (!(target_impl->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ if (device->hw && !(target_impl->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
{
WARN("Surface %p is not in video memory.\n", target_impl);
wined3d_mutex_unlock();
@@ -1934,7 +1934,7 @@ static HRESULT WINAPI d3d_device3_SetRenderTarget(IDirect3DDevice3 *iface,
return DDERR_INVALIDPIXELFORMAT;
}
- if (!(target_impl->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ if (device->hw && !(target_impl->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
{
WARN("Surface %p is not in video memory.\n", target_impl);
IDirectDrawSurface4_AddRef(target);
@@ -1983,7 +1983,7 @@ static HRESULT WINAPI d3d_device2_SetRenderTarget(IDirect3DDevice2 *iface,
return DDERR_INVALIDPIXELFORMAT;
}
- if (!(target_impl->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ if (device->hw && !(target_impl->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
{
WARN("Surface %p is not in video memory.\n", target_impl);
IDirectDrawSurface_AddRef(target);
@@ -6951,7 +6951,7 @@ static void ddraw_reset_viewport_state(struct ddraw *ddraw)
wined3d_stateblock_set_scissor_rect(ddraw->state, &rect);
}
-static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
+static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw, BOOL hw,
struct ddraw_surface *target, IUnknown *rt_iface, UINT version, IUnknown *outer_unknown)
{
static const struct wined3d_matrix ident =
@@ -6974,6 +6974,7 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
device->IUnknown_inner.lpVtbl = &d3d_device_inner_vtbl;
device->ref = 1;
device->version = version;
+ device->hw = hw;
if (outer_unknown)
device->outer_unknown = outer_unknown;
@@ -7032,14 +7033,18 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
return D3D_OK;
}
-HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUnknown *rt_iface,
+HRESULT d3d_device_create(struct ddraw *ddraw, const GUID *guid, struct ddraw_surface *target, IUnknown *rt_iface,
UINT version, struct d3d_device **device, IUnknown *outer_unknown)
{
struct d3d_device *object;
+ BOOL hw = TRUE;
HRESULT hr;
- TRACE("ddraw %p, target %p, version %u, device %p, outer_unknown %p.\n",
- ddraw, target, version, device, outer_unknown);
+ TRACE("ddraw %p, guid %s, target %p, version %u, device %p, outer_unknown %p.\n",
+ ddraw, debugstr_guid(guid), target, version, device, outer_unknown);
+
+ if (IsEqualGUID(guid, &IID_IDirect3DRGBDevice))
+ hw = FALSE;
if (!(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_3DDEVICE)
|| (target->surface_desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER))
@@ -7062,7 +7067,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
return DDERR_OUTOFMEMORY;
}
- if (!(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ if (hw && !(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
{
WARN("Surface %p is not in video memory.\n", target);
return D3DERR_SURFACENOTINVIDMEM;
@@ -7080,7 +7085,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
return DDERR_OUTOFMEMORY;
}
- if (FAILED(hr = d3d_device_init(object, ddraw, target, rt_iface, version, outer_unknown)))
+ if (FAILED(hr = d3d_device_init(object, ddraw, hw, target, rt_iface, version, outer_unknown)))
{
WARN("Failed to initialize device, hr %#x.\n", hr);
heap_free(object);
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 85c1ef496..01522f515 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -223,7 +223,7 @@ static HRESULT WINAPI ddraw_surface7_QueryInterface(IDirectDrawSurface7 *iface,
{
HRESULT hr;
- if (FAILED(hr = d3d_device_create(This->ddraw, This, (IUnknown *)&This->IDirectDrawSurface_iface,
+ if (FAILED(hr = d3d_device_create(This->ddraw, riid, This, (IUnknown *)&This->IDirectDrawSurface_iface,
1, &This->device1, (IUnknown *)&This->IDirectDrawSurface_iface)))
{
This->device1 = NULL;
@@ -6192,7 +6192,42 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
if (desc->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY)
{
- wined3d_desc.access = WINED3D_RESOURCE_ACCESS_CPU
+ unsigned int bind_flags = 0;
+
+ if (!(desc->dwFlags & DDSD_LPSURFACE))
+ {
+ if (desc->ddsCaps.dwCaps2 & DDSCAPS2_CUBEMAP)
+ {
+ bind_flags |= WINED3D_BIND_SHADER_RESOURCE;
+ }
+ else if (desc->ddsCaps.dwCaps & DDSCAPS_TEXTURE)
+ {
+ bind_flags |= WINED3D_BIND_SHADER_RESOURCE;
+ }
+
+ if (desc->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)
+ bind_flags |= WINED3D_BIND_DEPTH_STENCIL;
+ else if (desc->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)
+ bind_flags |= WINED3D_BIND_RENDER_TARGET;
+ }
+ /*
+ * The ddraw RGB device allows to use system memory surfaces as rendering target.
+ * This does not cause problems because the RGB device does software rasterization
+ * though it will fail with hardware accelerated ddraw. In order to be partially
+ * compatible with games requesting explicitly the RGB device, we ignore the
+ * specified location and try to create rendering targets in video memory if
+ * possible.
+ */
+ if (bind_flags
+ && SUCCEEDED(hr = wined3d_check_device_format(ddraw->wined3d, ddraw->wined3d_adapter,
+ WINED3D_DEVICE_TYPE_HAL, mode.format_id, 0,
+ bind_flags, WINED3D_RTYPE_TEXTURE_2D, wined3d_desc.format)))
+ {
+ FIXME("Application wants to create rendering target in system memory, using video memory instead\n");
+ wined3d_desc.bind_flags = bind_flags;
+ }
+ else
+ wined3d_desc.access = WINED3D_RESOURCE_ACCESS_CPU
| WINED3D_RESOURCE_ACCESS_MAP_R | WINED3D_RESOURCE_ACCESS_MAP_W;
}
else
--
2.25.1

View File

@@ -1 +0,0 @@
Fixes: [34906] Use video memory for rendering targets if possible

View File

@@ -1,251 +0,0 @@
From 43cd59c9043af0c515b558c8dfeafdcabb93215c Mon Sep 17 00:00:00 2001
From: Paul Gofman <gofmanp@gmail.com>
Date: Thu, 4 Apr 2019 02:25:00 +0300
Subject: [PATCH] ddraw: Allow setting texture without DDSCAPS_TEXTURE for
software device.
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
---
dlls/ddraw/device.c | 20 ++++--
dlls/ddraw/tests/ddraw4.c | 128 +++++++++++++++++++++++++++++++++++++-
2 files changed, 141 insertions(+), 7 deletions(-)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 33066329407..11a881522d9 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -4775,7 +4775,8 @@ static HRESULT d3d_device7_SetTexture(IDirect3DDevice7 *iface,
struct ddraw_surface *surf = unsafe_impl_from_IDirectDrawSurface7(texture);
struct wined3d_texture *wined3d_texture = NULL;
- TRACE("iface %p, stage %u, texture %p.\n", iface, stage, texture);
+ TRACE("iface %p, stage %u, texture %p, surf %p, surf->surface_desc.ddsCaps.dwCaps %#x.\n",
+ iface, stage, texture, surf, surf ? surf->surface_desc.ddsCaps.dwCaps : 0);
if (surf && (surf->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE))
wined3d_texture = surf->wined3d_texture;
@@ -4811,19 +4812,30 @@ static HRESULT WINAPI d3d_device3_SetTexture(IDirect3DDevice3 *iface,
{
struct d3d_device *device = impl_from_IDirect3DDevice3(iface);
struct ddraw_surface *tex = unsafe_impl_from_IDirect3DTexture2(texture);
- HRESULT hr;
+ struct wined3d_texture *wined3d_texture;
TRACE("iface %p, stage %u, texture %p.\n", iface, stage, texture);
wined3d_mutex_lock();
- hr = IDirect3DDevice7_SetTexture(&device->IDirect3DDevice7_iface, stage, &tex->IDirectDrawSurface7_iface);
+ if (tex && ((tex->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE) || !device->hw))
+ {
+ if (!(tex->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE))
+ WARN("Setting texture without DDSCAPS_TEXTURE.\n");
+ wined3d_texture = tex->wined3d_texture;
+ }
+ else
+ {
+ wined3d_texture = NULL;
+ }
+
+ wined3d_stateblock_set_texture(device->state, stage, wined3d_texture);
fixup_texture_alpha_op(device);
wined3d_mutex_unlock();
- return hr;
+ return D3D_OK;
}
static const struct tss_lookup
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 6e003fbfb7e..30f2282c12c 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -427,7 +427,7 @@ static IDirectDraw4 *create_ddraw(void)
return ddraw4;
}
-static IDirect3DDevice3 *create_device(HWND window, DWORD coop_level)
+static IDirect3DDevice3 *create_device_ex(HWND window, DWORD coop_level, BOOL software)
{
IDirectDrawSurface4 *surface, *ds;
IDirect3DDevice3 *device = NULL;
@@ -447,6 +447,8 @@ static IDirect3DDevice3 *create_device(HWND window, DWORD coop_level)
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
+ if (software)
+ surface_desc.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
@@ -475,7 +477,8 @@ static IDirect3DDevice3 *create_device(HWND window, DWORD coop_level)
}
memset(&z_fmt, 0, sizeof(z_fmt));
- hr = IDirect3D3_EnumZBufferFormats(d3d3, &IID_IDirect3DHALDevice, enum_z_fmt, &z_fmt);
+ hr = IDirect3D3_EnumZBufferFormats(d3d3, software ? &IID_IDirect3DRGBDevice
+ : &IID_IDirect3DHALDevice, enum_z_fmt, &z_fmt);
if (FAILED(hr) || !z_fmt.dwSize)
{
IDirect3D3_Release(d3d3);
@@ -487,6 +490,8 @@ static IDirect3DDevice3 *create_device(HWND window, DWORD coop_level)
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT;
surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER;
+ if (software)
+ surface_desc.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
U4(surface_desc).ddpfPixelFormat = z_fmt;
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
@@ -509,7 +514,8 @@ static IDirect3DDevice3 *create_device(HWND window, DWORD coop_level)
return NULL;
}
- hr = IDirect3D3_CreateDevice(d3d3, &IID_IDirect3DHALDevice, surface, &device, NULL);
+ hr = IDirect3D3_CreateDevice(d3d3, software ? &IID_IDirect3DRGBDevice
+ : &IID_IDirect3DHALDevice, surface, &device, NULL);
IDirect3D3_Release(d3d3);
IDirectDrawSurface4_Release(surface);
if (FAILED(hr))
@@ -518,6 +524,11 @@ static IDirect3DDevice3 *create_device(HWND window, DWORD coop_level)
return device;
}
+static IDirect3DDevice3 *create_device(HWND window, DWORD coop_level)
+{
+ return create_device_ex(window, coop_level, FALSE);
+}
+
static IDirect3DViewport3 *create_viewport(IDirect3DDevice3 *device, UINT x, UINT y, UINT w, UINT h)
{
IDirect3DViewport3 *viewport;
@@ -18331,6 +18342,116 @@ static void run_for_each_device_type(void (*test_func)(const GUID *))
test_func(&IID_IDirect3DRGBDevice);
}
+static void test_texture_wrong_caps_(BOOL software)
+{
+ static struct
+ {
+ struct vec3 position;
+ struct vec2 texcoord;
+ }
+ quad[] =
+ {
+ {{-1.0f, -1.0f, 0.0f}, {0.0f, 1.0f}},
+ {{-1.0f, 1.0f, 0.0f}, {0.0f, 0.0f}},
+ {{ 1.0f, -1.0f, 0.0f}, {1.0f, 1.0f}},
+ {{ 1.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
+ };
+ static DDPIXELFORMAT fmt =
+ {
+ sizeof(DDPIXELFORMAT), DDPF_RGB | DDPF_ALPHAPIXELS, 0,
+ {32}, {0x00ff0000}, {0x0000ff00}, {0x000000ff}, {0xff000000}
+ };
+ D3DRECT clear_rect = {{0}, {0}, {640}, {480}};
+ IDirectDrawSurface4 *surface, *rt;
+ D3DCOLOR color, expected_color;
+ IDirect3DViewport3 *viewport;
+ IDirect3DTexture2 *texture;
+ IDirect3DDevice3 *device;
+ IDirectDraw4 *ddraw;
+ DDSURFACEDESC2 ddsd;
+ IDirect3D3 *d3d;
+ ULONG refcount;
+ HWND window;
+ HRESULT hr;
+
+ window = create_window();
+ if (!(device = create_device_ex(window, DDSCL_NORMAL, software)))
+ {
+ skip("Failed to create a 3D device, skipping test.\n");
+ DestroyWindow(window);
+ return;
+ }
+ hr = IDirect3DDevice3_GetDirect3D(device, &d3d);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3D3_QueryInterface(d3d, &IID_IDirectDraw4, (void **)&ddraw);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_GetRenderTarget(device, &rt);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
+ viewport = create_viewport(device, 0, 0, 640, 480);
+ hr = IDirect3DDevice3_SetCurrentViewport(device, viewport);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ memset(&ddsd, 0, sizeof(ddsd));
+ ddsd.dwSize = sizeof(ddsd);
+ ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
+ ddsd.dwHeight = 16;
+ ddsd.dwWidth = 16;
+ ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+ U4(ddsd).ddpfPixelFormat = fmt;
+ hr = IDirectDraw4_CreateSurface(ddraw, &ddsd, &surface, NULL);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirectDrawSurface4_QueryInterface(surface, &IID_IDirect3DTexture2, (void **)&texture);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ fill_surface(surface, 0xff00ff00);
+
+ hr = IDirect3DDevice3_SetRenderState(device, D3DRENDERSTATE_ZENABLE, D3DZB_FALSE);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ hr = IDirect3DDevice3_SetTextureStageState(device, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_SetTextureStageState(device, 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_SetTextureStageState(device, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_SetTextureStageState(device, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
+
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_SetTexture(device, 0, texture);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DViewport3_Clear2(viewport, 1, &clear_rect, D3DCLEAR_TARGET, 0x000000ff, 0.0f, 0);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_BeginScene(device);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_DrawPrimitive(device, D3DPT_TRIANGLESTRIP,
+ D3DFVF_XYZ | D3DFVF_TEX1, quad, 4, 0);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+ hr = IDirect3DDevice3_EndScene(device);
+ ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+ expected_color = software ? 0x0000ff00 : 0x00ffffff;
+ color = get_surface_color(rt, 320, 240);
+ ok(color == expected_color, "Got color 0x%08x, expected 0x%08x.\n", color, expected_color);
+
+ IDirect3DTexture2_Release(texture);
+ IDirectDrawSurface4_Release(surface);
+ IDirectDraw4_Release(ddraw);
+ IDirect3D3_Release(d3d);
+ refcount = IDirect3DDevice3_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+ DestroyWindow(window);
+}
+
+static void test_texture_wrong_caps(void)
+{
+ trace("Hardware device.\n");
+ test_texture_wrong_caps_(FALSE);
+
+ trace("Software device.\n");
+ test_texture_wrong_caps_(TRUE);
+}
+
START_TEST(ddraw4)
{
DDDEVICEIDENTIFIER identifier;
@@ -18463,6 +18584,7 @@ START_TEST(ddraw4)
test_gdi_surface();
test_alphatest();
test_clipper_refcount();
+ test_texture_wrong_caps();
test_caps();
test_d32_support();
test_surface_format_conversion_alpha();
--
2.20.1

View File

@@ -1,3 +0,0 @@
Fixes: [46948] Allow setting texture without DDSCAPS_TEXTURE for software device
Depends: ddraw-Rendering_Targets

View File

@@ -1,4 +1,4 @@
From bce769d9179ffbcbc634e73ad124528e28c5c7a8 Mon Sep 17 00:00:00 2001
From ccc18e41eb660dbbe3d08fd478aefbc6e7701adf Mon Sep 17 00:00:00 2001
From: Jetro Jormalainen <jje-wine@jv.jetro.fi>
Date: Tue, 30 Apr 2019 09:20:54 +1000
Subject: [PATCH] dinput: Allow empty Joystick mappings.
@@ -12,7 +12,7 @@ Subject: [PATCH] dinput: Allow empty Joystick mappings.
5 files changed, 125 insertions(+), 15 deletions(-)
diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
index d1bf934a827..6107ab26538 100644
index 289c3a0ec6a..22dcfde7021 100644
--- a/dlls/dinput/device.c
+++ b/dlls/dinput/device.c
@@ -30,6 +30,7 @@
@@ -23,7 +23,7 @@ index d1bf934a827..6107ab26538 100644
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
@@ -643,12 +644,29 @@ static DWORD semantic_to_obj_id(IDirectInputDeviceImpl* This, DWORD dwSemantic)
@@ -659,12 +660,29 @@ static DWORD semantic_to_obj_id(IDirectInputDeviceImpl* This, DWORD dwSemantic)
return type | (0x0000ff00 & (obj_instance << 8));
}
@@ -54,7 +54,7 @@ index d1bf934a827..6107ab26538 100644
{
static const WCHAR subkey[] = {
'S','o','f','t','w','a','r','e','\\',
@@ -663,8 +681,11 @@ static HKEY get_mapping_key(const WCHAR *device, const WCHAR *username, const WC
@@ -679,8 +697,11 @@ static HKEY get_mapping_key(const WCHAR *device, const WCHAR *username, const WC
sprintfW(keyname, subkey, username, device, guid);
/* The key used is HKCU\Software\Wine\DirectInput\Mappings\[username]\[device]\[mapping_guid] */
@@ -68,7 +68,7 @@ index d1bf934a827..6107ab26538 100644
HeapFree(GetProcessHeap(), 0, keyname);
@@ -684,7 +705,9 @@ static HRESULT save_mapping_settings(IDirectInputDevice8W *iface, LPDIACTIONFORM
@@ -700,7 +721,9 @@ static HRESULT save_mapping_settings(IDirectInputDevice8W *iface, LPDIACTIONFORM
if (StringFromCLSID(&lpdiaf->guidActionMap, &guid_str) != S_OK)
return DI_SETTINGSNOTSAVED;
@@ -79,7 +79,7 @@ index d1bf934a827..6107ab26538 100644
if (!hkey)
{
@@ -719,7 +742,7 @@ BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdia
@@ -735,7 +758,7 @@ BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdia
HKEY hkey;
WCHAR *guid_str;
DIDEVICEINSTANCEW didev;
@@ -88,7 +88,7 @@ index d1bf934a827..6107ab26538 100644
didev.dwSize = sizeof(didev);
IDirectInputDevice8_GetDeviceInfo(&This->IDirectInputDevice8W_iface, &didev);
@@ -727,7 +750,7 @@ BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdia
@@ -743,7 +766,7 @@ BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdia
if (StringFromCLSID(&lpdiaf->guidActionMap, &guid_str) != S_OK)
return FALSE;
@@ -97,19 +97,19 @@ index d1bf934a827..6107ab26538 100644
if (!hkey)
{
@@ -748,15 +771,21 @@ BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdia
@@ -764,15 +787,21 @@ BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdia
{
lpdiaf->rgoAction[i].dwObjID = id;
lpdiaf->rgoAction[i].guidInstance = didev.guidInstance;
- lpdiaf->rgoAction[i].dwHow = DIAH_DEFAULT;
- mapped += 1;
+ lpdiaf->rgoAction[i].dwHow = DIAH_USERCONFIG;
+ }
}
+ else
+ {
+ memset(&lpdiaf->rgoAction[i].guidInstance, 0, sizeof(GUID));
+ lpdiaf->rgoAction[i].dwHow = DIAH_UNMAPPED;
}
+ }
+
}
@@ -121,8 +121,8 @@ index d1bf934a827..6107ab26538 100644
+ return TRUE;
}
HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags, DWORD devMask, LPCDIDATAFORMAT df)
@@ -779,13 +808,18 @@ HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf,
static BOOL set_app_data(IDirectInputDeviceImpl *dev, int offset, UINT_PTR app_data)
@@ -835,13 +864,18 @@ HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf,
load_success = load_mapping_settings(This, lpdiaf, username);
}
@@ -145,7 +145,7 @@ index d1bf934a827..6107ab26538 100644
if ((lpdiaf->rgoAction[i].dwSemantic & devMask) == devMask)
{
DWORD obj_id = semantic_to_obj_id(This, lpdiaf->rgoAction[i].dwSemantic);
@@ -816,6 +850,14 @@ HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf,
@@ -872,6 +906,14 @@ HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf,
}
}
@@ -160,15 +160,15 @@ index d1bf934a827..6107ab26538 100644
if (!has_actions) return DI_NOEFFECT;
return IDirectInputDevice8WImpl_BuildActionMap(iface, lpdiaf, lpszUserName, dwFlags);
@@ -831,6 +873,7 @@ HRESULT _set_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, L
@@ -887,6 +929,7 @@ HRESULT _set_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, L
DIPROPSTRING dps;
WCHAR username[MAX_PATH];
DWORD username_size = MAX_PATH;
+ DWORD new_crc = 0;
int i, action = 0, num_actions = 0;
unsigned int offset = 0;
@@ -841,12 +884,23 @@ HRESULT _set_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, L
ActionMap *action_map;
@@ -898,12 +941,23 @@ HRESULT _set_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, L
data_format.dwFlags = DIDF_RELAXIS;
data_format.dwDataSize = lpdiaf->dwDataSize;
@@ -191,13 +191,13 @@ index d1bf934a827..6107ab26538 100644
+ /* update dwCRC to track if action format has changed */
+ lpdiaf->dwCRC = new_crc;
This->num_actions = num_actions;
/* Construct the dataformat and actionmap */
obj_df = HeapAlloc(GetProcessHeap(), 0, sizeof(DIOBJECTDATAFORMAT)*num_actions);
diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c
index 66d6cfdffb9..73215dac0d5 100644
index 1986e610d08..a5ad0d4def2 100644
--- a/dlls/dinput/joystick.c
+++ b/dlls/dinput/joystick.c
@@ -847,7 +847,7 @@ HRESULT WINAPI JoystickWGenericImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface,
@@ -861,7 +861,7 @@ HRESULT WINAPI JoystickWGenericImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface,
else
lstrcpynW(username, lpszUserName, size);
@@ -206,7 +206,7 @@ index 66d6cfdffb9..73215dac0d5 100644
heap_free(username);
}
@@ -957,6 +957,8 @@ HRESULT WINAPI JoystickAGenericImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface,
@@ -971,6 +971,8 @@ HRESULT WINAPI JoystickAGenericImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface,
hr = JoystickWGenericImpl_SetActionMap(&This->base.IDirectInputDevice8W_iface, &diafW, lpszUserNameW, dwFlags);
@@ -216,10 +216,10 @@ index 66d6cfdffb9..73215dac0d5 100644
HeapFree(GetProcessHeap(), 0, lpszUserNameW);
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index b5e665933ec..0747f5d8c8b 100644
index 9981372d957..ec7d8985079 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -690,6 +690,8 @@ static HRESULT WINAPI SysKeyboardAImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface,
@@ -686,6 +686,8 @@ static HRESULT WINAPI SysKeyboardAImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface,
hr = SysKeyboardWImpl_SetActionMap(&This->base.IDirectInputDevice8W_iface, &diafW, lpszUserNameW, dwFlags);
@@ -229,10 +229,10 @@ index b5e665933ec..0747f5d8c8b 100644
HeapFree(GetProcessHeap(), 0, lpszUserNameW);
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index 52a766b2a1a..796f1fa2977 100644
index e50731fda41..9e2154ea463 100644
--- a/dlls/dinput/mouse.c
+++ b/dlls/dinput/mouse.c
@@ -862,6 +862,8 @@ static HRESULT WINAPI SysMouseAImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface,
@@ -946,6 +946,8 @@ static HRESULT WINAPI SysMouseAImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface,
hr = SysMouseWImpl_SetActionMap(&This->base.IDirectInputDevice8W_iface, &diafW, lpszUserNameW, dwFlags);
@@ -242,7 +242,7 @@ index 52a766b2a1a..796f1fa2977 100644
HeapFree(GetProcessHeap(), 0, lpszUserNameW);
diff --git a/dlls/dinput8/tests/device.c b/dlls/dinput8/tests/device.c
index f3e7b542355..bec2a6b863c 100644
index 3e6da23b4ab..445d98e3887 100644
--- a/dlls/dinput8/tests/device.c
+++ b/dlls/dinput8/tests/device.c
@@ -38,6 +38,8 @@ struct enum_data {
@@ -254,7 +254,7 @@ index f3e7b542355..bec2a6b863c 100644
enum {
DITEST_AXIS,
DITEST_BUTTON,
@@ -365,6 +367,17 @@ static void test_action_mapping(void)
@@ -429,6 +431,17 @@ static void test_action_mapping(void)
hr = IDirectInputDevice8_SetActionMap(data.keyboard, data.lpdiaf, NULL, 0);
ok (hr == DI_NOEFFECT, "SetActionMap should have no effect with no actions to map hr=%08x\n", hr);
@@ -272,7 +272,7 @@ index f3e7b542355..bec2a6b863c 100644
af.dwDataSize = 4 * ARRAY_SIZE(actionMapping);
af.dwNumActions = ARRAY_SIZE(actionMapping);
@@ -556,6 +569,43 @@ static void test_save_settings(void)
@@ -620,6 +633,43 @@ static void test_save_settings(void)
"Mapped incorrectly expected: 0x%08x got: 0x%08x\n", other_results[1], af.rgoAction[1].dwObjID);
ok (IsEqualGUID(&GUID_SysKeyboard, &af.rgoAction[1].guidInstance), "Action should be mapped to keyboard\n");
@@ -317,5 +317,5 @@ index f3e7b542355..bec2a6b863c 100644
IDirectInput_Release(pDI);
}
--
2.17.1
2.20.1

View File

@@ -1,4 +1,4 @@
From 593683720fbef744c46cdc9051eb9703d4279819 Mon Sep 17 00:00:00 2001
From cb01601870a6299e0da0a956269ef24ed79d5035 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
@@ -7,14 +7,14 @@ Signed-off-by: Lucian Poston <lucianposton@pm.me>
---
dlls/dwrite/analyzer.c | 77 +++++++++++++++++++++++++++++---------
dlls/dwrite/layout.c | 6 +++
dlls/dwrite/tests/layout.c | 70 +++++++++-------------------------
3 files changed, 83 insertions(+), 70 deletions(-)
dlls/dwrite/tests/layout.c | 54 +++++---------------------
3 files changed, 74 insertions(+), 63 deletions(-)
diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index a418081d491..06a3934d229 100644
index 6b74a23540a..5827e87fdf5 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -2053,6 +2053,7 @@ static HRESULT fallback_get_fallback_font(struct dwrite_fontfallback *fallback,
@@ -2062,6 +2062,7 @@ static HRESULT fallback_get_fallback_font(struct dwrite_fontfallback *fallback,
IDWriteFont **mapped_font)
{
const struct fallback_mapping *mapping;
@@ -22,7 +22,7 @@ index a418081d491..06a3934d229 100644
HRESULT hr;
UINT32 i;
@@ -2064,9 +2065,15 @@ static HRESULT fallback_get_fallback_font(struct dwrite_fontfallback *fallback,
@@ -2073,9 +2074,15 @@ static HRESULT fallback_get_fallback_font(struct dwrite_fontfallback *fallback,
return E_FAIL;
}
@@ -39,7 +39,7 @@ index a418081d491..06a3934d229 100644
weight, style, stretch, mapped_font);
if (hr == S_OK) {
TRACE("Created fallback font using family %s.\n", debugstr_w(mapping->families[i]));
@@ -2123,32 +2130,66 @@ static HRESULT WINAPI fontfallback_MapCharacters(IDWriteFontFallback1 *iface, ID
@@ -2132,32 +2139,66 @@ static HRESULT WINAPI fontfallback_MapCharacters(IDWriteFontFallback1 *iface, ID
if (basefamily && *basefamily) {
hr = create_matching_font(basecollection, basefamily, weight, style, stretch, ret_font);
@@ -124,10 +124,10 @@ index a418081d491..06a3934d229 100644
heap_free(buff);
return hr;
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index 76ea23ba66b..da1261f3dc8 100644
index 99048b97a3c..64d8eef6f59 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -882,6 +882,12 @@ static HRESULT layout_resolve_fonts(struct dwrite_textlayout *layout)
@@ -958,6 +958,12 @@ static HRESULT layout_resolve_fonts(struct dwrite_textlayout *layout)
goto fatal;
}
@@ -141,10 +141,10 @@ index 76ea23ba66b..da1261f3dc8 100644
IDWriteFont_Release(font);
if (FAILED(hr)) {
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 68a6413b2e8..65bbaa71d93 100644
index cea581a0bef..ecefbe9c87a 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -3302,35 +3302,23 @@ todo_wine
@@ -3368,35 +3368,23 @@ todo_wine
count = 0;
hr = IDWriteTextLayout_GetClusterMetrics(layout, clusters, 4, &count);
@@ -180,7 +180,7 @@ index 68a6413b2e8..65bbaa71d93 100644
ok(metrics.lineCount == 1, "got %u\n", metrics.lineCount);
IDWriteTextLayout_Release(layout);
@@ -4624,12 +4612,9 @@ static void test_MapCharacters(void)
@@ -4690,12 +4678,9 @@ 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);
@@ -193,7 +193,7 @@ index 68a6413b2e8..65bbaa71d93 100644
ok(font != NULL, "got %p\n", font);
if (font) {
IDWriteFont_Release(font);
@@ -4641,16 +4626,13 @@ if (font) {
@@ -4707,16 +4692,13 @@ 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);
@@ -213,7 +213,7 @@ index 68a6413b2e8..65bbaa71d93 100644
/* string 'a\x3058b' */
g_source = str2W;
mappedlength = 0;
@@ -4658,38 +4640,32 @@ if (font) {
@@ -4724,32 +4706,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);
@@ -225,11 +225,9 @@ index 68a6413b2e8..65bbaa71d93 100644
-todo_wine
ok(font != NULL, "got %p\n", font);
-if (font) {
- IDWriteFont_Release(font);
IDWriteFont_Release(font);
-}
+ if (font) {
+ IDWriteFont_Release(font);
+ }
+
g_source = str2W;
mappedlength = 0;
scale = 0.0f;
@@ -244,26 +242,13 @@ index 68a6413b2e8..65bbaa71d93 100644
-todo_wine
ok(font != NULL, "got %p\n", font);
-if (font) {
- /* font returned for Hiragana character, check if it supports Latin too */
- exists = FALSE;
- hr = IDWriteFont_HasCharacter(font, 'b', &exists);
- ok(hr == S_OK, "got 0x%08x\n", hr);
- ok(exists, "got %d\n", exists);
+ if (font) {
+ /* font returned for Hiragana character, check if it supports Latin too */
+ exists = FALSE;
+ hr = IDWriteFont_HasCharacter(font, 'b', &exists);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(exists, "got %d\n", exists);
- IDWriteFont_Release(font);
IDWriteFont_Release(font);
-}
+ IDWriteFont_Release(font);
+ }
+
/* Try with explicit collection, Tahoma will be forced. */
/* 1. Latin part */
g_source = str2W;
@@ -4712,7 +4688,10 @@ if (font) {
@@ -4772,7 +4746,10 @@ if (font) {
IDWriteLocalizedStrings_Release(strings);
IDWriteFont_Release(font);
@@ -275,7 +260,7 @@ index 68a6413b2e8..65bbaa71d93 100644
g_source = str2W;
mappedlength = 0;
scale = 0.0f;
@@ -4722,7 +4701,6 @@ if (font) {
@@ -4782,7 +4759,6 @@ if (font) {
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(mappedlength == 1, "got %u\n", mappedlength);
ok(scale == 1.0f, "got %f\n", scale);
@@ -283,7 +268,7 @@ index 68a6413b2e8..65bbaa71d93 100644
exists = FALSE;
hr = IDWriteFont_GetInformationalStrings(font, DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES, &strings, &exists);
@@ -5916,34 +5894,22 @@ static void test_GetMetrics_with_custom_fontcollection(void)
@@ -6564,34 +6540,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);
@@ -319,5 +304,5 @@ index 68a6413b2e8..65bbaa71d93 100644
IDWriteTextLayout_Release(layout);
--
2.17.1
2.20.1

View File

@@ -1,4 +1,4 @@
From 1772676c96491d8e5a2c4d8cd43c12196b972bc5 Mon Sep 17 00:00:00 2001
From a7842fd86fc2aa314226bfe204b3f5e89c4314d9 Mon Sep 17 00:00:00 2001
From: Austin English <austinenglish@gmail.com>
Date: Tue, 13 Oct 2020 04:42:02 -0500
Subject: [PATCH] dpmodemx: add stub dll
@@ -40,12 +40,11 @@ index 00000000000..c15b7a33112
+RC_SRCS = version.rc
diff --git a/dlls/dpmodemx/dpmodemx.spec b/dlls/dpmodemx/dpmodemx.spec
new file mode 100644
index 00000000000..14fb05053a8
index 00000000000..c4c4ef212a7
--- /dev/null
+++ b/dlls/dpmodemx/dpmodemx.spec
@@ -0,0 +1 @@
+@ stub SPInit
\ No newline at end of file
diff --git a/dlls/dpmodemx/version.rc b/dlls/dpmodemx/version.rc
new file mode 100644
index 00000000000..b0c644aed83

View File

@@ -1,4 +1,4 @@
From c4e663329366c37bca65a0beb83d656afea45ecc Mon Sep 17 00:00:00 2001
From 338fc447537dd45e07a3c2d9ef8069af910c936f Mon Sep 17 00:00:00 2001
From: Austin English <austinenglish@gmail.com>
Date: Tue, 13 Oct 2020 04:42:03 -0500
Subject: [PATCH] dxapi.sys: add stub dll
@@ -9,17 +9,16 @@ Signed-off-by: Austin English <austinenglish@gmail.com>
dlls/dxapi.sys/Makefile.in | 6 ++++++
dlls/dxapi.sys/dxapi.sys.spec | 7 +++++++
dlls/dxapi.sys/version.rc | 26 ++++++++++++++++++++++++++
loader/wine.inf.in | 2 ++
5 files changed, 42 insertions(+)
4 files changed, 40 insertions(+)
create mode 100644 dlls/dxapi.sys/Makefile.in
create mode 100644 dlls/dxapi.sys/dxapi.sys.spec
create mode 100644 dlls/dxapi.sys/version.rc
diff --git a/configure.ac b/configure.ac
index da6ada3013b..47e8427f6b8 100644
index d3cb3ed1fd6..86d6912b4e0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3248,6 +3248,7 @@ WINE_CONFIG_MAKEFILE(dlls/dwmapi/tests)
@@ -3274,6 +3274,7 @@ WINE_CONFIG_MAKEFILE(dlls/dwmapi/tests)
WINE_CONFIG_MAKEFILE(dlls/dwrite)
WINE_CONFIG_MAKEFILE(dlls/dwrite/tests)
WINE_CONFIG_MAKEFILE(dlls/dx8vb)
@@ -84,26 +83,6 @@ index 00000000000..7ecd1565052
+#define WINE_PRODUCTVERSION_STR "5.0.2180.1"
+
+#include "wine/wine_common_ver.rc"
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 20d5243aa4b..b4052b146b4 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -2632,6 +2632,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
10,syswow64,stdole2.tlb
11,,iexplore.exe
11,,winetest.exe,-
+12,,dxapi.sys,-
12,,dxgkrnl.sys,-
12,,dxgmms1.sys,-
12,,fltmgr.sys,-
@@ -2689,6 +2690,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
11,,iexplore.exe
11,,notepad.exe
11,,winetest.exe,-
+12,,dxapi.sys,-
12,,dxgkrnl.sys
12,,dxgmms1.sys
12,,fltmgr.sys
--
2.20.1
2.30.1

View File

@@ -1,4 +1,4 @@
From 6fe8944830f612188c670f2c5d5f26c8fd572ca2 Mon Sep 17 00:00:00 2001
From b3579602a731dd7398b113f397cd358554af7567 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 27 Dec 2020 09:57:46 +1100
Subject: [PATCH] dpmodemx: Add stub SPInit
@@ -6,8 +6,8 @@ Subject: [PATCH] dpmodemx: Add stub SPInit
---
dlls/dpmodemx/Makefile.in | 5 ++++-
dlls/dpmodemx/dpmodemx.spec | 2 +-
dlls/dpmodemx/dpmodemx_main.c | 35 +++++++++++++++++++++++++++++++++++
3 files changed, 40 insertions(+), 2 deletions(-)
dlls/dpmodemx/dpmodemx_main.c | 34 ++++++++++++++++++++++++++++++++++
3 files changed, 39 insertions(+), 2 deletions(-)
create mode 100644 dlls/dpmodemx/dpmodemx_main.c
diff --git a/dlls/dpmodemx/Makefile.in b/dlls/dpmodemx/Makefile.in
@@ -26,20 +26,18 @@ index c15b7a33112..b7897fb1cf6 100644
+C_SRCS = \
+ dpmodemx_main.c
diff --git a/dlls/dpmodemx/dpmodemx.spec b/dlls/dpmodemx/dpmodemx.spec
index 14fb05053a8..e3beb3f8cc7 100644
index c4c4ef212a7..2ef9c5bf45c 100644
--- a/dlls/dpmodemx/dpmodemx.spec
+++ b/dlls/dpmodemx/dpmodemx.spec
@@ -1 +1 @@
-@ stub SPInit
\ No newline at end of file
+@ stdcall SPInit(ptr)
\ No newline at end of file
diff --git a/dlls/dpmodemx/dpmodemx_main.c b/dlls/dpmodemx/dpmodemx_main.c
new file mode 100644
index 00000000000..d87be210165
index 00000000000..f35e0804299
--- /dev/null
+++ b/dlls/dpmodemx/dpmodemx_main.c
@@ -0,0 +1,35 @@
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2020 Austin English
@@ -74,7 +72,6 @@ index 00000000000..d87be210165
+ FIXME("Currently not implemented.\n");
+ return DPERR_UNAVAILABLE;
+}
+
--
2.20.1

View File

@@ -1,4 +1,4 @@
From 19ec5223ae49b6862ca6fc420a2c41f94befc0df Mon Sep 17 00:00:00 2001
From bdc4be1fa3a5fca212eb8d146d114214399b9bd7 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,17 +16,17 @@ 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 b2f63d9f63a..5dc4ebb07fc 100644
index 179d00b29ef..1de3490d4f0 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -46,6 +46,7 @@ C_SRCS = \
@@ -45,6 +45,7 @@ C_SRCS = \
unix/cdrom.c \
unix/debug.c \
unix/env.c \
+ unix/esync.c \
unix/file.c \
unix/loader.c \
unix/process.c \
unix/loadorder.c \
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
new file mode 100644
index 00000000000..7c409c7a9ca
@@ -348,7 +348,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 c4f897f3d0d..0012d8d08af 100644
index 20f614f59f1..afbb0e391f3 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -89,6 +89,7 @@
@@ -359,7 +359,7 @@ index c4f897f3d0d..0012d8d08af 100644
#include "wine/list.h"
#include "wine/debug.h"
@@ -1649,6 +1650,7 @@ static void start_main_thread(void)
@@ -1602,6 +1603,7 @@ static void start_main_thread(void)
signal_init_thread( teb );
dbg_init();
startup_info_size = server_init_process();
@@ -368,7 +368,7 @@ index c4f897f3d0d..0012d8d08af 100644
init_cpu_info();
syscall_dispatcher = signal_init_syscalls();
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
index 6af8effe9e1..401d439b363 100644
index 4f149c0f644..59f409ead8c 100644
--- a/dlls/ntdll/unix/server.c
+++ b/dlls/ntdll/unix/server.c
@@ -112,7 +112,7 @@ timeout_t server_start_time = 0; /* time of server startup */
@@ -380,7 +380,7 @@ index 6af8effe9e1..401d439b363 100644
/* atomically exchange a 64-bit value */
static inline LONG64 interlocked_xchg64( LONG64 *dest, LONG64 val )
@@ -832,7 +832,7 @@ void CDECL wine_server_send_fd( int fd )
@@ -835,7 +835,7 @@ void CDECL wine_server_send_fd( int fd )
*
* Receive a file descriptor passed from the server.
*/
@@ -424,5 +424,5 @@ index a571855c70a..e41bbbf9349 100644
int do_esync(void)
{
--
2.20.1
2.30.1

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