You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
c323ef47c7 | ||
|
9e6693ed13 | ||
|
29bdd4cd85 | ||
|
39d7dcb2c6 | ||
|
2e4d0f4727 | ||
|
fd818b1914 | ||
|
26e542b4e5 | ||
|
6ef7be2566 | ||
|
5b012f08d5 | ||
|
8390ba0d95 | ||
|
fb18deb95f | ||
|
27b33a4be9 | ||
|
a15bdaa0ba | ||
|
734918298c | ||
|
bc1aa54891 | ||
|
2da0d341f6 | ||
|
155cb0b051 |
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
1
patches/mfplat-MFGetConfigurationDWORD/definition
Normal file
1
patches/mfplat-MFGetConfigurationDWORD/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [47757] - mfplat: Add MFGetConfigurationDWORD stub.
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -1,2 +0,0 @@
|
||||
Fixes: [35345] Fix enumeration of display driver properties using setupapi
|
||||
Disabled: True
|
@@ -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
Reference in New Issue
Block a user