https://git.reactos.org/?p=reactos.git;a=commitdiff;h=082f230ac76087915355c…
commit 082f230ac76087915355c962a307f21ade9dae96
Author: Joachim Henze <Joachim.Henze(a)reactos.org>
AuthorDate: Tue Oct 22 03:06:07 2019 +0200
Commit: Joachim Henze <Joachim.Henze(a)reactos.org>
CommitDate: Tue Oct 22 03:07:09 2019 +0200
[WINED3D] Workaround regression CORE-15408
Many 3D applications crashed with 'WineD3D fake window' msgbox
if they were used in VirtualBox with graphics driver
'VBoxDisp.sys from VM guest additions + installed 3D acceleration'
That was a regression of SVN r75847 == git
3d13ed394efdd0ce0aef4e10965b1d08334394ec
Contrary we had no such issues with the SW emulation.
The reason for the bug is that
VBoxDisp only supports OpenGL 2.1 (GLSL 120) and WineD3D
tried to use shaders for OpenGL 3.2 (GLSL 150).
This workaround disables the usage in a hard-coded way for
all graphics adapters. Should be ok for now, as ros does not
really support any modern GPU drivers yet.
Proper working runtime detection would be better ofc.
Thx to Doug Lyons & Fabian Maurer
---
dll/directx/wine/wined3d/utils.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/dll/directx/wine/wined3d/utils.c b/dll/directx/wine/wined3d/utils.c
index b48293eabb3..3c6d218f27d 100644
--- a/dll/directx/wine/wined3d/utils.c
+++ b/dll/directx/wine/wined3d/utils.c
@@ -2183,7 +2183,14 @@ static void draw_test_quad(struct wined3d_caps_gl_ctx *ctx, const struct wined3d
if (!ctx->test_program_id)
{
+#ifdef __REACTOS__
+ /* workaround CORE-15408 crash for many 3D applications.
+ VBoxDisp with enabled 3D acceleration only supports OpenGL 2.1 (GLSL 120).
+ Wine must not use shaders for OpenGL 3.2 (GLSL 150). */
+ BOOL use_glsl_150 = FALSE;
+#else
BOOL use_glsl_150 = gl_info->glsl_version >= MAKEDWORD_VERSION(1, 50);
+#endif
ctx->test_program_id = GL_EXTCALL(glCreateProgram());
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f2f833c53c27c58cf9b76…
commit f2f833c53c27c58cf9b762fcc967aaaf41d2668f
Author: Joachim Henze <Joachim.Henze(a)reactos.org>
AuthorDate: Tue Oct 22 01:10:28 2019 +0200
Commit: Joachim Henze <Joachim.Henze(a)reactos.org>
CommitDate: Tue Oct 22 01:10:28 2019 +0200
[COMCTL32] Address regression CORE-14622
"Avira Antivir Personal 6.35.00.243" had issues painting its
setup wizard dialog with correct background color.
That part was a regression of SVN r74136 == git
b1b42795a94d8e3cb69e2d9e5bd0af4929610361
and also did not draw its umbrella bmp, which did never work
in ros up to now afaik.
https://reactos.org/testman/compare.php?ids=69394,69478 VBOX
https://reactos.org/testman/compare.php?ids=69395,69479 KVM
Thanks to patches author Doug Lyons and HBelusca.
Wine has been reported to be affected by that bug as well:
https://bugs.winehq.org/show_bug.cgi?id=46636
Not sure whether our patch will be accepted by Wine,
to my naive eye this looks like an interim solution.
---
dll/win32/comctl32/propsheet.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/dll/win32/comctl32/propsheet.c b/dll/win32/comctl32/propsheet.c
index 746d66c8d7c..4dd355a78c8 100644
--- a/dll/win32/comctl32/propsheet.c
+++ b/dll/win32/comctl32/propsheet.c
@@ -1470,6 +1470,9 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent,
(psInfo->ppshheader.dwFlags & PSH_WATERMARK) &&
(ppshpage->dwFlags & PSP_HIDEHEADER))
{
+#ifdef __REACTOS__
+ if (psInfo->ppshheader.u4.hbmWatermark)
+#endif
SetWindowSubclass(hwndPage, PROPSHEET_WizardSubclassProc, 1,
(DWORD_PTR)ppshpage);
}
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=410c6069996abfeb51e13…
commit 410c6069996abfeb51e134bfec940a9a38598682
Author: Pierre Schweitzer <pierre(a)reactos.org>
AuthorDate: Mon Oct 21 16:45:28 2019 +0200
Commit: Pierre Schweitzer <pierre(a)reactos.org>
CommitDate: Mon Oct 21 16:45:28 2019 +0200
[CLASS2] Hackplement support for IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
This is required so that MountMgr can handle devices that are still
using class2 instead of classpnp.
Given we have no unique ID to return, we'll return device path, which
is far from perfect but which is enough for now to have everything
working.
---
drivers/storage/class/class2/class2.c | 67 +++++++++++++++++++++++++++++++++--
1 file changed, 65 insertions(+), 2 deletions(-)
diff --git a/drivers/storage/class/class2/class2.c b/drivers/storage/class/class2/class2.c
index 2d29f645759..5107c45f7ad 100644
--- a/drivers/storage/class/class2/class2.c
+++ b/drivers/storage/class/class2/class2.c
@@ -4041,8 +4041,7 @@ Return Value:
goto SetStatusAndReturn;
}
- if (irpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_MOUNTDEV_QUERY_UNIQUE_ID ||
- irpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME) {
+ if (irpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME) {
UNIMPLEMENTED;
Irp->IoStatus.Information = 0;
@@ -4052,6 +4051,70 @@ Return Value:
goto SetStatusAndReturn;
}
+ if (irpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_MOUNTDEV_QUERY_UNIQUE_ID) {
+
+ //
+ // FIXME
+ // This is a HACK. We don't have unique ID.
+ // We'll just return device name as unique ID.
+ // It's unique but may not survive to a reboot,
+ // which is not matching the requirements for
+ // a MountMgr unique ID.
+ //
+
+ PMOUNTDEV_UNIQUE_ID uniqueId = Irp->AssociatedIrp.SystemBuffer;
+
+ //
+ // Check output buffer is big enough.
+ //
+
+ if (irpStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(MOUNTDEV_UNIQUE_ID)) {
+
+ Irp->IoStatus.Information = 0;
+ Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ status = STATUS_INVALID_PARAMETER;
+ goto SetStatusAndReturn;
+ }
+
+ //
+ // Set size we'll return so that caller can allocate big enough buffer.
+ //
+
+ RtlZeroMemory(uniqueId, sizeof(MOUNTDEV_UNIQUE_ID));
+ uniqueId->UniqueIdLength = deviceExtension->DeviceName.Length;
+
+ //
+ // Check buffer is big enough to contain device name.
+ //
+
+ if (irpStack->Parameters.DeviceIoControl.OutputBufferLength < FIELD_OFFSET(MOUNTDEV_UNIQUE_ID, UniqueId) + uniqueId->UniqueIdLength) {
+
+ Irp->IoStatus.Information = sizeof(MOUNTDEV_UNIQUE_ID);
+ Irp->IoStatus.Status = STATUS_BUFFER_OVERFLOW;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ status = STATUS_BUFFER_OVERFLOW;
+ goto SetStatusAndReturn;
+ }
+
+ //
+ // Copy device name.
+ //
+
+ RtlCopyMemory(uniqueId->UniqueId, deviceExtension->DeviceName.Buffer,
+ uniqueId->UniqueIdLength);
+ status = STATUS_SUCCESS;
+
+ //
+ // And return to the caller.
+ //
+
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ Irp->IoStatus.Information = FIELD_OFFSET(MOUNTDEV_UNIQUE_ID, UniqueId) + uniqueId->UniqueIdLength;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ goto SetStatusAndReturn;
+ }
+
if (irpStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_MOUNTDEV_QUERY_DEVICE_NAME) {
PMOUNTDEV_NAME name = Irp->AssociatedIrp.SystemBuffer;