Compare commits

..

17 Commits

Author SHA1 Message Date
Alistair Leslie-Hughes
c323ef47c7 Release v4.16 2019-09-14 17:17:30 +10:00
Zebediah Figura
9e6693ed13 ntdll-Interrupt-0x2e: Fully handle interrupt 0x2e on the signal stack. 2019-09-13 17:12:40 -05:00
Zebediah Figura
29bdd4cd85 ntdll-Signal_Handler: Restore accidentally deleted hunk. 2019-09-13 17:03:26 -05:00
Zebediah Figura
39d7dcb2c6 Rebase against 3bf7473b880eea8b8dcaa43487afda2d7b1fbd03. 2019-09-13 17:03:00 -05:00
Alistair Leslie-Hughes
2e4d0f4727 Updated wined3d-zero-inf-shaders patchset 2019-09-13 09:28:30 +10:00
Alistair Leslie-Hughes
fd818b1914 Update mfplat-MFGetConfigurationDWORD patchset 2019-09-13 09:28:30 +10:00
Alistair Leslie-Hughes
26e542b4e5 Rebase against 85d8d1390467147fca416236fd50bb6ea2e2c8e4 2019-09-13 09:28:30 +10:00
Alistair Leslie-Hughes
6ef7be2566 Updated directmanipulation-new-dll patchset 2019-09-12 09:00:15 +10:00
Alistair Leslie-Hughes
5b012f08d5 Added mfplat-MFGetConfigurationDWORD patchset 2019-09-12 09:00:15 +10:00
Alistair Leslie-Hughes
8390ba0d95 Added wined3d-zero-inf-shaders patchset 2019-09-12 08:33:01 +10:00
Alistair Leslie-Hughes
fb18deb95f Rebase against 1413f577c592cd4aaeb3dba1a8adbe3e04d62d29 2019-09-11 09:26:34 +10:00
Alistair Leslie-Hughes
27b33a4be9 Remove setupapi-Display_Device patchset
This has been reported as fixed upstream and is no longer required.

Thanks Zhiyi Zhang.
2019-09-10 18:16:20 +10:00
Zebediah Figura
a15bdaa0ba Rebase against 01b19b63a454aa455928c10c694895fdba901aba. 2019-09-09 18:52:44 -05:00
Zebediah Figura
734918298c Rebase against 765815729fc4af2472e60551364e3b29dccfbcff. 2019-09-06 17:38:54 -05:00
Alistair Leslie-Hughes
bc1aa54891 Rebase against 92c00c51b21594987d342b5ce00c174ab4e84595 2019-09-05 08:52:02 +10:00
Alistair Leslie-Hughes
2da0d341f6 Rebase against 363b8809f37b3ea5915ea4240b3d397fd2355e2e 2019-09-04 08:23:20 +10:00
Alistair Leslie-Hughes
155cb0b051 Rebase against 0c2f5f8b15a4f7bb7008c3efb12b4cd3c774a3a1 2019-09-04 08:02:11 +10:00
27 changed files with 828 additions and 908 deletions

View File

@@ -0,0 +1,26 @@
From 5d5892c9403b77bd3f17acebfee1acc7e95003a0 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 30 Jul 2019 09:30:41 +1000
Subject: [PATCH 1/4] directmanipulation: Fake success from
IDirectManipulationViewport2 ActivateConfiguration.
---
dlls/directmanipulation/directmanipulation.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
index 4f16963d42..f1e008bc7f 100644
--- a/dlls/directmanipulation/directmanipulation.c
+++ b/dlls/directmanipulation/directmanipulation.c
@@ -370,7 +370,7 @@ static HRESULT WINAPI viewport_ActivateConfiguration(IDirectManipulationViewport
{
struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
FIXME("%p, %d\n", This, configuration);
- return E_NOTIMPL;
+ return S_OK;
}
static HRESULT WINAPI viewport_SetManualGesture(IDirectManipulationViewport2 *iface, DIRECTMANIPULATION_GESTURE_CONFIGURATION configuration)
--
2.17.1

View File

@@ -0,0 +1,91 @@
From 34c03e1857d977ef7ec913628a358092f749394b Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 31 Jul 2019 10:03:26 +1000
Subject: [PATCH 2/4] include: Add IDirectManipulationPrimaryContent interface
---
include/directmanipulation.idl | 61 ++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/include/directmanipulation.idl b/include/directmanipulation.idl
index 443b31a0ce..a49f368d11 100644
--- a/include/directmanipulation.idl
+++ b/include/directmanipulation.idl
@@ -88,6 +88,39 @@ typedef enum DIRECTMANIPULATION_MOTION_TYPES
DIRECTMANIPULATION_MOTION_CENTERY
} DIRECTMANIPULATION_MOTION_TYPES;
+typedef enum DIRECTMANIPULATION_SNAPPOINT_TYPE
+{
+ DIRECTMANIPULATION_SNAPPOINT_MANDATORY = 0,
+ DIRECTMANIPULATION_SNAPPOINT_OPTIONAL = 1,
+ DIRECTMANIPULATION_SNAPPOINT_MANDATORY_SINGLE = 2,
+ DIRECTMANIPULATION_SNAPPOINT_OPTIONAL_SINGLE = 3
+} DIRECTMANIPULATION_SNAPPOINT_TYPE;
+
+typedef enum DIRECTMANIPULATION_SNAPPOINT_COORDINATE
+{
+ DIRECTMANIPULATION_COORDINATE_BOUNDARY = 0x00,
+ DIRECTMANIPULATION_COORDINATE_ORIGIN = 0x01,
+ DIRECTMANIPULATION_COORDINATE_MIRRORED = 0x10
+} DIRECTMANIPULATION_SNAPPOINT_COORDINATE;
+
+typedef enum DIRECTMANIPULATION_HORIZONTALALIGNMENT
+{
+ DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE = 0x00,
+ DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT = 0x01,
+ DIRECTMANIPULATION_HORIZONTALALIGNMENT_CENTER = 0x02,
+ DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT = 0x04,
+ DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER = 0x08
+} DIRECTMANIPULATION_HORIZONTALALIGNMENT;
+
+typedef enum DIRECTMANIPULATION_VERTICALALIGNMENT
+{
+ DIRECTMANIPULATION_VERTICALALIGNMENT_NONE = 0x00,
+ DIRECTMANIPULATION_VERTICALALIGNMENT_TOP = 0x01,
+ DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER = 0x02,
+ DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM = 0x04,
+ DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER = 0x08
+} DIRECTMANIPULATION_VERTICALALIGNMENT;
+
typedef enum DIRECTMANIPULATION_INPUT_MODE
{
DIRECTMANIPULATION_INPUT_MODE_AUTOMATIC = 0,
@@ -309,6 +342,34 @@ interface IDirectManipulationManager2 : IDirectManipulationManager
HRESULT CreateBehavior([in] REFCLSID clsid, [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
}
+[
+ local,
+ object,
+ uuid(c12851e4-1698-4625-b9b1-7ca3ec18630b),
+ pointer_default(unique)
+]
+interface IDirectManipulationPrimaryContent : IUnknown
+{
+ HRESULT SetSnapInterval([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] float interval, [in] float offset);
+
+ HRESULT SetSnapPoints([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] const float *points, [in] DWORD count);
+
+ HRESULT SetSnapType([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] DIRECTMANIPULATION_SNAPPOINT_TYPE type);
+
+ HRESULT SetSnapCoordinate([in] DIRECTMANIPULATION_MOTION_TYPES motion, [in] DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate,
+ [in] float origin);
+
+ HRESULT SetZoomBoundaries([in] float minimum, [in] float maximum);
+
+ HRESULT SetHorizontalAlignment([in] DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment);
+
+ HRESULT SetVerticalAlignment([in] DIRECTMANIPULATION_VERTICALALIGNMENT alignment);
+
+ HRESULT GetInertiaEndTransform([out] float *matrix, [in] DWORD count);
+
+ HRESULT GetCenterPoint([out] float *x, [out] float *y);
+}
+
[
uuid(9fbedf98-f6d8-4e3b-b488-fa66dbf5e9f3),
version(1.0)
--
2.17.1

View File

@@ -0,0 +1,186 @@
From 52d03476a908684bb201ae69032f39bf2a745190 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 23 Aug 2019 11:34:16 +1000
Subject: [PATCH 3/4] directmanipulation: Implement
IDirectManipulationViewport2 GetPrimaryContent
---
dlls/directmanipulation/directmanipulation.c | 155 ++++++++++++++++++-
1 file changed, 154 insertions(+), 1 deletion(-)
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
index f1e008bc7f..ca60e76db6 100644
--- a/dlls/directmanipulation/directmanipulation.c
+++ b/dlls/directmanipulation/directmanipulation.c
@@ -177,6 +177,142 @@ static HRESULT create_update_manager(IDirectManipulationUpdateManager **obj)
return S_OK;
}
+
+struct primarycontext
+{
+ IDirectManipulationPrimaryContent IDirectManipulationPrimaryContent_iface;
+ LONG ref;
+};
+
+static inline struct primarycontext *impl_from_IDirectManipulationPrimaryContent(IDirectManipulationPrimaryContent *iface)
+{
+ return CONTAINING_RECORD(iface, struct primarycontext, IDirectManipulationPrimaryContent_iface);
+}
+
+static HRESULT WINAPI primary_QueryInterface(IDirectManipulationPrimaryContent *iface, REFIID riid, void **ppv)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppv);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IDirectManipulationPrimaryContent))
+ {
+ IDirectManipulationPrimaryContent_AddRef(&This->IDirectManipulationPrimaryContent_iface);
+ *ppv = &This->IDirectManipulationPrimaryContent_iface;
+ return S_OK;
+ }
+
+ FIXME("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI primary_AddRef(IDirectManipulationPrimaryContent *iface)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%u\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI primary_Release(IDirectManipulationPrimaryContent *iface)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p) ref=%u\n", This, ref);
+
+ if (!ref)
+ {
+ heap_free(This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI primary_SetSnapInterval(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
+ float interval, float offset)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %d, %f, %f\n", This, motion, interval, offset);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_SetSnapPoints(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
+ const float *points, DWORD count)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %d, %p, %d\n", This, motion, points, count);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_SetSnapType(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
+ DIRECTMANIPULATION_SNAPPOINT_TYPE type)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %d, %d\n", This, motion, type);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_SetSnapCoordinate(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_MOTION_TYPES motion,
+ DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate, float origin)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %d, %d, %f\n", This, motion, coordinate, origin);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_SetZoomBoundaries(IDirectManipulationPrimaryContent *iface, float minimum, float maximum)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %f, %f\n", This, minimum, maximum);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_SetHorizontalAlignment(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %d\n", This, alignment);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_SetVerticalAlignment(IDirectManipulationPrimaryContent *iface, DIRECTMANIPULATION_VERTICALALIGNMENT alignment)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %d\n", This, alignment);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_GetInertiaEndTransform(IDirectManipulationPrimaryContent *iface, float *matrix, DWORD count)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %p, %d\n", This, matrix, count);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI primary_GetCenterPoint(IDirectManipulationPrimaryContent *iface, float *x, float *y)
+{
+ struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface);
+ FIXME("%p, %p, %p\n", This, x, y);
+ return E_NOTIMPL;
+}
+
+static const IDirectManipulationPrimaryContentVtbl primaryVtbl =
+{
+ primary_QueryInterface,
+ primary_AddRef,
+ primary_Release,
+ primary_SetSnapInterval,
+ primary_SetSnapPoints,
+ primary_SetSnapType,
+ primary_SetSnapCoordinate,
+ primary_SetZoomBoundaries,
+ primary_SetHorizontalAlignment,
+ primary_SetVerticalAlignment,
+ primary_GetInertiaEndTransform,
+ primary_GetCenterPoint
+};
+
struct directviewport
{
IDirectManipulationViewport2 IDirectManipulationViewport2_iface;
@@ -327,7 +463,24 @@ static HRESULT WINAPI viewport_SyncDisplayTransform(IDirectManipulationViewport2
static HRESULT WINAPI viewport_GetPrimaryContent(IDirectManipulationViewport2 *iface, REFIID riid, void **object)
{
struct directviewport *This = impl_from_IDirectManipulationViewport2(iface);
- FIXME("%p, %s, %p\n", This, debugstr_guid(riid), object);
+ TRACE("%p, %s, %p\n", This, debugstr_guid(riid), object);
+ if(IsEqualGUID(riid, &IID_IDirectManipulationPrimaryContent))
+ {
+ struct primarycontext *primary;
+ TRACE("IDirectManipulationPrimaryContent\n");
+ primary = heap_alloc( sizeof(*primary));
+ if(!primary)
+ return E_OUTOFMEMORY;
+
+ primary->IDirectManipulationPrimaryContent_iface.lpVtbl = &primaryVtbl;
+ primary->ref = 1;
+
+ *object = &primary->IDirectManipulationPrimaryContent_iface;
+
+ return S_OK;
+ }
+ else
+ FIXME("Unsupported interface %s\n", debugstr_guid(riid));
return E_NOTIMPL;
}
--
2.17.1

View File

@@ -1,24 +1,24 @@
From efdcaba02d66b65177ce73686f4d4b5fb8f6e4f8 Mon Sep 17 00:00:00 2001
From b617701d440a9b5210762503cf441e9fcb3132e1 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 13 Jan 2017 01:59:13 +0100
Subject: kernel32: Always start debugger on WinSta0.
---
dlls/kernel32/except.c | 1 +
dlls/kernelbase/debug.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/kernel32/except.c b/dlls/kernel32/except.c
index 1a1521a8038..cbc880f9a44 100644
--- a/dlls/kernel32/except.c
+++ b/dlls/kernel32/except.c
@@ -314,6 +314,7 @@ static BOOL start_debugger(PEXCEPTION_POINTERS epointers, HANDLE hEvent)
TRACE("Starting debugger %s\n", debugstr_a(cmdline));
memset(&startup, 0, sizeof(startup));
diff --git a/dlls/kernelbase/debug.c b/dlls/kernelbase/debug.c
index 016c21109..0681f726b 100644
--- a/dlls/kernelbase/debug.c
+++ b/dlls/kernelbase/debug.c
@@ -640,6 +640,7 @@ static BOOL start_debugger( EXCEPTION_POINTERS *epointers, HANDLE event )
TRACE( "Starting debugger %s\n", debugstr_w(cmdline) );
memset( &startup, 0, sizeof(startup) );
startup.cb = sizeof(startup);
+ startup.lpDesktop = (char *)"WinSta0";
startup.dwFlags = STARTF_USESHOWWINDOW;
startup.wShowWindow = SW_SHOWNORMAL;
ret = CreateProcessA(NULL, cmdline, NULL, NULL, TRUE, 0, env, NULL, &startup, &info);
ret = CreateProcessW( NULL, cmdline, NULL, NULL, TRUE, 0, env, NULL, &startup, &info );
--
2.11.0
2.23.0

View File

@@ -1,44 +0,0 @@
From 4b299b286d73648250fedd699f2ef98e73a5e1a8 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Mon, 2 Sep 2019 20:44:56 +0200
Subject: [PATCH] configure: Don't link to libunwind if not necessary.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
---
configure | 2 +-
configure.ac | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index 0377509c60..e374edfdc5 100755
--- a/configure
+++ b/configure
@@ -14904,9 +14904,9 @@ rm -f core conftest.err conftest.$ac_objext \
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $wine_cv_have_libunwind_unw_getcontext" >&5
$as_echo "$wine_cv_have_libunwind_unw_getcontext" >&6; }
- test "$wine_cv_have_libunwind_unw_getcontext" = yes || UNWIND_LIBS=""
LIBS=$save_libs
fi
+ test "$wine_cv_have_libunwind_unw_getcontext" = yes || UNWIND_LIBS=""
if test "x$wine_cv_have_unw_getcontext$wine_cv_have_libunwind_unw_getcontext" != xnono
then
diff --git a/configure.ac b/configure.ac
index d0af7ef4a1..ff81a172f9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1697,9 +1697,9 @@ then
[[unw_context_t context; unw_getcontext( &context );]])],
[wine_cv_have_libunwind_unw_getcontext="yes"],
[wine_cv_have_libunwind_unw_getcontext="no"])])
- test "$wine_cv_have_libunwind_unw_getcontext" = yes || UNWIND_LIBS=""
LIBS=$save_libs
fi
+ test "$wine_cv_have_libunwind_unw_getcontext" = yes || UNWIND_LIBS=""
if test "x$wine_cv_have_unw_getcontext$wine_cv_have_libunwind_unw_getcontext" != xnono
then
AC_DEFINE(HAVE_LIBUNWIND,1,[Define to 1 if you have the `unwind' library (-lunwind).])
--
2.23.0.rc1

View File

@@ -1,141 +0,0 @@
From 0d23ecd9ec8a0c24e5444e0fc9cf6933cc39c960 Mon Sep 17 00:00:00 2001
From: Zhiyi Zhang <zzhang@codeweavers.com>
Date: Mon, 2 Sep 2019 12:04:21 +0800
Subject: [PATCH] winemac.drv: Fix build with older macOS SDKs.
macOS SDKs older than 10.11 doesn't support Metal.
macOS 10.11 and 10.12 SDK support Metal but don't
support registryID in MTLDevice protocol. Recommend
using 10.13+ SDK.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
---
configure | 40 ++++++++++++++++++++++++++++++++
configure.ac | 12 ++++++++++
dlls/winemac.drv/cocoa_display.m | 5 ++--
include/config.h.in | 3 +++
4 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index a52e346b68..0c54e27f5f 100755
--- a/configure
+++ b/configure
@@ -8952,6 +8952,46 @@ rm -f core conftest.err conftest.$ac_objext \
then
METAL_LIBS="-framework Metal -framework QuartzCore"
+ fi
+
+ if test "$ac_cv_header_Metal_Metal_h" = "yes"
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether MTLDevice protocol supports registryID property" >&5
+$as_echo_n "checking whether MTLDevice protocol supports registryID property... " >&6; }
+ ac_ext=m
+ac_cpp='$OBJCPP $CPPFLAGS'
+ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_objc_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <Metal/Metal.h>
+int
+main ()
+{
+id<MTLDevice> device; device.registryID;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_objc_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_MTLDEVICE_REGISTRYID 1" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
fi
if test "$ac_cv_header_ApplicationServices_ApplicationServices_h" = "yes"
diff --git a/configure.ac b/configure.ac
index 1592812bf7..b39b6b2c90 100644
--- a/configure.ac
+++ b/configure.ac
@@ -859,6 +859,18 @@ case $host_os in
AC_SUBST(METAL_LIBS,"-framework Metal -framework QuartzCore")
fi
+ dnl Check for MTLDevice registryID property
+ if test "$ac_cv_header_Metal_Metal_h" = "yes"
+ then
+ AC_MSG_CHECKING([whether MTLDevice protocol supports registryID property])
+ AC_LANG_PUSH([Objective C])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <Metal/Metal.h>]], [[id<MTLDevice> device; device.registryID;]])],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MTLDEVICE_REGISTRYID, 1, [Define if MTLDevice protocol has registryID property.])],
+ [AC_MSG_RESULT(no)])
+ AC_LANG_POP([Objective C])
+ fi
+
dnl Enable Mac driver on Mac OS X 10.6 or later
if test "$ac_cv_header_ApplicationServices_ApplicationServices_h" = "yes"
then
diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m
index 3863557d96..9d95eee99a 100644
--- a/dlls/winemac.drv/cocoa_display.m
+++ b/dlls/winemac.drv/cocoa_display.m
@@ -21,7 +21,7 @@
#include "config.h"
#import <AppKit/AppKit.h>
-#ifdef HAVE_METAL_METAL_H
+#ifdef HAVE_MTLDEVICE_REGISTRYID
#import <Metal/Metal.h>
#endif
#include "macdrv_cocoa.h"
@@ -234,7 +234,7 @@ static int macdrv_get_gpu_info_from_entry(struct macdrv_gpu* gpu, io_registry_en
return ret;
}
-#ifdef HAVE_METAL_METAL_H
+#ifdef HAVE_MTLDEVICE_REGISTRYID
/***********************************************************************
* macdrv_get_gpu_info_from_registry_id
@@ -337,7 +337,6 @@ static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count)
static int macdrv_get_gpus_from_metal(struct macdrv_gpu** new_gpus, int* count)
{
- TRACE("Metal support not compiled in\n");
return -1;
}
diff --git a/include/config.h.in b/include/config.h.in
index 924e11eac0..5f690df7b0 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -584,6 +584,9 @@
/* Define to 1 if you have the <mpg123.h> header file. */
#undef HAVE_MPG123_H
+/* Define if MTLDevice protocol has registryID property. */
+#undef HAVE_MTLDEVICE_REGISTRYID
+
/* Define to 1 if you have the <ncurses.h> header file. */
#undef HAVE_NCURSES_H
--
2.23.0.rc1

View File

@@ -0,0 +1,50 @@
From cd8c2fb687e322b2d142ad0d6b23978e56df5a5c Mon Sep 17 00:00:00 2001
From: Andrey Gusev <andrey.goosev@gmail.com>
Date: Sun, 1 Sep 2019 18:34:53 +0300
Subject: [PATCH 1/2] mfplat: Add DestroyPropVariant stub.
---
dlls/mfplat/main.c | 13 +++++++++++++
dlls/mfplat/mfplat.spec | 2 +-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 5cbf1212f7..755b86aced 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -7619,6 +7619,19 @@ HRESULT WINAPI CreatePropertyStore(IPropertyStore **store)
return S_OK;
}
+/***********************************************************************
+ * DestroyPropVariant (mfplat.@)
+ */
+HRESULT WINAPI DestroyPropVariant(PROPVARIANT *pv)
+{
+ FIXME("%p stub!\n", pv);
+
+ if (!pv)
+ return E_POINTER;
+
+ return E_NOTIMPL;
+}
+
struct dxgi_device_manager
{
IMFDXGIDeviceManager IMFDXGIDeviceManager_iface;
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index cc440c5ee0..a217bda82d 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -11,7 +11,7 @@
@ stub CopyPropVariant
@ stub CreatePropVariant
@ stdcall CreatePropertyStore(ptr)
-@ stub DestroyPropVariant
+@ stdcall DestroyPropVariant(ptr)
@ stub GetAMSubtypeFromD3DFormat
@ stub GetD3DFormatFromMFSubtype
@ stub LFGetGlobalPool
--
2.17.1

View File

@@ -0,0 +1,47 @@
From a45f5f4a1605bd5c1324c641bbe6fbc5d5c3df90 Mon Sep 17 00:00:00 2001
From: Andrey Gusev <andrey.goosev@gmail.com>
Date: Sun, 1 Sep 2019 17:40:05 +0300
Subject: [PATCH 2/2] mfplat: Add MFGetConfigurationDWORD stub.
---
dlls/mfplat/main.c | 10 ++++++++++
dlls/mfplat/mfplat.spec | 2 +-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 755b86aced..a74d472d15 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -2300,6 +2300,16 @@ static HRESULT attributes_deserialize_read(struct attr_serialize_context *contex
return S_OK;
}
+/***********************************************************************
+ * MFGetConfigurationDWORD (mfplat.@)
+ */
+HRESULT WINAPI MFGetConfigurationDWORD(void *unk1, void *unk2, void *unk3)
+{
+ FIXME("%p, %p, %p stub!\n", unk1, unk2, unk3);
+
+ return E_NOTIMPL;
+}
+
/***********************************************************************
* MFInitAttributesFromBlob (mfplat.@)
*/
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index a217bda82d..18cefa936b 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -89,7 +89,7 @@
@ stub MFGetAdaptersAddresses
@ stdcall MFGetAttributesAsBlob(ptr ptr long)
@ stdcall MFGetAttributesAsBlobSize(ptr ptr)
-@ stub MFGetConfigurationDWORD
+@ stdcall MFGetConfigurationDWORD(ptr ptr ptr)
@ stub MFGetConfigurationPolicy
@ stub MFGetConfigurationStore
@ stub MFGetConfigurationString
--
2.17.1

View File

@@ -0,0 +1 @@
Fixes: [47757] - mfplat: Add MFGetConfigurationDWORD stub.

View File

@@ -1,19 +1,19 @@
From d14f1523f3694d7bc2c7c79b6b7bd6f2a354bfb7 Mon Sep 17 00:00:00 2001
From bf3b9244f374b9926db04b63b29f77139280b44a Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 28 Sep 2014 23:39:51 +0200
Subject: ntdll: OutputDebugString should throw the exception a second time, if
a debugger is attached.
---
dlls/kernel32/debugger.c | 17 +++++++++++++++++
dlls/kernelbase/debug.c | 17 +++++++++++++++++
dlls/ntdll/tests/exception.c | 11 +++++------
2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/dlls/kernel32/debugger.c b/dlls/kernel32/debugger.c
index a277f93..2fb9c73 100644
--- a/dlls/kernel32/debugger.c
+++ b/dlls/kernel32/debugger.c
@@ -277,6 +277,23 @@ void WINAPI OutputDebugStringA( LPCSTR str )
diff --git a/dlls/kernelbase/debug.c b/dlls/kernelbase/debug.c
index 016c21109..a3d14d340 100644
--- a/dlls/kernelbase/debug.c
+++ b/dlls/kernelbase/debug.c
@@ -210,6 +210,23 @@ void WINAPI DECLSPEC_HOTPATCH OutputDebugStringA( LPCSTR str )
__ENDTRY
if (caught_by_dbg) return;
@@ -38,10 +38,10 @@ index a277f93..2fb9c73 100644
if (!mutex_inited)
{
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
index 7462024..151b67a 100644
index 0a9dae138..b7b0f0e70 100644
--- a/dlls/ntdll/tests/exception.c
+++ b/dlls/ntdll/tests/exception.c
@@ -2063,7 +2063,7 @@ static LONG CALLBACK outputdebugstring_vectored_handler(EXCEPTION_POINTERS *Exce
@@ -2751,7 +2751,7 @@ static LONG CALLBACK outputdebugstring_vectored_handler(EXCEPTION_POINTERS *Exce
return EXCEPTION_CONTINUE_SEARCH;
}
@@ -50,7 +50,7 @@ index 7462024..151b67a 100644
{
PVOID vectored_handler;
@@ -2079,7 +2079,6 @@ static void test_outputdebugstring(DWORD numexc, BOOL todo)
@@ -2767,7 +2767,6 @@ static void test_outputdebugstring(DWORD numexc, BOOL todo)
outputdebugstring_exceptions = 0;
OutputDebugStringA("Hello World");
@@ -58,7 +58,7 @@ index 7462024..151b67a 100644
ok(outputdebugstring_exceptions == numexc, "OutputDebugStringA generated %d exceptions, expected %d\n",
outputdebugstring_exceptions, numexc);
@@ -2522,9 +2521,9 @@ START_TEST(exception)
@@ -3448,9 +3447,9 @@ START_TEST(exception)
run_rtlraiseexception_test(EXCEPTION_BREAKPOINT);
run_rtlraiseexception_test(EXCEPTION_INVALID_HANDLE);
test_stage = 3;
@@ -70,7 +70,7 @@ index 7462024..151b67a 100644
test_stage = 5;
test_ripevent(0);
test_stage = 6;
@@ -2553,7 +2552,7 @@ START_TEST(exception)
@@ -3481,7 +3480,7 @@ START_TEST(exception)
test_exceptions();
test_rtlraiseexception();
test_debug_registers();
@@ -79,7 +79,7 @@ index 7462024..151b67a 100644
test_ripevent(1);
test_debug_service(1);
test_breakpoint(1);
@@ -2586,7 +2585,7 @@ START_TEST(exception)
@@ -3519,7 +3518,7 @@ START_TEST(exception)
"_setjmp" );
test_debug_registers();
@@ -89,5 +89,5 @@ index 7462024..151b67a 100644
test_debug_service(1);
test_breakpoint(1);
--
2.9.0
2.23.0

View File

@@ -1,55 +1,28 @@
From 40f4e264b0c957eafe187bc0de597c3aa18dc6be Mon Sep 17 00:00:00 2001
From 2873f540b5334e1562b1b2f0f537ee5a27b23592 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 19 Mar 2017 19:08:34 +0100
Subject: ntdll: Catch windows int 0x2e syscall on i386.
Subject: [PATCH] ntdll: Catch windows int 0x2e syscall on i386.
---
dlls/ntdll/signal_i386.c | 13 +++++++++++++
include/wine/exception.h | 1 +
2 files changed, 14 insertions(+)
dlls/ntdll/signal_i386.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index d76fe95dfa..93d9418527 100644
index 8d1c59150..ca2c67333 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -1572,6 +1572,14 @@ static inline BOOL handle_interrupt( unsigned int interrupt, EXCEPTION_RECORD *r
rec->ExceptionInformation[1] = context->Ecx;
rec->ExceptionInformation[2] = context->Edx;
@@ -1946,6 +1946,11 @@ static BOOL handle_interrupt( unsigned int interrupt, ucontext_t *sigcontext, st
stack->rec.ExceptionInformation[2] = stack->context.Edx;
setup_raise_exception( sigcontext, stack );
return TRUE;
+ case 0x2e:
+ context->Eip += 2;
+ rec->ExceptionCode = EXCEPTION_WINE_SYSCALL;
+ rec->ExceptionAddress = (void *)context->Eip;
+ rec->NumberParameters = 2;
+ rec->ExceptionInformation[0] = context->Eax;
+ rec->ExceptionInformation[1] = context->Edx;
+ FIXME("unimplemented syscall handler for %#lx\n", stack->context.Eax);
+ EAX_sig(sigcontext) = STATUS_INVALID_SYSTEM_SERVICE;
+ EIP_sig(sigcontext) += 2;
+ return TRUE;
default:
return FALSE;
}
@@ -1953,6 +1961,11 @@ static void WINAPI raise_segv_exception( EXCEPTION_RECORD *rec, CONTEXT *context
}
}
break;
+ case EXCEPTION_WINE_SYSCALL:
+ FIXME("unimplemented syscall handler for 0x%lx, stack 0x%lx\n",
+ rec->ExceptionInformation[0], rec->ExceptionInformation[1]);
+ context->Eax = STATUS_INVALID_SYSTEM_SERVICE;
+ goto done;
}
status = NtRaiseException( rec, context, TRUE );
raise_status( status, rec );
diff --git a/include/wine/exception.h b/include/wine/exception.h
index f275568f4d..b8aeb3b866 100644
--- a/include/wine/exception.h
+++ b/include/wine/exception.h
@@ -302,6 +302,7 @@ static inline EXCEPTION_REGISTRATION_REC
#define EXCEPTION_WINE_STUB 0x80000100 /* stub entry point called */
#define EXCEPTION_WINE_ASSERTION 0x80000101 /* assertion failed */
+#define EXCEPTION_WINE_SYSCALL 0x80000103
#ifdef __cplusplus
}
--
2.11.0
2.23.0

View File

@@ -1,182 +0,0 @@
From e180b88a8c4c1d2d43cd084264fea48b93c17b3a Mon Sep 17 00:00:00 2001
From: Alex Henrie <alexhenrie24@gmail.com>
Date: Sun, 25 Aug 2019 18:02:28 -0600
Subject: [PATCH 1/4] ntdll: Implement RtlIpv4StringToAddress(Ex)W
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46149
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
dlls/ntdll/rtl.c | 145 +++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 141 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index e0d855138f..72ecfd937a 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -884,13 +884,150 @@ void WINAPI RtlCopyLuidAndAttributesArray(
for (i = 0; i < Count; i++) Dest[i] = Src[i];
}
+static BOOL parse_ipv4_component(const WCHAR **str, BOOL strict, ULONG *value)
+{
+ static const int hex_table[] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x00-0x0F */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10-0x1F */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x20-0x2F */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /* 0x30-0x3F */
+ -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x40-0x4F */
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x50-0x5F */
+ -1, 10, 11, 12, 13, 14, 15 /* 0x60-0x66 */
+ };
+ int base = 10, d;
+ WCHAR c;
+ ULONG cur_value, prev_value = 0;
+ BOOL success = FALSE;
+
+ if (**str == '.')
+ {
+ *str += 1;
+ return FALSE;
+ }
+
+ if ((*str)[0] == '0')
+ {
+ if ((*str)[1] == 'x' || (*str)[1] == 'X')
+ {
+ *str += 2;
+ if (strict) return FALSE;
+ base = 16;
+ }
+ else if ((*str)[1] >= '0' && (*str)[1] <= '9')
+ {
+ *str += 1;
+ if (strict) return FALSE;
+ base = 8;
+ }
+ }
+
+ for (cur_value = 0; **str; *str += 1)
+ {
+ c = **str;
+ if (c >= ARRAY_SIZE(hex_table)) break;
+ d = hex_table[c];
+ if (d == -1 || d >= base) break;
+ cur_value = cur_value * base + d;
+ success = TRUE;
+ if (cur_value < prev_value) return FALSE; /* overflow */
+ prev_value = cur_value;
+ }
+
+ if (success) *value = cur_value;
+ return success;
+}
+
+static NTSTATUS ipv4_string_to_address(const WCHAR *str, BOOL strict,
+ const WCHAR **terminator, IN_ADDR *address, USHORT *port)
+{
+ ULONG fields[4];
+ int n = 0;
+
+ for (;;)
+ {
+ if (!parse_ipv4_component(&str, strict, &fields[n]))
+ goto error;
+ n++;
+ if (*str != '.')
+ break;
+ if (n == 4)
+ goto error;
+ str++;
+ }
+
+ if (strict && n < 4)
+ goto error;
+
+ switch (n)
+ {
+ case 4:
+ if (fields[0] > 0xFF || fields[1] > 0xFF || fields[2] > 0xFF || fields[3] > 0xFF)
+ goto error;
+ address->S_un.S_un_b.s_b1 = fields[0];
+ address->S_un.S_un_b.s_b2 = fields[1];
+ address->S_un.S_un_b.s_b3 = fields[2];
+ address->S_un.S_un_b.s_b4 = fields[3];
+ break;
+ case 3:
+ if (fields[0] > 0xFF || fields[1] > 0xFF || fields[2] > 0xFFFF)
+ goto error;
+ address->S_un.S_un_b.s_b1 = fields[0];
+ address->S_un.S_un_b.s_b2 = fields[1];
+ address->S_un.S_un_b.s_b3 = (fields[2] & 0xFF00) >> 8;
+ address->S_un.S_un_b.s_b4 = (fields[2] & 0x00FF);
+ break;
+ case 2:
+ if (fields[0] > 0xFF || fields[1] > 0xFFFFFF)
+ goto error;
+ address->S_un.S_un_b.s_b1 = fields[0];
+ address->S_un.S_un_b.s_b2 = (fields[1] & 0xFF0000) >> 16;
+ address->S_un.S_un_b.s_b3 = (fields[1] & 0x00FF00) >> 8;
+ address->S_un.S_un_b.s_b4 = (fields[1] & 0x0000FF);
+ break;
+ case 1:
+ address->S_un.S_un_b.s_b1 = (fields[0] & 0xFF000000) >> 24;
+ address->S_un.S_un_b.s_b2 = (fields[0] & 0x00FF0000) >> 16;
+ address->S_un.S_un_b.s_b3 = (fields[0] & 0x0000FF00) >> 8;
+ address->S_un.S_un_b.s_b4 = (fields[0] & 0x000000FF);
+ break;
+ default:
+ goto error;
+ }
+
+ if (terminator) *terminator = str;
+
+ if (*str == ':')
+ {
+ str++;
+ if (!parse_ipv4_component(&str, FALSE, &fields[0]))
+ goto error;
+ if (!fields[0] || fields[0] > 0xFFFF || *str)
+ goto error;
+ if (port)
+ {
+ *port = htons(fields[0]);
+ if (terminator) *terminator = str;
+ }
+ }
+
+ if (!terminator && *str)
+ return STATUS_INVALID_PARAMETER;
+ return STATUS_SUCCESS;
+
+error:
+ if (terminator) *terminator = str;
+ return STATUS_INVALID_PARAMETER;
+}
+
/***********************************************************************
* RtlIpv4StringToAddressExW [NTDLL.@]
*/
NTSTATUS WINAPI RtlIpv4StringToAddressExW(const WCHAR *str, BOOLEAN strict, IN_ADDR *address, USHORT *port)
{
- FIXME("(%s, %u, %p, %p): stub\n", debugstr_w(str), strict, address, port);
- return STATUS_NOT_IMPLEMENTED;
+ TRACE("(%s, %u, %p, %p)\n", debugstr_w(str), strict, address, port);
+ if (!str || !address || !port) return STATUS_INVALID_PARAMETER;
+ return ipv4_string_to_address(str, strict, NULL, address, port);
}
/***********************************************************************
@@ -898,8 +1035,8 @@ NTSTATUS WINAPI RtlIpv4StringToAddressExW(const WCHAR *str, BOOLEAN strict, IN_A
*/
NTSTATUS WINAPI RtlIpv4StringToAddressW(const WCHAR *str, BOOLEAN strict, const WCHAR **terminator, IN_ADDR *address)
{
- FIXME("(%s, %u, %p, %p): stub\n", debugstr_w(str), strict, terminator, address);
- return STATUS_NOT_IMPLEMENTED;
+ TRACE("(%s, %u, %p, %p)\n", debugstr_w(str), strict, terminator, address);
+ return ipv4_string_to_address(str, strict, terminator, address, NULL);
}
/***********************************************************************
--
2.23.0

View File

@@ -1,74 +0,0 @@
From 2f39a185e26072c7c776a1475236d798ebf267f0 Mon Sep 17 00:00:00 2001
From: Alex Henrie <alexhenrie24@gmail.com>
Date: Sun, 25 Aug 2019 17:18:06 -0600
Subject: [PATCH 2/4] ntdll: Implement RtlIpv4StringToAddress(Ex)A
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46149
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
dlls/ntdll/ntdll.spec | 4 ++--
dlls/ntdll/rtl.c | 33 +++++++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 82c78f6e78..8cacc97ec4 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -760,8 +760,8 @@
@ stdcall RtlIpv4AddressToStringExA(ptr long ptr ptr)
@ stdcall RtlIpv4AddressToStringExW(ptr long ptr ptr)
@ stdcall RtlIpv4AddressToStringW(ptr ptr)
-# @ stub RtlIpv4StringToAddressA
-# @ stub RtlIpv4StringToAddressExA
+@ stdcall RtlIpv4StringToAddressA(str long ptr ptr)
+@ stdcall RtlIpv4StringToAddressExA(str long ptr ptr)
@ stdcall RtlIpv4StringToAddressExW(wstr long ptr ptr)
@ stdcall RtlIpv4StringToAddressW(wstr long ptr ptr)
# @ stub RtlIpv6AddressToStringA
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index 72ecfd937a..1604513e7e 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -1039,6 +1039,39 @@ NTSTATUS WINAPI RtlIpv4StringToAddressW(const WCHAR *str, BOOLEAN strict, const
return ipv4_string_to_address(str, strict, terminator, address, NULL);
}
+/***********************************************************************
+ * RtlIpv4StringToAddressExA [NTDLL.@]
+ */
+NTSTATUS WINAPI RtlIpv4StringToAddressExA(const char *str, BOOLEAN strict, IN_ADDR *address, USHORT *port)
+{
+ WCHAR wstr[32];
+
+ TRACE("(%s, %u, %p, %p)\n", debugstr_a(str), strict, address, port);
+
+ if (!str || !address || !port)
+ return STATUS_INVALID_PARAMETER;
+
+ RtlMultiByteToUnicodeN(wstr, sizeof(wstr), NULL, str, strlen(str) + 1);
+ return ipv4_string_to_address(wstr, strict, NULL, address, port);
+}
+
+/***********************************************************************
+ * RtlIpv4StringToAddressA [NTDLL.@]
+ */
+NTSTATUS WINAPI RtlIpv4StringToAddressA(const char *str, BOOLEAN strict, const char **terminator, IN_ADDR *address)
+{
+ WCHAR wstr[32];
+ const WCHAR *wterminator;
+ NTSTATUS ret;
+
+ TRACE("(%s, %u, %p, %p)\n", debugstr_a(str), strict, terminator, address);
+
+ RtlMultiByteToUnicodeN(wstr, sizeof(wstr), NULL, str, strlen(str) + 1);
+ ret = ipv4_string_to_address(wstr, strict, &wterminator, address, NULL);
+ if (terminator) *terminator = str + (wterminator - wstr);
+ return ret;
+}
+
/***********************************************************************
* RtlIpv6StringToAddressExW [NTDLL.@]
*/
--
2.23.0

View File

@@ -1,14 +1,15 @@
From b27c92f6d5f212307e291eac1b2abd376399366c Mon Sep 17 00:00:00 2001
From b4d01c5332cd076e5e7f98842d5811d5f44c8a05 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 20 Aug 2017 17:22:20 +0200
Subject: ntdll: Avoid stack protector frame in signal handler functions.
Subject: [PATCH] ntdll: Avoid stack protector frame in signal handler
functions.
---
dlls/ntdll/signal_i386.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
dlls/ntdll/signal_i386.c | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index c46d50eb271..8a637f23825 100644
index 1645c9c7d..751ba4264 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -96,6 +96,13 @@ typedef struct
@@ -25,7 +26,7 @@ index c46d50eb271..8a637f23825 100644
/***********************************************************************
* signal context platform-specific definitions
*/
@@ -663,7 +670,7 @@ static inline void *get_signal_stack(void)
@@ -582,7 +589,7 @@ static inline int has_fpux(void)
*
* Get the current teb based on the stack pointer.
*/
@@ -34,7 +35,7 @@ index c46d50eb271..8a637f23825 100644
{
unsigned long esp;
__asm__("movl %%esp,%0" : "=g" (esp) );
@@ -1023,7 +1030,7 @@ __ASM_GLOBAL_FUNC( clear_alignment_flag,
@@ -820,7 +827,7 @@ __ASM_GLOBAL_FUNC( clear_alignment_flag,
* Handler initialization when the full context is not needed.
* Return the stack pointer to use for pushing the exception data.
*/
@@ -43,16 +44,16 @@ index c46d50eb271..8a637f23825 100644
{
TEB *teb = get_current_teb();
@@ -2032,7 +2039,7 @@ static EXCEPTION_RECORD *setup_exception_record( ucontext_t *sigcontext, void *s
@@ -1842,7 +1849,7 @@ static struct stack_layout *setup_exception_record( ucontext_t *sigcontext, void
* sigcontext so that the return from the signal handler will call
* the raise function.
*/
-static EXCEPTION_RECORD *setup_exception( ucontext_t *sigcontext, raise_func func )
+static EXCEPTION_RECORD * SIGNALFUNC setup_exception( ucontext_t *sigcontext, raise_func func )
-static struct stack_layout *setup_exception( ucontext_t *sigcontext )
+static struct stack_layout * SIGNALFUNC setup_exception( ucontext_t *sigcontext )
{
WORD fs, gs;
void *stack = init_handler( sigcontext, &fs, &gs );
@@ -2245,7 +2252,7 @@ static void usr2_handler( int signal, siginfo_t *siginfo, void *sigcontext )
@@ -1958,7 +1965,7 @@ static BOOL handle_interrupt( unsigned int interrupt, ucontext_t *sigcontext, st
* Handler for SIGSEGV and related errors. Used only during the initialization
* of the process to handle virtual faults.
*/
@@ -61,7 +62,7 @@ index c46d50eb271..8a637f23825 100644
{
WORD fs, gs;
ucontext_t *context = sigcontext;
@@ -2269,7 +2276,7 @@ static void segv_handler_early( int signal, siginfo_t *siginfo, void *sigcontext
@@ -1982,7 +1989,7 @@ static void segv_handler_early( int signal, siginfo_t *siginfo, void *sigcontext
*
* Handler for SIGSEGV and related errors.
*/
@@ -69,8 +70,8 @@ index c46d50eb271..8a637f23825 100644
+static void SIGNALFUNC segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
{
WORD fs, gs;
EXCEPTION_RECORD *rec;
@@ -2363,7 +2370,7 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
struct stack_layout *stack;
@@ -2101,7 +2108,7 @@ done:
*
* Handler for SIGTRAP.
*/
@@ -78,17 +79,17 @@ index c46d50eb271..8a637f23825 100644
+static void SIGNALFUNC trap_handler( int signal, siginfo_t *siginfo, void *sigcontext )
{
ucontext_t *context = sigcontext;
EXCEPTION_RECORD *rec = setup_exception( context, raise_trap_exception );
@@ -2392,7 +2399,7 @@ static void trap_handler( int signal, siginfo_t *siginfo, void *sigcontext )
struct stack_layout *stack = setup_exception( context );
@@ -2143,7 +2150,7 @@ static void trap_handler( int signal, siginfo_t *siginfo, void *sigcontext )
*
* Handler for SIGFPE.
*/
-static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext )
+static void SIGNALFUNC fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext )
{
CONTEXT *win_context;
ucontext_t *context = sigcontext;
@@ -2441,7 +2448,7 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext )
struct stack_layout *stack = setup_exception( context );
@@ -2191,7 +2198,7 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext )
*
* FIXME: should not be calling external functions on the signal stack.
*/
@@ -96,17 +97,17 @@ index c46d50eb271..8a637f23825 100644
+static void SIGNALFUNC int_handler( int signal, siginfo_t *siginfo, void *sigcontext )
{
WORD fs, gs;
init_handler( sigcontext, &fs, &gs );
@@ -2457,7 +2464,7 @@ static void int_handler( int signal, siginfo_t *siginfo, void *sigcontext )
void *stack_ptr = init_handler( sigcontext, &fs, &gs );
@@ -2208,7 +2215,7 @@ static void int_handler( int signal, siginfo_t *siginfo, void *sigcontext )
*
* Handler for SIGABRT.
*/
-static void abrt_handler( int signal, siginfo_t *siginfo, void *sigcontext )
+static void SIGNALFUNC abrt_handler( int signal, siginfo_t *siginfo, void *sigcontext )
{
EXCEPTION_RECORD *rec = setup_exception( sigcontext, raise_generic_exception );
rec->ExceptionCode = EXCEPTION_WINE_ASSERTION;
@@ -2470,7 +2477,7 @@ static void abrt_handler( int signal, siginfo_t *siginfo, void *sigcontext )
struct stack_layout *stack = setup_exception( sigcontext );
stack->rec.ExceptionCode = EXCEPTION_WINE_ASSERTION;
@@ -2222,7 +2229,7 @@ static void abrt_handler( int signal, siginfo_t *siginfo, void *sigcontext )
*
* Handler for SIGQUIT.
*/
@@ -115,7 +116,7 @@ index c46d50eb271..8a637f23825 100644
{
WORD fs, gs;
init_handler( sigcontext, &fs, &gs );
@@ -2483,7 +2490,7 @@ static void quit_handler( int signal, siginfo_t *siginfo, void *sigcontext )
@@ -2235,7 +2242,7 @@ static void quit_handler( int signal, siginfo_t *siginfo, void *sigcontext )
*
* Handler for SIGUSR1, used to signal a thread that it got suspended.
*/
@@ -125,5 +126,5 @@ index c46d50eb271..8a637f23825 100644
CONTEXT context;
WORD fs, gs;
--
2.14.1
2.23.0

View File

@@ -52,13 +52,13 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "a4aaf3f3d184c2cdad8c4bf06dc10980744a9d15"
echo "3bf7473b880eea8b8dcaa43487afda2d7b1fbd03"
}
# Show version information
version()
{
echo "Wine Staging 4.15"
echo "Wine Staging 4.16"
echo "Copyright (C) 2014-2019 the Wine Staging project authors."
echo "Copyright (C) 2018-2019 Alistair Leslie-Hughes"
echo ""
@@ -169,7 +169,7 @@ patch_enable_all ()
enable_libs_Debug_Channel="$1"
enable_libs_Unicode_Collation="$1"
enable_loader_KeyboardLayouts="$1"
enable_macos_compile="$1"
enable_mfplat_MFGetConfigurationDWORD="$1"
enable_mmsystem_dll16_MIDIHDR_Refcount="$1"
enable_mountmgr_DosDevices="$1"
enable_mscoree_CorValidateImage="$1"
@@ -334,6 +334,7 @@ patch_enable_all ()
enable_wined3d_mesa_texture_download="$1"
enable_wined3d_unset_flip_gdi="$1"
enable_wined3d_wined3d_guess_gl_vendor="$1"
enable_wined3d_zero_inf_shaders="$1"
enable_winedbg_Process_Arguments="$1"
enable_winedevice_Default_Drivers="$1"
enable_winemapi_user_xdg_mail="$1"
@@ -633,8 +634,8 @@ patch_enable ()
loader-KeyboardLayouts)
enable_loader_KeyboardLayouts="$2"
;;
macos-compile)
enable_macos_compile="$2"
mfplat-MFGetConfigurationDWORD)
enable_mfplat_MFGetConfigurationDWORD="$2"
;;
mmsystem.dll16-MIDIHDR_Refcount)
enable_mmsystem_dll16_MIDIHDR_Refcount="$2"
@@ -1128,6 +1129,9 @@ patch_enable ()
wined3d-wined3d_guess_gl_vendor)
enable_wined3d_wined3d_guess_gl_vendor="$2"
;;
wined3d-zero-inf-shaders)
enable_wined3d_zero_inf_shaders="$2"
;;
winedbg-Process_Arguments)
enable_winedbg_Process_Arguments="$2"
;;
@@ -3152,6 +3156,9 @@ if test "$enable_directmanipulation_new_dll" -eq 1; then
patch_apply directmanipulation-new-dll/0010-include-Add-IDirectManipulationViewport2-interface.patch
patch_apply directmanipulation-new-dll/0011-directmanipulation-Implement-IDirectManipulationMana.patch
patch_apply directmanipulation-new-dll/0012-directmanipulation-tests-Initial-tests.patch
patch_apply directmanipulation-new-dll/0013-directmanipulation-Fake-success-from-IDirectManipula.patch
patch_apply directmanipulation-new-dll/0014-include-Add-IDirectManipulationPrimaryContent-interf.patch
patch_apply directmanipulation-new-dll/0015-directmanipulation-Implement-IDirectManipulationView.patch
(
printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add directmanipulation.idl.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: New dll.", 1 },';
@@ -3165,6 +3172,9 @@ if test "$enable_directmanipulation_new_dll" -eq 1; then
printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add IDirectManipulationViewport2 interface.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Implement IDirectManipulationManager2 CreateViewport.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation/tests: Initial tests.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Fake success from IDirectManipulationViewport2 ActivateConfiguration.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add IDirectManipulationPrimaryContent interface.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Implement IDirectManipulationViewport2 GetPrimaryContent.", 1 },';
) >> "$patchlist"
fi
@@ -3550,7 +3560,7 @@ fi
# | * [#44819] Throw second DBG_PRINTEXCEPTION_C when debugging.
# |
# | Modified files:
# | * dlls/kernel32/debugger.c, dlls/ntdll/tests/exception.c
# | * dlls/kernelbase/debug.c, dlls/ntdll/tests/exception.c
# |
if test "$enable_ntdll_Exception" -eq 1; then
patch_apply ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch
@@ -4156,7 +4166,7 @@ fi
# Patchset kernel32-Debugger
# |
# | Modified files:
# | * dlls/kernel32/except.c
# | * dlls/kernelbase/debug.c
# |
if test "$enable_kernel32_Debugger" -eq 1; then
patch_apply kernel32-Debugger/0001-kernel32-Always-start-debugger-on-WinSta0.patch
@@ -4361,17 +4371,20 @@ if test "$enable_loader_KeyboardLayouts" -eq 1; then
) >> "$patchlist"
fi
# Patchset macos-compile
# Patchset mfplat-MFGetConfigurationDWORD
# |
# | This patchset fixes the following Wine bugs:
# | * [#47757] - mfplat: Add MFGetConfigurationDWORD stub.
# |
# | Modified files:
# | * configure, configure.ac, dlls/winemac.drv/cocoa_display.m, include/config.h.in
# | * dlls/mfplat/main.c, dlls/mfplat/mfplat.spec
# |
if test "$enable_macos_compile" -eq 1; then
patch_apply macos-compile/0001-configure-Don-t-link-to-libunwind-if-not-necessary.patch
patch_apply macos-compile/0002-winemac.drv-Fix-build-with-older-macOS-SDKs.patch
if test "$enable_mfplat_MFGetConfigurationDWORD" -eq 1; then
patch_apply mfplat-MFGetConfigurationDWORD/0001-mfplat-Add-DestroyPropVariant-stub.patch
patch_apply mfplat-MFGetConfigurationDWORD/0002-mfplat-Add-MFGetConfigurationDWORD-stub.patch
(
printf '%s\n' '+ { "Alexandre Julliard", "configure: Don'\''t link to libunwind if not necessary.", 1 },';
printf '%s\n' '+ { "Zhiyi Zhang", "winemac.drv: Fix build with older macOS SDKs.", 1 },';
printf '%s\n' '+ { "Andrey Gusev", "mfplat: Add DestroyPropVariant stub.", 1 },';
printf '%s\n' '+ { "Andrey Gusev", "mfplat: Add MFGetConfigurationDWORD stub.", 1 },';
) >> "$patchlist"
fi
@@ -4727,7 +4740,7 @@ fi
# | * [#42647] Implement stub handler for int 0x2e
# |
# | Modified files:
# | * dlls/ntdll/signal_i386.c, include/wine/exception.h
# | * dlls/ntdll/signal_i386.c
# |
if test "$enable_ntdll_Interrupt_0x2e" -eq 1; then
patch_apply ntdll-Interrupt-0x2e/0001-ntdll-Catch-windows-int-0x2e-syscall-on-i386.patch
@@ -4930,13 +4943,9 @@ fi
# | * dlls/ntdll/ntdll.spec, dlls/ntdll/rtl.c, dlls/ntdll/tests/rtl.c
# |
if test "$enable_ntdll_RtlIpv4StringToAddress" -eq 1; then
patch_apply ntdll-RtlIpv4StringToAddress/0001-ntdll-Implement-RtlIpv4StringToAddress-Ex-W.patch
patch_apply ntdll-RtlIpv4StringToAddress/0002-ntdll-Implement-RtlIpv4StringToAddress-Ex-A.patch
patch_apply ntdll-RtlIpv4StringToAddress/0003-ntdll-Add-semi-stub-for-RtlIpv6AddressToString-Ex-A.patch
patch_apply ntdll-RtlIpv4StringToAddress/0004-ntdll-Implement-RtlIpv6AddressToString-Ex-W.patch
(
printf '%s\n' '+ { "Alex Henrie", "ntdll: Implement RtlIpv4StringToAddress(Ex)W.", 1 },';
printf '%s\n' '+ { "Alex Henrie", "ntdll: Implement RtlIpv4StringToAddress(Ex)A.", 1 },';
printf '%s\n' '+ { "Alex Henrie", "ntdll: Add semi-stub for RtlIpv6AddressToString(Ex)A.", 1 },';
printf '%s\n' '+ { "Alex Henrie", "ntdll: Implement RtlIpv6AddressToString(Ex)W.", 1 },';
) >> "$patchlist"
@@ -6837,6 +6846,21 @@ if test "$enable_wined3d_wined3d_guess_gl_vendor" -eq 1; then
) >> "$patchlist"
fi
# Patchset wined3d-zero-inf-shaders
# |
# | This patchset fixes the following Wine bugs:
# | * [#34266] wined3d: Add a setting to workaround 0 * inf problem in shader models 1-3.
# |
# | Modified files:
# | * dlls/wined3d/glsl_shader.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h
# |
if test "$enable_wined3d_zero_inf_shaders" -eq 1; then
patch_apply wined3d-zero-inf-shaders/0001-wined3d-Add-a-setting-to-workaround-0-inf-problem-in.patch
(
printf '%s\n' '+ { "Paul Gofman", "wined3d: Add a setting to workaround 0 * inf problem in shader models 1-3.", 1 },';
) >> "$patchlist"
fi
# Patchset winedbg-Process_Arguments
# |
# | Modified files:

View File

@@ -1,168 +0,0 @@
From c9b3268ab753c5d00ba39968eba4311fdc6e6100 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 11 Feb 2016 03:17:09 +0100
Subject: [PATCH] setupapi: Create registry keys for display devices and
display drivers.
---
dlls/setupapi/devinst.c | 102 +++++++++++++++++++++++++++++++++++++---
loader/wine.inf.in | 2 +
2 files changed, 98 insertions(+), 6 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 9b83c3519be..e666d3bb008 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -111,6 +111,15 @@ struct driver
WCHAR description[LINE_LEN];
};
+/* GUIDs */
+static const WCHAR displayGUIDW[] = {'{','4','d','3','6','e','9','6','8','-','e','3','2','5','-',
+ '1','1','c','e','-','b','f','c','1','-',
+ '0','8','0','0','2','b','e','1','0','3','1','8','}',0};
+static const WCHAR ddriverGUIDW[] = {'{','4','d','3','6','e','9','6','8','-','e','3','2','5','-',
+ '1','1','c','e','-','b','f','c','1','-',
+ '0','8','0','0','2','b','e','1','0','3','1','8','}',
+ '\\','0','0','0','0',0};
+
/* is used to identify if a DeviceInfoSet pointer is
valid or not */
#define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff056
@@ -210,6 +219,90 @@ static struct device_iface *get_device_iface(HDEVINFO devinfo, const SP_DEVICE_I
return (struct device_iface *)data->Reserved;
}
+static void create_display_keys(HKEY enumKey, int index, DISPLAY_DEVICEW *disp)
+{
+ static const WCHAR fmtW[] = {'1','3','&','1','2','3','4','5','&','%','d',0};
+ HKEY devKey, intKey;
+ WCHAR buffer[50];
+ LONG l;
+
+ l = RegCreateKeyExW(enumKey, disp->DeviceID, 0, NULL, 0, KEY_ALL_ACCESS,
+ NULL, &devKey, NULL);
+ if (l) return;
+
+ snprintfW(buffer, sizeof(buffer) / sizeof(WCHAR), fmtW, index);
+ l = RegCreateKeyExW(devKey, buffer, 0, NULL, 0, KEY_ALL_ACCESS,
+ NULL, &intKey, NULL);
+ if (!l)
+ {
+ RegSetValueExW(intKey, ClassGUID, 0, REG_SZ, (BYTE *)displayGUIDW, sizeof(displayGUIDW));
+ RegSetValueExW(intKey, Driver, 0, REG_SZ, (BYTE *)ddriverGUIDW, sizeof(ddriverGUIDW));
+ RegCloseKey(intKey);
+ }
+
+ RegCloseKey(devKey);
+}
+
+static void create_display_driver_keys(void)
+{
+ static const WCHAR DriverDateDataW[] = {'D','r','i','v','e','r','D','a','t','e','D','a','t','a',0};
+ HKEY classesKey, driverKey;
+ SYSTEMTIME systime;
+ FILETIME filetime;
+ LONG l;
+
+ l = RegCreateKeyExW(HKEY_LOCAL_MACHINE, ControlClass, 0, NULL, 0, KEY_ALL_ACCESS,
+ NULL, &classesKey, NULL);
+ if (l) return;
+
+ l = RegCreateKeyExW(classesKey, ddriverGUIDW, 0, NULL, 0, KEY_ALL_ACCESS,
+ NULL, &driverKey, NULL);
+ if (!l)
+ {
+ /* we are really keeping our drivers up to date */
+ GetSystemTime(&systime);
+ if (SystemTimeToFileTime(&systime, &filetime))
+ RegSetValueExW(driverKey, DriverDateDataW, 0, REG_BINARY, (BYTE *)&filetime, sizeof(filetime));
+
+ RegCloseKey(driverKey);
+ }
+
+ RegCloseKey(classesKey);
+}
+
+static LONG open_enum_key(HKEY *key)
+{
+ static BOOL initialized = FALSE;
+ DISPLAY_DEVICEW disp;
+ HKEY enumKey;
+ LONG l;
+
+ l = RegCreateKeyExW(HKEY_LOCAL_MACHINE, Enum, 0, NULL, 0, KEY_ALL_ACCESS,
+ NULL, &enumKey, NULL);
+ if (l) return l;
+
+ if (!initialized)
+ {
+ /* Wine currently does not properly distinguish between monitors and
+ * display devices yet. On a multi monitor system the enumeration
+ * returns multiple devices although there is only one graphic card.
+ * To work around this, we stop the enumeration after the first device. */
+
+ TRACE("creating display keys\n");
+
+ disp.cb = sizeof(disp);
+ if (EnumDisplayDevicesW(NULL, 0, &disp, 0))
+ create_display_keys(enumKey, 0, &disp);
+
+ create_display_driver_keys();
+
+ initialized = TRUE;
+ }
+
+ *key = enumKey;
+ return ERROR_SUCCESS;
+}
+
static inline void copy_device_data(SP_DEVINFO_DATA *data, const struct device *device)
{
data->ClassGuid = device->class;
@@ -523,8 +616,7 @@ static HKEY SETUPDI_CreateDevKey(struct device *device)
HKEY enumKey, key = INVALID_HANDLE_VALUE;
LONG l;
- l = RegCreateKeyExW(HKEY_LOCAL_MACHINE, Enum, 0, NULL, 0, KEY_ALL_ACCESS,
- NULL, &enumKey, NULL);
+ l = open_enum_key(&enumKey);
if (!l)
{
RegCreateKeyExW(enumKey, device->instanceId, 0, NULL, 0,
@@ -2143,8 +2235,7 @@ static void SETUPDI_EnumerateMatchingInterfaces(HDEVINFO DeviceInfoSet,
TRACE("%s\n", debugstr_w(enumstr));
- l = RegCreateKeyExW(HKEY_LOCAL_MACHINE, Enum, 0, NULL, 0, KEY_READ, NULL,
- &enumKey, NULL);
+ l = open_enum_key(&enumKey);
for (i = 0; !l; i++)
{
len = ARRAY_SIZE(subKeyName);
@@ -2364,8 +2455,7 @@ static void SETUPDI_EnumerateDevices(HDEVINFO DeviceInfoSet, const GUID *class,
TRACE("%p, %s, %s, %08x\n", DeviceInfoSet, debugstr_guid(class),
debugstr_w(enumstr), flags);
- l = RegCreateKeyExW(HKEY_LOCAL_MACHINE, Enum, 0, NULL, 0, KEY_READ, NULL,
- &enumKey, NULL);
+ l = open_enum_key(&enumKey);
if (enumKey != INVALID_HANDLE_VALUE)
{
if (enumstr)
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 4d28a93c359..7a44e0fe713 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -465,6 +465,8 @@ HKLM,System\CurrentControlSet\Control\ContentIndex\Language\Neutral,"Locale",0x1
[ControlClass]
HKLM,System\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318},,,"Disk drives"
HKLM,System\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318},"Class",,"DiskDrive"
+HKLM,System\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318},,,"Display drivers"
+HKLM,System\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318},"Class",,"Display"
HKLM,System\CurrentControlSet\Control\Class\{4d36e978-e325-11ce-bfc1-08002be10318},,,"Ports (COM & LPT)"
HKLM,System\CurrentControlSet\Control\Class\{4d36e978-e325-11ce-bfc1-08002be10318},"Class",,"Ports"
HKLM,System\CurrentControlSet\Control\Class\{6bdd1fc6-810f-11d0-bec7-08002be2092f},,,"Imaging devices"
--
2.20.1

View File

@@ -1,101 +0,0 @@
From 9732937171cfb05055b0ef8cb2d4fcf7efddf679 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 11 Feb 2016 03:20:33 +0100
Subject: [PATCH] setupapi: Handle the case that a full driver path is passed
to SetupDiGetClassDevs.
---
dlls/setupapi/devinst.c | 26 ++++++++++++++++++++++++--
dlls/setupapi/tests/devinst.c | 25 +++++++++++++++++++++++--
2 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 38d994e3a..846531343 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -2455,8 +2455,30 @@ static void SETUPDI_EnumerateDevices(HDEVINFO DeviceInfoSet, const GUID *class,
&enumStrKey);
if (!l)
{
- SETUPDI_EnumerateMatchingDevices(DeviceInfoSet, enumstr,
- enumStrKey, class, flags);
+ WCHAR *bus, *device;
+ HKEY devKey;
+
+ if (!strchrW(enumstr, '\\'))
+ {
+ SETUPDI_EnumerateMatchingDevices(DeviceInfoSet, enumstr,
+ enumStrKey, class, flags);
+ }
+ else if ((bus = strdupW(enumstr)))
+ {
+ device = strchrW(bus, '\\');
+ *device++ = 0;
+
+ l = RegOpenKeyExW(enumKey, enumstr, 0, KEY_READ, &devKey);
+ if (!l)
+ {
+ SETUPDI_EnumerateMatchingDeviceInstances(DeviceInfoSet, bus, device,
+ devKey, class, flags);
+ RegCloseKey(devKey);
+ }
+
+ HeapFree(GetProcessHeap(), 0, bus);
+ }
+
RegCloseKey(enumStrKey);
}
}
diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c
index afb431f8d..332755190 100644
--- a/dlls/setupapi/tests/devinst.c
+++ b/dlls/setupapi/tests/devinst.c
@@ -1884,6 +1884,28 @@ static void test_device_interface_key(void)
SetupDiDestroyDeviceInfoList(set);
}
+static void testSetupDiGetClassDevsA(void)
+{
+ static GUID displayguid = {0x4d36e968, 0xe325, 0x11ce, {0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18}};
+ SP_DEVINFO_DATA devinfo;
+ DISPLAY_DEVICEA disp;
+ HDEVINFO set;
+ BOOL ret;
+
+ disp.cb = sizeof(disp);
+ ok(EnumDisplayDevicesA(NULL, 0, &disp, 0), "EnumDisplayDevices failed: %08x\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ set = SetupDiGetClassDevsA(&displayguid, disp.DeviceID, 0, 0);
+ ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsA failed: %08x\n", GetLastError());
+
+ devinfo.cbSize = sizeof(devinfo);
+ ret = SetupDiEnumDeviceInfo(set, 0, &devinfo);
+ ok(ret, "SetupDiEnumDeviceInfo failed: %08x\n", GetLastError());
+
+ SetupDiDestroyDeviceInfoList(set);
+}
+
static void test_device_install_params(void)
{
SP_DEVINFO_DATA device = {sizeof(device)};
@@ -1951,8 +1973,6 @@ static void test_device_install_params(void)
ok(!params.FileQueue, "Got queue %p.\n", params.FileQueue);
ok(!params.ClassInstallReserved, "Got class installer data %#lx.\n", params.ClassInstallReserved);
ok(!strcasecmp(params.DriverPath, "C:\\windows"), "Got driver path %s.\n", params.DriverPath);
-
- SetupDiDestroyDeviceInfoList(set);
}
#ifdef __i386__
@@ -2135,6 +2155,7 @@ START_TEST(devinst)
test_registry_property_a();
test_registry_property_w();
test_get_inf_class();
+ testSetupDiGetClassDevsA();
test_devnode();
test_device_interface_key();
test_device_install_params();
--
2.21.0

View File

@@ -1,38 +0,0 @@
From 879401065780700c0236e51d9e52d629d8a9bb8f Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 2 Oct 2016 18:07:18 +0200
Subject: setupapi: Also create HardwareId registry key for display devices.
---
dlls/setupapi/devinst.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 4b67833..67aa98d 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -153,7 +153,7 @@ static void create_display_keys(HKEY enumKey, int index, DISPLAY_DEVICEW *disp)
{
static const WCHAR fmtW[] = {'1','3','&','1','2','3','4','5','&','%','d',0};
HKEY devKey, intKey;
- WCHAR buffer[50];
+ WCHAR *str, buffer[50];
LONG l;
l = RegCreateKeyExW(enumKey, disp->DeviceID, 0, NULL, 0, KEY_ALL_ACCESS,
@@ -167,6 +167,12 @@ static void create_display_keys(HKEY enumKey, int index, DISPLAY_DEVICEW *disp)
{
RegSetValueExW(intKey, ClassGUID, 0, REG_SZ, (BYTE *)displayGUIDW, sizeof(displayGUIDW));
RegSetValueExW(intKey, Driver, 0, REG_SZ, (BYTE *)ddriverGUIDW, sizeof(ddriverGUIDW));
+ if ((str = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (strlenW(disp->DeviceID) + 2) * sizeof(WCHAR))))
+ {
+ lstrcpyW(str, disp->DeviceID); /* we need two \0 for REG_MULTI_SZ */
+ RegSetValueExW(intKey, HardwareId, 0, REG_MULTI_SZ, (BYTE *)str, (strlenW(str) + 2) * sizeof(WCHAR));
+ HeapFree(GetProcessHeap(), 0, str);
+ }
RegCloseKey(intKey);
}
--
2.9.0

View File

@@ -1,2 +0,0 @@
Fixes: [35345] Fix enumeration of display driver properties using setupapi
Disabled: True

View File

@@ -0,0 +1,264 @@
From 7b97835b41aa751196b87d1c2739e48312d4b899 Mon Sep 17 00:00:00 2001
From: Paul Gofman <gofmanp@gmail.com>
Date: Mon, 9 Sep 2019 18:48:43 +0300
Subject: [PATCH] wined3d: Add a setting to workaround 0 * inf problem in
shader models 1-3.
Adds 'multiply_special' config option which works around
https://bugs.winehq.org/show_bug.cgi?id=34266.
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
---
dlls/wined3d/glsl_shader.c | 123 +++++++++++++++++++++++++++------
dlls/wined3d/wined3d_main.c | 3 +
dlls/wined3d/wined3d_private.h | 1 +
3 files changed, 107 insertions(+), 20 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index c0713527ba..1632fd6005 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -2298,6 +2298,19 @@ static void shader_generate_glsl_declarations(const struct wined3d_context_gl *c
if (wined3d_settings.strict_shader_math)
shader_addline(buffer, "#pragma optionNV(fastmath off)\n");
+ if (wined3d_settings.multiply_special == 2 && version->major < 4)
+ {
+ shader_addline(buffer, "float dot1(float v1, float v2) {return abs(v1) == 0.0 || abs(v2) == 0.0 ? 0.0 : v1 * v2;}\n");
+ shader_addline(buffer, "float dot2(vec2 v1, vec2 v2) {return dot1(v1.x, v2.x) + dot1(v1.y, v2.y);}\n");
+ shader_addline(buffer, "float dot3(vec3 v1, vec3 v2) {return dot2(v1.xy, v2.xy) + dot1(v1.z, v2.z);}\n");
+ shader_addline(buffer, "float dot4(vec4 v1, vec4 v2) {return dot2(v1.xy, v2.xy) + dot2(v1.zw, v2.zw);}\n");
+
+ shader_addline(buffer, "float mul1(float v1, float v2) {return abs(v1) == 0.0 || abs(v2) == 0.0 ? 0.0 : v1 * v2;}\n");
+ shader_addline(buffer, "vec2 mul2(vec2 v1, vec2 v2) {return vec2(mul1(v1.x, v2.x), mul1(v1.y, v2.y));}\n");
+ shader_addline(buffer, "vec3 mul3(vec3 v1, vec3 v2) {return vec3(mul2(v1.xy, v2.xy), mul1(v1.z, v2.z));}\n");
+ shader_addline(buffer, "vec4 mul4(vec4 v1, vec4 v2) {return vec4(mul2(v1.xy, v2.xy), mul2(v1.zw, v2.zw));}\n");
+ }
+
prefix = shader_glsl_get_prefix(version->type);
/* Prototype the subroutines */
@@ -3829,7 +3842,12 @@ static void shader_glsl_binop(const struct wined3d_shader_instruction *ins)
write_mask = shader_glsl_append_dst(buffer, ins);
shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
- shader_addline(buffer, "%s %s %s);\n", src0_param.param_str, op, src1_param.param_str);
+ if (wined3d_settings.multiply_special == 2 && ins->ctx->reg_maps->shader_version.major < 4
+ && ins->handler_idx == WINED3DSIH_MUL)
+ shader_addline(buffer, "mul%d(%s, %s));\n", shader_glsl_get_write_mask_size(write_mask),
+ src0_param.param_str, src1_param.param_str);
+ else
+ shader_addline(buffer, "%s %s %s);\n", src0_param.param_str, op, src1_param.param_str);
}
static void shader_glsl_relop(const struct wined3d_shader_instruction *ins)
@@ -4041,26 +4059,45 @@ static void shader_glsl_dot(const struct wined3d_shader_instruction *ins)
struct glsl_src_param src0_param;
struct glsl_src_param src1_param;
DWORD dst_write_mask, src_write_mask;
- unsigned int dst_size;
+ unsigned int dst_size, src_size;
dst_write_mask = shader_glsl_append_dst(buffer, ins);
dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
/* dp4 works on vec4, dp3 on vec3, etc. */
if (ins->handler_idx == WINED3DSIH_DP4)
+ {
src_write_mask = WINED3DSP_WRITEMASK_ALL;
+ src_size = 4;
+ }
else if (ins->handler_idx == WINED3DSIH_DP3)
+ {
src_write_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ src_size = 3;
+ }
else
+ {
src_write_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1;
-
+ src_size = 2;
+ }
shader_glsl_add_src_param(ins, &ins->src[0], src_write_mask, &src0_param);
shader_glsl_add_src_param(ins, &ins->src[1], src_write_mask, &src1_param);
- if (dst_size > 1) {
- shader_addline(buffer, "vec%d(dot(%s, %s)));\n", dst_size, src0_param.param_str, src1_param.param_str);
- } else {
- shader_addline(buffer, "dot(%s, %s));\n", src0_param.param_str, src1_param.param_str);
+ if (dst_size > 1)
+ {
+ if (wined3d_settings.multiply_special == 2 && ins->ctx->reg_maps->shader_version.major < 4)
+ shader_addline(buffer, "vec%d(dot%d(%s, %s)));\n", dst_size, src_size,
+ src0_param.param_str, src1_param.param_str);
+ else
+ shader_addline(buffer, "vec%d(dot(%s, %s)));\n", dst_size,
+ src0_param.param_str, src1_param.param_str);
+ }
+ else
+ {
+ if (wined3d_settings.multiply_special == 2 && ins->ctx->reg_maps->shader_version.major < 4)
+ shader_addline(buffer, "dot%d(%s, %s));\n", src_size, src0_param.param_str, src1_param.param_str);
+ else
+ shader_addline(buffer, "dot(%s, %s));\n", src0_param.param_str, src1_param.param_str);
}
}
@@ -4290,11 +4327,15 @@ static void shader_glsl_scalar_op(const struct wined3d_shader_instruction *ins)
{
DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
ins->ctx->reg_maps->shader_version.minor);
+ static const float max_float = FLT_MAX, min_float = -FLT_MAX;
+ struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
struct wined3d_string_buffer *buffer = ins->ctx->buffer;
+ struct wined3d_string_buffer *suffix;
struct glsl_src_param src0_param;
- const char *prefix, *suffix;
unsigned int dst_size;
DWORD dst_write_mask;
+ const char *prefix;
+ BOOL guard_inf;
dst_write_mask = shader_glsl_append_dst(buffer, ins);
dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
@@ -4304,41 +4345,78 @@ static void shader_glsl_scalar_op(const struct wined3d_shader_instruction *ins)
shader_glsl_add_src_param(ins, &ins->src[0], dst_write_mask, &src0_param);
+ guard_inf = wined3d_settings.multiply_special == 1 && shader_version < WINED3D_SHADER_VERSION(4, 0);
+ suffix = string_buffer_get(priv->string_buffers);
+
switch (ins->handler_idx)
{
case WINED3DSIH_EXP:
case WINED3DSIH_EXPP:
prefix = "exp2(";
- suffix = ")";
+ string_buffer_sprintf(suffix, ")");
break;
case WINED3DSIH_LOG:
case WINED3DSIH_LOGP:
- prefix = "log2(abs(";
- suffix = "))";
+ if (guard_inf)
+ {
+ prefix = "max(log2(abs(";
+ string_buffer_sprintf(suffix, ")), ");
+ shader_glsl_append_imm_vec(suffix, &min_float, 1, ins->ctx->gl_info);
+ shader_addline(suffix, ")");
+ }
+ else
+ {
+ prefix = "log2(abs(";
+ string_buffer_sprintf(suffix, "))");
+ }
break;
case WINED3DSIH_RCP:
- prefix = "1.0 / ";
- suffix = "";
+ if (guard_inf)
+ {
+ prefix = "clamp(1.0 / ";
+ string_buffer_sprintf(suffix, ", ");
+ shader_glsl_append_imm_vec(suffix, &min_float, 1, ins->ctx->gl_info);
+ shader_addline(suffix, ", ");
+ shader_glsl_append_imm_vec(suffix, &max_float, 1, ins->ctx->gl_info);
+ shader_addline(suffix, ")");
+ }
+ else
+ {
+ prefix = "1.0 / ";
+ string_buffer_clear(suffix);
+ }
break;
case WINED3DSIH_RSQ:
- prefix = "inversesqrt(abs(";
- suffix = "))";
+ if (guard_inf)
+ {
+ prefix = "min(inversesqrt(abs(";
+ string_buffer_sprintf(suffix, ")), ");
+ shader_glsl_append_imm_vec(suffix, &max_float, 1, ins->ctx->gl_info);
+ shader_addline(suffix, ")");
+ }
+ else
+ {
+ prefix = "inversesqrt(abs(";
+ string_buffer_sprintf(suffix, "))");
+ }
break;
default:
prefix = "";
- suffix = "";
+ string_buffer_clear(suffix);
FIXME("Unhandled instruction %#x.\n", ins->handler_idx);
break;
}
if (dst_size > 1 && shader_version < WINED3D_SHADER_VERSION(4, 0))
- shader_addline(buffer, "vec%u(%s%s%s));\n", dst_size, prefix, src0_param.param_str, suffix);
+ shader_addline(buffer, "vec%u(%s%s%s));\n", dst_size, prefix, src0_param.param_str, suffix->buffer);
else
- shader_addline(buffer, "%s%s%s);\n", prefix, src0_param.param_str, suffix);
+ shader_addline(buffer, "%s%s%s);\n", prefix, src0_param.param_str, suffix->buffer);
+
+ string_buffer_release(priv->string_buffers, suffix);
}
/** Process the WINED3DSIO_EXPP instruction in GLSL:
@@ -4655,8 +4733,13 @@ static void shader_glsl_mad(const struct wined3d_shader_instruction *ins)
shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
- shader_addline(ins->ctx->buffer, "(%s * %s) + %s);\n",
- src0_param.param_str, src1_param.param_str, src2_param.param_str);
+ if (wined3d_settings.multiply_special == 2 && ins->ctx->reg_maps->shader_version.major < 4)
+ shader_addline(ins->ctx->buffer, "mul%d(%s, %s) + %s);\n",
+ shader_glsl_get_write_mask_size(write_mask), src0_param.param_str,
+ src1_param.param_str, src2_param.param_str);
+ else
+ shader_addline(ins->ctx->buffer, "(%s * %s) + %s);\n",
+ src0_param.param_str, src1_param.param_str, src2_param.param_str);
}
/* Handles transforming all WINED3DSIO_M?x? opcodes for
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index 5d60a44ef6..e9efbbf08a 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -111,6 +111,7 @@ struct wined3d_settings wined3d_settings =
~0u, /* Don't force a specific sample count by default. */
FALSE, /* Don't range check relative addressing indices in float constants. */
FALSE, /* No strict shader math by default. */
+ 0, /* IEEE 0 * inf result. */
~0U, /* No VS shader model limit by default. */
~0U, /* No HS shader model limit by default. */
~0U, /* No DS shader model limit by default. */
@@ -362,6 +363,8 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
}
if (!get_config_key_dword(hkey, appkey, "strict_shader_math", &wined3d_settings.strict_shader_math))
ERR_(winediag)("Setting strict shader math to %#x.\n", wined3d_settings.strict_shader_math);
+ if (!get_config_key_dword(hkey, appkey, "multiply_special", &wined3d_settings.multiply_special))
+ ERR_(winediag)("Setting multiply special to %#x.\n", wined3d_settings.multiply_special);
if (!get_config_key_dword(hkey, appkey, "MaxShaderModelVS", &wined3d_settings.max_sm_vs))
TRACE("Limiting VS shader model to %u.\n", wined3d_settings.max_sm_vs);
if (!get_config_key_dword(hkey, appkey, "MaxShaderModelHS", &wined3d_settings.max_sm_hs))
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index b786962a74..5bc0a1a0bd 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -427,6 +427,7 @@ struct wined3d_settings
unsigned int sample_count;
BOOL check_float_constants;
unsigned int strict_shader_math;
+ unsigned int multiply_special;
unsigned int max_sm_vs;
unsigned int max_sm_hs;
unsigned int max_sm_ds;
--
2.21.0

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