Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
July 2019
- 65 participants
- 633 messages
[PATCH] Add a list of mac relevant graphics cards.
by Kristján Gerhardsson
Signed-off-by: Kristjan Gerhardsson <kristjang at ccpgames.com>
---
dlls/wined3d/adapter_gl.c | 2 +-
dlls/wined3d/directx.c | 15 ++++++++++++++-
dlls/wined3d/wined3d_private.h | 15 ++++++++++++++-
3 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index c8ebe34643..080ad5a4b4 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -1629,7 +1629,7 @@ cards_intel[] =
/* Haswell */
{"Iris Pro 5200", CARD_INTEL_IP5200_1},
{"Iris 5100", CARD_INTEL_I5100_1},
- {"HD Graphics 5000", CARD_INTEL_HD5000}, /* MacOS */
+ {"HD Graphics 5000", CARD_INTEL_HD5000_1}, /* MacOS */
{"Haswell Mobile", CARD_INTEL_HWM},
{"Iris OpenGL Engine", CARD_INTEL_HWM}, /* MacOS */
/* Ivybridge */
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 72c3de98a9..5975766f16 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -278,6 +278,7 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT610, "NVIDIA GeForce GT 610", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT630, "NVIDIA GeForce GT 630", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT630M, "NVIDIA GeForce GT 630M", DRIVER_NVIDIA_GEFORCE8, 1024},
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT640, "NVIDIA GeForce GT 640", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT640M, "NVIDIA GeForce GT 640M", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT650M, "NVIDIA GeForce GT 650M", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX650, "NVIDIA GeForce GTX 650", DRIVER_NVIDIA_GEFORCE8, 1024},
@@ -288,6 +289,7 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX670, "NVIDIA GeForce GTX 670", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX670MX, "NVIDIA GeForce GTX 670MX", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX675MX, "NVIDIA GeForce GTX 675MX", DRIVER_NVIDIA_GEFORCE8, 4096},
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX675MX_MAC, "NVIDIA GeForce GTX 675MX", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX680, "NVIDIA GeForce GTX 680", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX690, "NVIDIA GeForce GTX 690", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT720, "NVIDIA GeForce GT 720", DRIVER_NVIDIA_GEFORCE8, 2048},
@@ -295,6 +297,7 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT730M, "NVIDIA GeForce GT 730M", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT740M, "NVIDIA GeForce GT 740M", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT750M, "NVIDIA GeForce GT 750M", DRIVER_NVIDIA_GEFORCE8, 1024},
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT755M, "NVIDIA GeForce GT 755M", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX750, "NVIDIA GeForce GTX 750", DRIVER_NVIDIA_GEFORCE8, 1024},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX750TI, "NVIDIA GeForce GTX 750 Ti", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX760, "NVIDIA GeForce GTX 760", DRIVER_NVIDIA_GEFORCE8, 2048},
@@ -302,7 +305,9 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX765M, "NVIDIA GeForce GTX 765M", DRIVER_NVIDIA_GEFORCE8, 2048},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX770M, "NVIDIA GeForce GTX 770M", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX770, "NVIDIA GeForce GTX 770", DRIVER_NVIDIA_GEFORCE8, 2048},
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX775M, "NVIDIA GeForce GTX 775M", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780, "NVIDIA GeForce GTX 780", DRIVER_NVIDIA_GEFORCE8, 3072},
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780M, "NVIDIA GeForce GTX 780M", DRIVER_NVIDIA_GEFORCE8, 4096},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780TI, "NVIDIA GeForce GTX 780 Ti", DRIVER_NVIDIA_GEFORCE8, 3072},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTXTITAN, "NVIDIA GeForce GTX TITAN", DRIVER_NVIDIA_GEFORCE8, 6144},
{HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTXTITANB, "NVIDIA GeForce GTX TITAN Black", DRIVER_NVIDIA_GEFORCE8, 6144},
@@ -365,6 +370,7 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD6400, "AMD Radeon HD 6400 Series", DRIVER_AMD_R600, 1024},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD6410D, "AMD Radeon HD 6410D", DRIVER_AMD_R600, 1024},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD6480G, "AMD Radeon HD 6480G", DRIVER_AMD_R600, 512 },
+ {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6490M, "AMD Radeon HD 6490M", DRIVER_AMD_R600, 1024},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD6550D, "AMD Radeon HD 6550D", DRIVER_AMD_R600, 1024},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD6600, "AMD Radeon HD 6600 Series", DRIVER_AMD_R600, 1024},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD6600M, "AMD Radeon HD 6600M Series", DRIVER_AMD_R600, 512 },
@@ -374,6 +380,7 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD7660D, "AMD Radeon HD 7660D", DRIVER_AMD_R600, 2048},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD7700, "AMD Radeon HD 7700 Series", DRIVER_AMD_R600, 1024},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD7800, "AMD Radeon HD 7800 Series", DRIVER_AMD_R600, 2048},
+ {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7870, "AMD Radeon HD 7870 Series", DRIVER_AMD_R600, 2048},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD7900, "AMD Radeon HD 7900 Series", DRIVER_AMD_R600, 2048},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD8600M, "AMD Radeon HD 8600M Series", DRIVER_AMD_R600, 1024},
{HW_VENDOR_AMD, CARD_AMD_RADEON_HD8670, "AMD Radeon HD 8670", DRIVER_AMD_R600, 2048},
@@ -382,7 +389,11 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_AMD, CARD_AMD_RADEON_R7, "AMD Radeon(TM) R7 Graphics", DRIVER_AMD_R600, 2048},
{HW_VENDOR_AMD, CARD_AMD_RADEON_R9_285, "AMD Radeon R9 285", DRIVER_AMD_RX, 2048},
{HW_VENDOR_AMD, CARD_AMD_RADEON_R9_290, "AMD Radeon R9 290", DRIVER_AMD_RX, 4096},
+ {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_290X, "AMD Radeon R9 290X", DRIVER_AMD_RX, 4096},
{HW_VENDOR_AMD, CARD_AMD_RADEON_R9_FURY, "AMD Radeon (TM) R9 Fury Series", DRIVER_AMD_RX, 4096},
+ {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_M370X, "AMD Radeon R9 M370X", DRIVER_AMD_RX, 2048},
+ {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_M380, "AMD Radeon R9 M380", DRIVER_AMD_RX, 2048},
+ {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_M395X, "AMD Radeon R9 M395X", DRIVER_AMD_RX, 4096},
{HW_VENDOR_AMD, CARD_AMD_RADEON_RX_460, "Radeon(TM) RX 460 Graphics", DRIVER_AMD_RX, 4096},
{HW_VENDOR_AMD, CARD_AMD_RADEON_RX_480, "Radeon (TM) RX 480 Graphics", DRIVER_AMD_RX, 4096},
{HW_VENDOR_AMD, CARD_AMD_RADEON_RX_VEGA, "Radeon RX Vega", DRIVER_AMD_RX, 8192},
@@ -430,7 +441,8 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_INTEL, CARD_INTEL_IVBS, "Intel(R) HD Graphics Family", DRIVER_INTEL_HD4000, 1536},
{HW_VENDOR_INTEL, CARD_INTEL_HWD, "Intel(R) HD Graphics 4600", DRIVER_INTEL_HD4000, 1536},
{HW_VENDOR_INTEL, CARD_INTEL_HWM, "Intel(R) HD Graphics 4600", DRIVER_INTEL_HD4000, 1536},
- {HW_VENDOR_INTEL, CARD_INTEL_HD5000, "Intel(R) HD Graphics 5000", DRIVER_INTEL_HD4000, 1536},
+ {HW_VENDOR_INTEL, CARD_INTEL_HD5000_1, "Intel(R) HD Graphics 5000", DRIVER_INTEL_HD4000, 1536},
+ {HW_VENDOR_INTEL, CARD_INTEL_HD5000_2, "Intel(R) HD Graphics 5000", DRIVER_INTEL_HD4000, 1536},
{HW_VENDOR_INTEL, CARD_INTEL_I5100_1, "Intel(R) Iris(TM) Graphics 5100", DRIVER_INTEL_HD4000, 1536},
{HW_VENDOR_INTEL, CARD_INTEL_I5100_2, "Intel(R) Iris(TM) Graphics 5100", DRIVER_INTEL_HD4000, 1536},
{HW_VENDOR_INTEL, CARD_INTEL_I5100_3, "Intel(R) Iris(TM) Graphics 5100", DRIVER_INTEL_HD4000, 1536},
@@ -440,6 +452,7 @@ static const struct wined3d_gpu_description gpu_description_table[] =
{HW_VENDOR_INTEL, CARD_INTEL_IP5200_3, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
{HW_VENDOR_INTEL, CARD_INTEL_IP5200_4, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
{HW_VENDOR_INTEL, CARD_INTEL_IP5200_5, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
+ {HW_VENDOR_INTEL, CARD_INTEL_IP5200_6, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 2048},
{HW_VENDOR_INTEL, CARD_INTEL_HD5300, "Intel(R) HD Graphics 5300", DRIVER_INTEL_HD4000, 2048},
{HW_VENDOR_INTEL, CARD_INTEL_HD5500, "Intel(R) HD Graphics 5500", DRIVER_INTEL_HD4000, 2048},
{HW_VENDOR_INTEL, CARD_INTEL_HD5600, "Intel(R) HD Graphics 5600", DRIVER_INTEL_HD4000, 2048},
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index b959a28060..a2c81617b6 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2350,6 +2350,7 @@ enum wined3d_pci_device
CARD_AMD_RADEON_HD5900 = 0x689c,
CARD_AMD_RADEON_HD6300 = 0x9803,
CARD_AMD_RADEON_HD6400 = 0x6770,
+ CARD_AMD_RADEON_HD6490M = 0x6760,
CARD_AMD_RADEON_HD6410D = 0x9644,
CARD_AMD_RADEON_HD6480G = 0x9648,
CARD_AMD_RADEON_HD6550D = 0x9640,
@@ -2361,6 +2362,7 @@ enum wined3d_pci_device
CARD_AMD_RADEON_HD7660D = 0x9901,
CARD_AMD_RADEON_HD7700 = 0x683d,
CARD_AMD_RADEON_HD7800 = 0x6819,
+ CARD_AMD_RADEON_HD7870 = 0x6818,
CARD_AMD_RADEON_HD7900 = 0x679a,
CARD_AMD_RADEON_HD8600M = 0x6660,
CARD_AMD_RADEON_HD8670 = 0x6610,
@@ -2369,7 +2371,11 @@ enum wined3d_pci_device
CARD_AMD_RADEON_R7 = 0x130f,
CARD_AMD_RADEON_R9_285 = 0x6939,
CARD_AMD_RADEON_R9_290 = 0x67b1,
+ CARD_AMD_RADEON_R9_290X = 0x67b0,
CARD_AMD_RADEON_R9_FURY = 0x7300,
+ CARD_AMD_RADEON_R9_M370X = 0x6821,
+ CARD_AMD_RADEON_R9_M380 = 0x6647,
+ CARD_AMD_RADEON_R9_M395X = 0x6920,
CARD_AMD_RADEON_RX_460 = 0x67ef,
CARD_AMD_RADEON_RX_480 = 0x67df,
CARD_AMD_RADEON_RX_VEGA = 0x687f,
@@ -2446,6 +2452,7 @@ enum wined3d_pci_device
CARD_NVIDIA_GEFORCE_GT610 = 0x104a,
CARD_NVIDIA_GEFORCE_GT630 = 0x0f00,
CARD_NVIDIA_GEFORCE_GT630M = 0x0de9,
+ CARD_NVIDIA_GEFORCE_GT640 = 0x0fc1,
CARD_NVIDIA_GEFORCE_GT640M = 0x0fd2,
CARD_NVIDIA_GEFORCE_GT650M = 0x0fd1,
CARD_NVIDIA_GEFORCE_GTX650 = 0x0fc6,
@@ -2456,6 +2463,7 @@ enum wined3d_pci_device
CARD_NVIDIA_GEFORCE_GTX670 = 0x1189,
CARD_NVIDIA_GEFORCE_GTX670MX = 0x11a1,
CARD_NVIDIA_GEFORCE_GTX675MX = 0x11a7,
+ CARD_NVIDIA_GEFORCE_GTX675MX_MAC = 0x11a2,
CARD_NVIDIA_GEFORCE_GTX680 = 0x1180,
CARD_NVIDIA_GEFORCE_GTX690 = 0x1188,
CARD_NVIDIA_GEFORCE_GT720 = 0x128b,
@@ -2463,6 +2471,7 @@ enum wined3d_pci_device
CARD_NVIDIA_GEFORCE_GT730M = 0x0fe1,
CARD_NVIDIA_GEFORCE_GT740M = 0x1292,
CARD_NVIDIA_GEFORCE_GT750M = 0x0fe9,
+ CARD_NVIDIA_GEFORCE_GT755M = 0x0fcd,
CARD_NVIDIA_GEFORCE_GTX750 = 0x1381,
CARD_NVIDIA_GEFORCE_GTX750TI = 0x1380,
CARD_NVIDIA_GEFORCE_GTX760 = 0x1187,
@@ -2470,7 +2479,9 @@ enum wined3d_pci_device
CARD_NVIDIA_GEFORCE_GTX765M = 0x11e2,
CARD_NVIDIA_GEFORCE_GTX770M = 0x11e0,
CARD_NVIDIA_GEFORCE_GTX770 = 0x1184,
+ CARD_NVIDIA_GEFORCE_GTX775M = 0x119d,
CARD_NVIDIA_GEFORCE_GTX780 = 0x1004,
+ CARD_NVIDIA_GEFORCE_GTX780M = 0x119e,
CARD_NVIDIA_GEFORCE_GTX780TI = 0x100a,
CARD_NVIDIA_GEFORCE_GTXTITAN = 0x1005,
CARD_NVIDIA_GEFORCE_GTXTITANB = 0x100c,
@@ -2546,7 +2557,8 @@ enum wined3d_pci_device
CARD_INTEL_IVBS = 0x015a,
CARD_INTEL_HWD = 0x0412,
CARD_INTEL_HWM = 0x0416,
- CARD_INTEL_HD5000 = 0x0a26,
+ CARD_INTEL_HD5000_1 = 0x0a26,
+ CARD_INTEL_HD5000_2 = 0x0422,
CARD_INTEL_I5100_1 = 0x0a22,
CARD_INTEL_I5100_2 = 0x0a2a,
CARD_INTEL_I5100_3 = 0x0a2b,
@@ -2556,6 +2568,7 @@ enum wined3d_pci_device
CARD_INTEL_IP5200_3 = 0x0d2a,
CARD_INTEL_IP5200_4 = 0x0d2b,
CARD_INTEL_IP5200_5 = 0x0d2e,
+ CARD_INTEL_IP5200_6 = 0x0c22,
CARD_INTEL_HD5300 = 0x161e,
CARD_INTEL_HD5500 = 0x1616,
CARD_INTEL_HD5600 = 0x1612,
--
2.17.0
July 18, 2019
[PATCH] winex11.drv: Don't set the foreground for focus events that are older than the last SetFocus sent without an event
by Gabriel Ivăncescu
When creating a visible window, the focus and the respective messages are
immediately sent to the created window to match Windows behavior. However,
the X11 server also sends either FocusIn events or the WM sends ClientMessages
with the WM_TAKE_FOCUS atom (by default) if the windows are managed, since
it received focus. If the application didn't have a message loop up to
process these events, they will remain in the queue.
When creating one window, this is not a problem because the focus set
manually and the focus set when processing the events will be the same and
no message is sent. However, if 2 or more windows are created before the
message loop, when these events are later processed by the app's message
loop, they will change the focus and send the messages again, even though
we've already done so earlier, which confuses some apps at this point. One
example is Heroes of Might and Magic 5.
See comment #11 on https://bugs.winehq.org/show_bug.cgi?id=39742#c11 --
`When "Full screen" active game starts and then shows desktop but it is not
exited and after a few times switching game/desktop it shows game screen
and it is playable`
Related Proton bug: https://github.com/ValveSoftware/Proton/issues/2401
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
Note that set_focus has to unconditionally (regardless of serial) set
the focus with XSetInputFocus since it's handled in WM_TAKE_FOCUS. The X
server will take care of old focus events and sort them out itself using
the time. We just have to stop sending the respective focus messages
(i.e. SetForegroundWindow) and keep the current foreground window because
it was set by a "later" SetFocus.
dlls/winex11.drv/event.c | 65 +++++++++++++++++++++++++++++++--------
dlls/winex11.drv/x11drv.h | 2 ++
2 files changed, 54 insertions(+), 13 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 5c465aa..3470064 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -591,14 +591,22 @@ static void set_input_focus( struct x11drv_win_data *data )
/**********************************************************************
* set_focus
*/
-static void set_focus( Display *display, HWND hwnd, Time time )
+static void set_focus( Display *display, HWND hwnd, Time time, unsigned long serial )
{
+ struct x11drv_thread_data *thread_data = x11drv_thread_data();
HWND focus;
Window win;
GUITHREADINFO threadinfo;
- TRACE( "setting foreground window to %p\n", hwnd );
- SetForegroundWindow( hwnd );
+ if ((long)(thread_data->focus_serial - serial) > 0)
+ {
+ TRACE( "ignoring old serial %lu/%lu\n", serial, thread_data->focus_serial );
+ }
+ else
+ {
+ TRACE( "setting foreground window to %p\n", hwnd );
+ SetForegroundWindow( hwnd );
+ }
threadinfo.cbSize = sizeof(threadinfo);
GetGUIThreadInfo(0, &threadinfo);
@@ -706,7 +714,7 @@ static void handle_wm_protocols( HWND hwnd, XClientMessageEvent *event )
MAKELONG(HTCAPTION,WM_LBUTTONDOWN) );
if (ma != MA_NOACTIVATEANDEAT && ma != MA_NOACTIVATE)
{
- set_focus( event->display, hwnd, event_time );
+ set_focus( event->display, hwnd, event_time, event->serial );
return;
}
}
@@ -715,7 +723,7 @@ static void handle_wm_protocols( HWND hwnd, XClientMessageEvent *event )
hwnd = GetForegroundWindow();
if (!hwnd) hwnd = last_focus;
if (!hwnd) hwnd = GetDesktopWindow();
- set_focus( event->display, hwnd, event_time );
+ set_focus( event->display, hwnd, event_time, event->serial );
return;
}
/* try to find some other window to give the focus to */
@@ -723,7 +731,7 @@ static void handle_wm_protocols( HWND hwnd, XClientMessageEvent *event )
if (hwnd) hwnd = GetAncestor( hwnd, GA_ROOT );
if (!hwnd) hwnd = GetActiveWindow();
if (!hwnd) hwnd = last_focus;
- if (hwnd && can_activate_window(hwnd)) set_focus( event->display, hwnd, event_time );
+ if (hwnd && can_activate_window(hwnd)) set_focus( event->display, hwnd, event_time, event->serial );
}
else if (protocol == x11drv_atom(_NET_WM_PING))
{
@@ -777,17 +785,26 @@ static BOOL X11DRV_FocusIn( HWND hwnd, XEvent *xev )
if (hwnd) hwnd = GetAncestor( hwnd, GA_ROOT );
if (!hwnd) hwnd = GetActiveWindow();
if (!hwnd) hwnd = x11drv_thread_data()->last_focus;
- if (hwnd && can_activate_window(hwnd)) set_focus( event->display, hwnd, CurrentTime );
+ if (hwnd && can_activate_window(hwnd)) set_focus( event->display, hwnd, CurrentTime, event->serial );
+ }
+ else
+ {
+ struct x11drv_thread_data *thread_data = x11drv_thread_data();
+
+ if ((long)(thread_data->focus_serial - event->serial) > 0)
+ TRACE("ignoring old serial %lu/%lu\n", event->serial, thread_data->focus_serial);
+ else
+ SetForegroundWindow( hwnd );
}
- else SetForegroundWindow( hwnd );
return TRUE;
}
/**********************************************************************
* focus_out
*/
-static void focus_out( Display *display , HWND hwnd )
+static void focus_out( Display *display, HWND hwnd, unsigned long serial )
{
+ struct x11drv_thread_data *thread_data = x11drv_thread_data();
HWND hwnd_tmp;
Window focus_win;
int revert;
@@ -795,7 +812,7 @@ static void focus_out( Display *display , HWND hwnd )
if (ximInComposeMode) return;
- x11drv_thread_data()->last_focus = hwnd;
+ thread_data->last_focus = hwnd;
if ((xic = X11DRV_get_ic( hwnd ))) XUnsetICFocus( xic );
if (root_window != DefaultRootWindow(display))
@@ -804,6 +821,12 @@ static void focus_out( Display *display , HWND hwnd )
return;
}
if (hwnd != GetForegroundWindow()) return;
+
+ if ((long)(thread_data->focus_serial - serial) > 0)
+ {
+ TRACE("ignoring old serial %lu/%lu\n", serial, thread_data->focus_serial);
+ return;
+ }
SendMessageW( hwnd, WM_CANCELMODE, 0, 0 );
/* don't reset the foreground window, if the window which is
@@ -847,7 +870,7 @@ static BOOL X11DRV_FocusOut( HWND hwnd, XEvent *xev )
return TRUE;
}
if (!hwnd) return FALSE;
- focus_out( event->display, hwnd );
+ focus_out( event->display, hwnd, event->serial );
return TRUE;
}
@@ -1377,6 +1400,7 @@ void wait_for_withdrawn_state( HWND hwnd, BOOL set )
*/
void CDECL X11DRV_SetFocus( HWND hwnd )
{
+ struct x11drv_thread_data *thread_data;
struct x11drv_win_data *data;
HWND parent;
@@ -1392,6 +1416,21 @@ void CDECL X11DRV_SetFocus( HWND hwnd )
}
if (!data->managed || data->embedder) set_input_focus( data );
release_win_data( data );
+
+ hwnd = GetAncestor(hwnd, GA_ROOT);
+ if (hwnd != (thread_data = x11drv_thread_data())->setfocus_hwnd)
+ {
+ thread_data->setfocus_hwnd = hwnd;
+
+ /* If we are not processing an event, store the current serial after syncing
+ with the X server, so that we ignore all older focus-related events. This
+ prevents focus being reverted later when the app processes its messages. */
+ if (!thread_data->current_event)
+ {
+ XSync(thread_data->display, False);
+ thread_data->focus_serial = LastKnownRequestProcessed(thread_data->display) + 1;
+ }
+ }
}
@@ -1659,12 +1698,12 @@ static void handle_xembed_protocol( HWND hwnd, XClientMessageEvent *event )
case XEMBED_WINDOW_DEACTIVATE:
TRACE( "win %p/%lx XEMBED_WINDOW_DEACTIVATE message\n", hwnd, event->window );
- focus_out( event->display, GetAncestor( hwnd, GA_ROOT ) );
+ focus_out( event->display, GetAncestor( hwnd, GA_ROOT ), event->serial );
break;
case XEMBED_FOCUS_OUT:
TRACE( "win %p/%lx XEMBED_FOCUS_OUT message\n", hwnd, event->window );
- focus_out( event->display, GetAncestor( hwnd, GA_ROOT ) );
+ focus_out( event->display, GetAncestor( hwnd, GA_ROOT ), event->serial );
break;
case XEMBED_MODALITY_ON:
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 0d3695b..63598d7 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -326,10 +326,12 @@ struct x11drv_thread_data
XEvent *current_event; /* event currently being processed */
HWND grab_hwnd; /* window that currently grabs the mouse */
HWND last_focus; /* last window that had focus */
+ HWND setfocus_hwnd; /* top-level window corresponding to the last SetFocus */
XIM xim; /* input method */
HWND last_xic_hwnd; /* last xic window */
XFontSet font_set; /* international text drawing font set */
Window selection_wnd; /* window used for selection interactions */
+ unsigned long focus_serial; /* serial number when last SetFocus without an event happened */
unsigned long warp_serial; /* serial number of last pointer warp request */
Window clip_window; /* window used for cursor clipping */
HWND clip_hwnd; /* message window stored in desktop while clipping is active */
--
2.21.0
July 18, 2019
Re: [PATCH vkd3d v2 3/6] vkd3d: Handle SINT and UINT formats in ClearRenderTargetView().
by Henri Verbeet
On Wed, 17 Jul 2019 at 15:48, Józef Kucia <joseph.kucia(a)gmail.com> wrote:
> +bool vk_format_is_signed_integer(VkFormat format)
> +{
> + switch (format)
> + {
> + case VK_FORMAT_R32G32B32A32_SINT:
> + case VK_FORMAT_R16G16B16A16_SINT:
> + case VK_FORMAT_R32G32B32_SINT:
> + case VK_FORMAT_R8G8B8A8_SINT:
> + case VK_FORMAT_R32G32_SINT:
> + case VK_FORMAT_R16G16_SINT:
> + case VK_FORMAT_R8G8_SINT:
> + case VK_FORMAT_R32_SINT:
> + case VK_FORMAT_R16_SINT:
> + case VK_FORMAT_R8_SINT:
> + return true;
> + default:
> + return false;
> + }
> +}
> +
> +bool vk_format_is_unsigned_integer(VkFormat format)
> +{
> + switch (format)
> + {
> + case VK_FORMAT_R32G32B32A32_UINT:
> + case VK_FORMAT_R16G16B16A16_UINT:
> + case VK_FORMAT_R32G32B32_UINT:
> + case VK_FORMAT_R8G8B8A8_UINT:
> + case VK_FORMAT_R32G32_UINT:
> + case VK_FORMAT_R16G16_UINT:
> + case VK_FORMAT_R8G8_UINT:
> + case VK_FORMAT_R32_UINT:
> + case VK_FORMAT_R16_UINT:
> + case VK_FORMAT_R8_UINT:
> + return true;
> + default:
> + return false;
> + }
> +}
That's a little ugly, can we store the format type in vkd3d_formats[]?
July 18, 2019
Re: [PATCH vkd3d v2 2/6] tests: Test ClearRenderTargetView() with R16G16B16A16 formats.
by Henri Verbeet
On Wed, 17 Jul 2019 at 15:48, Józef Kucia <joseph.kucia(a)gmail.com> wrote:
> +static bool compare_uint64(uint64_t a, uint64_t b, unsigned int max_diff)
> +{
> + return abs(a - b) <= max_diff;
> +}
llabs()?
> + static const struct
> + {
> + const float *color;
> + uint64_t expected;
> + bool is_todo;
> + }
> + test_r16g16b16a16_unorm[] =
> + {
> + {green, 0xffff0000},
> + },
> + test_r16g16b16a16_uint[] =
> + {
> + {green, 0x0010000, true},
> + {color, 0x00000000, true},
> + {negative_value, 0x00000001, true},
> + },
> + test_r16g16b16a16_sint[] =
> + {
> + {green, 0x0010000, true},
> + {color, 0x00000000, true},
> + {negative_value, 0xfffe0000ffff0001, true},
> + };
Like 1/6, do these need to be separate arrays/loops?
July 18, 2019
Re: [PATCH vkd3d v2 1/6] tests: Test ClearRenderTargetView() with R8G8B8A8_{SINT, UINT} formats.
by Henri Verbeet
On Wed, 17 Jul 2019 at 15:48, Józef Kucia <joseph.kucia(a)gmail.com> wrote:
> @@ -4311,6 +4328,30 @@ static void test_clear_render_target_view(void)
> unsigned int i;
> D3D12_BOX box;
> HRESULT hr;
> + static const struct
> + {
> + const float *color;
> + unsigned int expected;
> + unsigned int max_diff;
> + bool is_todo;
> + }
> + test_r8g8b8a8_unorm[] =
> + {
> + {green, 0xff00ff00, 0},
> + {color, 0xbf4c7f19, 2},
> + },
> + test_r8g8b8a8_uint[] =
> + {
> + {green, 0x01000100, 0, true},
> + {color, 0x00000000, 0, true},
> + {negative_value, 0x00000001, 0, true},
> + },
> + test_r8g8b8a8_sint[] =
> + {
> + {green, 0x01000100, 0, true},
> + {color, 0x00000000, 0, true},
> + {negative_value, 0xfe00ff01, 0, true},
> + };
Do you need these to be separate arrays? It seems that only the view
format is different between them.
July 18, 2019
Re: [PATCH vkd3d] demos: Use 3 swapchain images.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
July 18, 2019
Re: [PATCH vkd3d 6/6] tests: Do not use TRUE and FALSE constants.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
July 18, 2019
Re: [PATCH vkd3d 5/6] tests: Prefer C99 bool.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
July 18, 2019
Re: [PATCH vkd3d 4/6] tests: Introduce VKD3D_TEST_FILTER.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
July 18, 2019
[PATCH 2/2] makefiles: Split PE debug sections to separate ELF file
by Rémi Bernon
Linux perf tool cannot parse PE files for debug information, but it also
looks for external debug info alongside to the binaries it detects.
We can use this feature to provide DWARF information for PE files by
splitting the sections to a separate ELF that perf will understand.
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
tools/makedep.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tools/makedep.c b/tools/makedep.c
index 9713f62b25d..b5474dc24f5 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -3244,6 +3244,14 @@ static void output_module( struct makefile *make )
output_filename( make->is_cross ? "$(CROSSLDFLAGS)" : "$(LDFLAGS)" );
output_filename( make->is_cross ? "-Wl,--file-alignment,4096" : "" );
output( "\n" );
+ if (make->is_cross)
+ {
+ output( "ifeq ($(CROSSTARGET),x86_64-w64-mingw32)\n");
+ output( "\tmkdir -p $((a)D)/.debug && objcopy -O elf64-x86-64 --only-keep-debug --file-alignment=4096 $@ $(@D)/.debug/$(@F)\n" );
+ output( "else\n");
+ output( "\tmkdir -p $((a)D)/.debug && objcopy -O elf32-i386 --only-keep-debug --file-alignment=4096 $@ $(@D)/.debug/$(@F)\n" );
+ output( "endif\n");
+ }
if (spec_file && make->importlib)
{
--
2.20.1
July 18, 2019