Wine-Devel
Threads by month
- ----- 2026 -----
- 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
- 84515 discussions
[PATCH v2] include: Add Windows.Gaming.Input.FlightStick runtimeclass declaration.
by Rémi Bernon April 21, 2022
by Rémi Bernon April 21, 2022
April 21, 2022
From: Biswapriyo Nath <nathbappai(a)gmail.com>
Signed-off-by: Biswapriyo Nath <nathbappai(a)gmail.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
include/windows.gaming.input.idl | 77 ++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/include/windows.gaming.input.idl b/include/windows.gaming.input.idl
index 6f557883167..fdae3aa70b1 100644
--- a/include/windows.gaming.input.idl
+++ b/include/windows.gaming.input.idl
@@ -34,18 +34,22 @@ import "windows.devices.power.idl";
namespace Windows.Gaming.Input {
typedef enum ArcadeStickButtons ArcadeStickButtons;
+ typedef enum FlightStickButtons FlightStickButtons;
typedef enum GamepadButtons GamepadButtons;
typedef enum GameControllerButtonLabel GameControllerButtonLabel;
typedef enum GameControllerSwitchKind GameControllerSwitchKind;
typedef enum GameControllerSwitchPosition GameControllerSwitchPosition;
typedef enum RacingWheelButtons RacingWheelButtons;
typedef struct ArcadeStickReading ArcadeStickReading;
+ typedef struct FlightStickReading FlightStickReading;
typedef struct GamepadReading GamepadReading;
typedef struct GamepadVibration GamepadVibration;
typedef struct RacingWheelReading RacingWheelReading;
interface IArcadeStick;
interface IArcadeStickStatics;
interface IArcadeStickStatics2;
+ interface IFlightStick;
+ interface IFlightStickStatics;
interface IGameController;
interface IGameControllerBatteryInfo;
interface IGamepad;
@@ -58,6 +62,7 @@ namespace Windows.Gaming.Input {
interface IRawGameController;
interface IRawGameController2;
runtimeclass ArcadeStick;
+ runtimeclass FlightStick;
runtimeclass Gamepad;
runtimeclass Headset;
runtimeclass RacingWheel;
@@ -65,6 +70,7 @@ namespace Windows.Gaming.Input {
declare {
interface Windows.Foundation.EventHandler<Windows.Gaming.Input.ArcadeStick *>;
+ interface Windows.Foundation.EventHandler<Windows.Gaming.Input.FlightStick *>;
interface Windows.Foundation.EventHandler<Windows.Gaming.Input.Gamepad *>;
interface Windows.Foundation.EventHandler<Windows.Gaming.Input.RacingWheel *>;
interface Windows.Foundation.EventHandler<Windows.Gaming.Input.RawGameController *>;
@@ -73,6 +79,9 @@ namespace Windows.Gaming.Input {
interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.ArcadeStick *>;
interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.ArcadeStick *>;
interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.ArcadeStick *>;
+ interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.FlightStick *>;
+ interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.FlightStick *>;
+ interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.FlightStick *>;
interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.Gamepad *>;
interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.Gamepad *>;
interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.Gamepad *>;
@@ -108,6 +117,17 @@ namespace Windows.Gaming.Input {
Special2 = 0x800
};
+ [
+ contract(Windows.Foundation.UniversalApiContract, 4.0),
+ flags
+ ]
+ enum FlightStickButtons
+ {
+ None = 0x0,
+ FirePrimary = 0x1,
+ FireSecondary = 0x2,
+ };
+
[
contract(Windows.Foundation.UniversalApiContract, 1.0),
flags
@@ -273,6 +293,18 @@ namespace Windows.Gaming.Input {
Windows.Gaming.Input.ArcadeStickButtons Buttons;
};
+ [contract(Windows.Foundation.UniversalApiContract, 4.0)]
+ struct FlightStickReading
+ {
+ UINT64 Timestamp;
+ Windows.Gaming.Input.FlightStickButtons Buttons;
+ Windows.Gaming.Input.GameControllerSwitchPosition HatSwitch;
+ DOUBLE Roll;
+ DOUBLE Pitch;
+ DOUBLE Yaw;
+ DOUBLE Throttle;
+ };
+
[contract(Windows.Foundation.UniversalApiContract, 1.0)]
struct GamepadReading
{
@@ -349,6 +381,38 @@ namespace Windows.Gaming.Input {
[out, retval] Windows.Gaming.Input.ArcadeStick **value);
}
+ [
+ contract(Windows.Foundation.UniversalApiContract, 4.0),
+ exclusiveto(Windows.Gaming.Input.FlightStick),
+ uuid(b4a2c01c-b83b-4459-a1a9-97b03c33da7c)
+ ]
+ interface IFlightStick : IInspectable
+ requires Windows.Gaming.Input.IGameController
+ {
+ [propget] HRESULT HatSwitchKind([out, retval] Windows.Gaming.Input.GameControllerSwitchKind *value);
+ HRESULT GetButtonLabel([in] Windows.Gaming.Input.FlightStickButtons button,
+ [out, retval] Windows.Gaming.Input.GameControllerButtonLabel *value);
+ HRESULT GetCurrentReading([out, retval] Windows.Gaming.Input.FlightStickReading *value);
+ }
+
+ [
+ contract(Windows.Foundation.UniversalApiContract, 4.0),
+ exclusiveto(Windows.Gaming.Input.FlightStick),
+ uuid(5514924a-fecc-435e-83dc-5cec8a18a520)
+ ]
+ interface IFlightStickStatics : IInspectable
+ {
+ [eventadd] HRESULT FlightStickAdded([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.FlightStick *> *value,
+ [out, retval] EventRegistrationToken *token);
+ [eventremove] HRESULT FlightStickAdded([in] EventRegistrationToken token);
+ [eventadd] HRESULT FlightStickRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.FlightStick *> *value,
+ [out, retval] EventRegistrationToken *token);
+ [eventremove] HRESULT FlightStickRemoved([in] EventRegistrationToken token);
+ [propget] HRESULT FlightSticks([out, retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.FlightStick *> **value);
+ HRESULT FromGameController([in] Windows.Gaming.Input.IGameController *controller,
+ [out, retval] Windows.Gaming.Input.FlightStick **value);
+ }
+
[
contract(Windows.Foundation.UniversalApiContract, 1.0),
uuid(1baf6522-5f64-42c5-8267-b9fe2215bfbd)
@@ -537,6 +601,19 @@ namespace Windows.Gaming.Input {
[contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Gaming.Input.IGameControllerBatteryInfo;
}
+ [
+ contract(Windows.Foundation.UniversalApiContract, 4.0),
+ marshaling_behavior(agile),
+ static(Windows.Gaming.Input.IFlightStickStatics, Windows.Foundation.UniversalApiContract, 4.0),
+ threading(both)
+ ]
+ runtimeclass FlightStick
+ {
+ [default] interface Windows.Gaming.Input.IFlightStick;
+ interface Windows.Gaming.Input.IGameController;
+ interface Windows.Gaming.Input.IGameControllerBatteryInfo;
+ }
+
[
contract(Windows.Foundation.UniversalApiContract, 1.0),
marshaling_behavior(agile),
--
2.35.1
1
0
[PATCH] ddraw/tests: Use winetest_push_context() in test_viewport().
by Zebediah Figura April 21, 2022
by Zebediah Figura April 21, 2022
April 21, 2022
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
dlls/ddraw/tests/ddraw1.c | 28 +++++++++--------
dlls/ddraw/tests/ddraw2.c | 57 ++++++++++++++++++----------------
dlls/ddraw/tests/ddraw4.c | 56 ++++++++++++++++++---------------
dlls/ddraw/tests/ddraw7.c | 65 +++++++++++++++++++++++----------------
4 files changed, 116 insertions(+), 90 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index e0393a3a591..84bdda82978 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -386,7 +386,7 @@ static void fill_surface(IDirectDrawSurface *surface, D3DCOLOR color)
ok(SUCCEEDED(hr), "Failed to unlock surface, hr %#x.\n", hr);
}
-static void check_rect(IDirectDrawSurface *surface, RECT r, const char *message)
+static void check_rect(IDirectDrawSurface *surface, RECT r)
{
LONG x_coords[2][2] =
{
@@ -417,8 +417,7 @@ static void check_rect(IDirectDrawSurface *surface, RECT r, const char *message)
if (x < 0 || x >= 640 || y < 0 || y >= 480)
continue;
color = get_surface_color(surface, x, y);
- ok(color == expected, "%s: Pixel (%d, %d) has color %08x, expected %08x\n",
- message, x, y, color, expected);
+ ok(color == expected, "Pixel (%d, %d) has color %08x, expected %08x.\n", x, y, color, expected);
}
}
}
@@ -13277,11 +13276,13 @@ static void test_viewport(void)
for (j = 0; j < ARRAY_SIZE(tests); ++j)
{
+ winetest_push_context(tests[j].message);
+
hr = IDirect3DViewport_Clear(full_viewport, 1, &clear_rect, D3DCLEAR_TARGET);
- ok(SUCCEEDED(hr), "Failed to clear viewport, hr %#x (j %u).\n", hr, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3D_CreateViewport(d3d, &viewport, NULL);
- ok(SUCCEEDED(hr), "Failed to create viewport, hr %#x (j %u).\n", hr, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
memset(&vp, 0, sizeof(vp));
vp.dwSize = sizeof(vp);
vp.dwX = tests[j].vp.dwX;
@@ -13295,26 +13296,27 @@ static void test_viewport(void)
vp.dvMinZ = 0.0f;
vp.dvMaxZ = 1.0f;
hr = IDirect3DViewport_SetViewport(viewport, &vp);
- ok(hr == D3DERR_VIEWPORTHASNODEVICE,
- "Setting viewport data returned unexpected hr %#x (j %u).\n", hr, j);
+ ok(hr == D3DERR_VIEWPORTHASNODEVICE, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice_AddViewport(device, viewport);
- ok(SUCCEEDED(hr), "Failed to add viewport, hr %#x (j %u).\n", hr, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport_SetViewport(viewport, &vp);
- ok(SUCCEEDED(hr), "Failed to set viewport data, hr %#x (j %u).\n", hr, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice_BeginScene(device);
- ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x (j %u).\n", hr, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
set_execute_data(execute_buffer, 4, sizeof(quad), inst_length);
hr = IDirect3DDevice_Execute(device, execute_buffer, viewport, D3DEXECUTE_CLIPPED);
- ok(SUCCEEDED(hr), "Failed to execute exec buffer, hr %#x (j %u).\n", hr, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice_EndScene(device);
- ok(SUCCEEDED(hr), "Failed to end scene, hr %#x (j %u).\n", hr, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- check_rect(rt, tests[j].expected_rect, tests[j].message);
+ check_rect(rt, tests[j].expected_rect);
destroy_viewport(device, viewport);
+
+ winetest_pop_context();
}
destroy_viewport(device, full_viewport);
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 03f1d488673..f67aae9db5b 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -388,7 +388,7 @@ static void fill_surface(IDirectDrawSurface *surface, D3DCOLOR color)
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
-static void check_rect(IDirectDrawSurface *surface, RECT r, const char *message)
+static void check_rect(IDirectDrawSurface *surface, RECT r)
{
LONG x_coords[2][2] =
{
@@ -419,8 +419,7 @@ static void check_rect(IDirectDrawSurface *surface, RECT r, const char *message)
if (x < 0 || x >= 640 || y < 0 || y >= 480)
continue;
color = get_surface_color(surface, x, y);
- ok(color == expected, "%s: Pixel (%d, %d) has color %08x, expected %08x\n",
- message, x, y, color, expected);
+ ok(color == expected, "Pixel (%d, %d) has color %08x, expected %08x.\n", x, y, color, expected);
}
}
}
@@ -14154,7 +14153,11 @@ static void test_viewport(void)
{{100, 100, 640, 480}, {100, 220, 579, 459}, "Viewport (100, 100) - (640, 480)"},
{{ 0, 0, 8192, 8192}, {-10, -10, -10, -10}, "Viewport (0, 0) - (8192, 8192)"},
};
- static const struct vec2 rt_sizes[] =
+ static const struct
+ {
+ unsigned int x, y;
+ }
+ rt_sizes[] =
{
{640, 480}, {1280, 960}, {320, 240}, {800, 600},
};
@@ -14225,6 +14228,8 @@ static void test_viewport(void)
for (i = 0; i < ARRAY_SIZE(rt_sizes); ++i)
{
+ winetest_push_context("Size %ux%u", rt_sizes[i].x, rt_sizes[i].y);
+
if (i)
{
memset(&surface_desc, 0, sizeof(surface_desc));
@@ -14234,23 +14239,23 @@ static void test_viewport(void)
surface_desc.dwHeight = rt_sizes[i].y;
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &rt, NULL);
- ok(SUCCEEDED(hr), "Failed to create render target, hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
surface_desc.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT;
surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER;
surface_desc.ddpfPixelFormat = z_fmt;
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &ds, NULL);
- ok(SUCCEEDED(hr), "Failed to create depth buffer, hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirectDrawSurface_AddAttachedSurface(rt, ds);
- ok(SUCCEEDED(hr), "Failed to attach depth buffer, hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_SetRenderTarget(device, rt, 0);
- ok(SUCCEEDED(hr), "Failed to set render target, hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
else
{
hr = IDirect3DDevice2_GetRenderTarget(device, &rt);
- ok(SUCCEEDED(hr), "Failed to get render target, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
full_viewport = create_viewport(device, 0, 0, rt_sizes[i].x, rt_sizes[i].y);
@@ -14262,17 +14267,18 @@ static void test_viewport(void)
for (j = 0; j < ARRAY_SIZE(tests); ++j)
{
+ winetest_push_context(tests[j].message);
+
expected_failure = tests[j].vp.dwX + tests[j].vp.dwWidth > rt_sizes[i].x
|| tests[j].vp.dwY + tests[j].vp.dwHeight > rt_sizes[i].y;
hr = IDirect3DViewport2_Clear(full_viewport, 1, &clear_rect, D3DCLEAR_TARGET);
- ok(SUCCEEDED(hr), "Failed to clear viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3D2_CreateViewport(d3d, &viewport, NULL);
- ok(SUCCEEDED(hr), "Failed to create viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport2_SetViewport2(viewport, NULL);
- ok(hr == E_INVALIDARG, "Setting NULL viewport data returned unexpected hr %#x (i %u, j %u).\n",
- hr, i, j);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
memset(&vp, 0, sizeof(vp));
vp.dwSize = sizeof(vp);
vp.dwX = tests[j].vp.dwX;
@@ -14284,35 +14290,32 @@ static void test_viewport(void)
vp.dvMinZ = 0.0f;
vp.dvMaxZ = 1.0f;
hr = IDirect3DViewport2_SetViewport(viewport, &vp);
- ok(hr == D3DERR_VIEWPORTHASNODEVICE,
- "Setting viewport data returned unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == D3DERR_VIEWPORTHASNODEVICE, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_AddViewport(device, viewport);
- ok(SUCCEEDED(hr), "Failed to add viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport2_SetViewport(viewport, &vp);
- if (expected_failure)
- ok(hr == E_INVALIDARG, "Setting viewport data returned unexpected hr %#x (i %u, j %u).\n",
- hr, i, j);
- else
- ok(SUCCEEDED(hr), "Failed to set viewport data, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == (expected_failure ? E_INVALIDARG : DD_OK), "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_SetCurrentViewport(device, viewport);
- ok(SUCCEEDED(hr), "Failed to set the viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
if (expected_failure)
{
destroy_viewport(device, viewport);
+ winetest_pop_context();
continue;
}
hr = IDirect3DDevice2_BeginScene(device);
- ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DVT_LVERTEX, quad, 4, 0);
- ok(SUCCEEDED(hr), "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_EndScene(device);
- ok(SUCCEEDED(hr), "Failed to end scene, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- check_rect(rt, tests[j].expected_rect, tests[j].message);
+ check_rect(rt, tests[j].expected_rect);
destroy_viewport(device, viewport);
+ winetest_pop_context();
}
destroy_viewport(device, full_viewport);
@@ -14322,6 +14325,8 @@ static void test_viewport(void)
IDirectDrawSurface_Release(ds);
IDirectDrawSurface_Release(rt);
+
+ winetest_pop_context();
}
destroy_material(black_background);
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 858d39e6f8e..8f85c5bc01b 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -389,7 +389,7 @@ static void fill_surface(IDirectDrawSurface4 *surface, D3DCOLOR color)
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
-static void check_rect(IDirectDrawSurface4 *surface, RECT r, const char *message)
+static void check_rect(IDirectDrawSurface4 *surface, RECT r)
{
LONG x_coords[2][2] =
{
@@ -420,8 +420,7 @@ static void check_rect(IDirectDrawSurface4 *surface, RECT r, const char *message
if (x < 0 || x >= 640 || y < 0 || y >= 480)
continue;
color = get_surface_color(surface, x, y);
- ok(color == expected, "%s: Pixel (%d, %d) has color %08x, expected %08x\n",
- message, x, y, color, expected);
+ ok(color == expected, "Pixel (%d, %d) has color %08x, expected %08x.\n", x, y, color, expected);
}
}
}
@@ -16758,7 +16757,11 @@ static void test_viewport(void)
{{100, 100, 640, 480}, {100, 220, 579, 459}, "Viewport (100, 100) - (640, 480)"},
{{ 0, 0, 8192, 8192}, {-10, -10, -10, -10}, "Viewport (0, 0) - (8192, 8192)"},
};
- static const struct vec2 rt_sizes[] =
+ static const struct
+ {
+ unsigned int x, y;
+ }
+ rt_sizes[] =
{
{640, 480}, {1280, 960}, {320, 240}, {800, 600},
};
@@ -16825,6 +16828,8 @@ static void test_viewport(void)
for (i = 0; i < ARRAY_SIZE(rt_sizes); ++i)
{
+ winetest_push_context("Size %ux%u", rt_sizes[i].x, rt_sizes[i].y);
+
if (i)
{
memset(&surface_desc, 0, sizeof(surface_desc));
@@ -16834,23 +16839,23 @@ static void test_viewport(void)
surface_desc.dwHeight = rt_sizes[i].y;
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &rt, NULL);
- ok(SUCCEEDED(hr), "Failed to create render target, hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
surface_desc.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT;
surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER;
U4(surface_desc).ddpfPixelFormat = z_fmt;
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &ds, NULL);
- ok(SUCCEEDED(hr), "Failed to create depth buffer, hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirectDrawSurface4_AddAttachedSurface(rt, ds);
- ok(SUCCEEDED(hr), "Failed to attach depth buffer, hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_SetRenderTarget(device, rt, 0);
- ok(SUCCEEDED(hr), "Failed to set render target, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
else
{
hr = IDirect3DDevice3_GetRenderTarget(device, &rt);
- ok(SUCCEEDED(hr), "Failed to get render target, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
full_viewport = create_viewport(device, 0, 0, rt_sizes[i].x, rt_sizes[i].y);
@@ -16861,16 +16866,18 @@ static void test_viewport(void)
for (j = 0; j < ARRAY_SIZE(tests); ++j)
{
+ winetest_push_context(tests[j].message);
+
expected_failure = tests[j].vp.dwX + tests[j].vp.dwWidth > rt_sizes[i].x
|| tests[j].vp.dwY + tests[j].vp.dwHeight > rt_sizes[i].y;
hr = IDirect3DViewport3_Clear2(full_viewport, 1, &clear_rect, D3DCLEAR_TARGET, 0xff000000, 0.0f, 0);
- ok(SUCCEEDED(hr), "Failed to clear viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3D3_CreateViewport(d3d, &viewport, NULL);
- ok(SUCCEEDED(hr), "Failed to create viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport3_SetViewport2(viewport, NULL);
- ok(hr == E_INVALIDARG, "Setting NULL viewport data returned unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
memset(&vp, 0, sizeof(vp));
vp.dwSize = sizeof(vp);
vp.dwX = tests[j].vp.dwX;
@@ -16884,35 +16891,32 @@ static void test_viewport(void)
vp.dvMinZ = 0.0f;
vp.dvMaxZ = 1.0f;
hr = IDirect3DViewport3_SetViewport2(viewport, &vp);
- ok(hr == D3DERR_VIEWPORTHASNODEVICE,
- "Setting viewport data returned unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == D3DERR_VIEWPORTHASNODEVICE, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_AddViewport(device, viewport);
- ok(SUCCEEDED(hr), "Failed to add viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport3_SetViewport2(viewport, &vp);
- if (expected_failure)
- ok(hr == E_INVALIDARG,
- "Setting viewport data returned unexpected hr %#x (i %u, j %u).\n", hr, i, j);
- else
- ok(SUCCEEDED(hr), "Failed to set viewport data, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == (expected_failure ? E_INVALIDARG : DD_OK), "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_SetCurrentViewport(device, viewport);
- ok(SUCCEEDED(hr), "Failed to set the viewport, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
if (expected_failure)
{
destroy_viewport(device, viewport);
+ winetest_pop_context();
continue;
}
hr = IDirect3DDevice3_BeginScene(device);
- ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DFVF_XYZ, quad, 4, 0);
- ok(SUCCEEDED(hr), "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_EndScene(device);
- ok(SUCCEEDED(hr), "Failed to end scene, hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- check_rect(rt, tests[j].expected_rect, tests[j].message);
+ check_rect(rt, tests[j].expected_rect);
destroy_viewport(device, viewport);
+ winetest_pop_context();
}
destroy_viewport(device, full_viewport);
@@ -16922,6 +16926,8 @@ static void test_viewport(void)
IDirectDrawSurface4_Release(ds);
IDirectDrawSurface4_Release(rt);
+
+ winetest_pop_context();
}
refcount = IDirect3DDevice3_Release(device);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index d448bd76c01..3dfd590c42c 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -411,8 +411,8 @@ static void fill_surface(IDirectDrawSurface7 *surface, D3DCOLOR color)
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
-#define check_rect(a, b, c) check_rect_(__LINE__, a, b, c)
-static void check_rect_(unsigned int line, IDirectDrawSurface7 *surface, RECT r, const char *message)
+#define check_rect(a, b) check_rect_(__LINE__, a, b)
+static void check_rect_(unsigned int line, IDirectDrawSurface7 *surface, RECT r)
{
LONG x_coords[2][2] =
{
@@ -443,8 +443,8 @@ static void check_rect_(unsigned int line, IDirectDrawSurface7 *surface, RECT r,
if (x < 0 || x >= 640 || y < 0 || y >= 480)
continue;
color = get_surface_color(surface, x, y);
- ok_(__FILE__, line)(color == expected, "%s: Pixel (%d, %d) has color %08x, expected %08x.\n",
- message, x, y, color, expected);
+ ok_(__FILE__, line)(color == expected, "Pixel (%d, %d) has color %08x, expected %08x.\n",
+ x, y, color, expected);
}
}
}
@@ -16200,7 +16200,11 @@ static void test_viewport(void)
{ 0.5f, -0.5f, 1.0f},
{ 0.5f, 0.5f, 1.0f},
};
- static const struct vec2 rt_sizes[] =
+ static const struct
+ {
+ unsigned int x, y;
+ }
+ rt_sizes[] =
{
{640, 480}, {1280, 960}, {320, 240}, {800, 600},
};
@@ -16255,6 +16259,8 @@ static void test_viewport(void)
for (i = 0; i < ARRAY_SIZE(rt_sizes); ++i)
{
+ winetest_push_context("Size %ux%u", rt_sizes[i].x, rt_sizes[i].y);
+
if (i)
{
memset(&surface_desc, 0, sizeof(surface_desc));
@@ -16264,80 +16270,87 @@ static void test_viewport(void)
surface_desc.dwHeight = rt_sizes[i].y;
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &rt, NULL);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
surface_desc.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT;
surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER;
U4(surface_desc).ddpfPixelFormat = z_fmt;
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &ds, NULL);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirectDrawSurface7_AddAttachedSurface(rt, ds);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_SetRenderTarget(device, rt, 0);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
else
{
hr = IDirect3DDevice7_GetRenderTarget(device, &rt);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
for (j = 0; j < ARRAY_SIZE(tests); ++j)
{
+ winetest_push_context(tests[j].message);
+
hr = IDirect3DDevice7_Clear(device, 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xff000000,
tests[j].expected_z - z_eps, 0);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_ZFUNC, D3DCMP_GREATER);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_ZENABLE, !i);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_SetViewport(device, &tests[j].vp);
if (tests[j].vp.dwX + tests[j].vp.dwWidth > rt_sizes[i].x
|| tests[j].vp.dwY + tests[j].vp.dwHeight > rt_sizes[i].y)
{
- ok(hr == E_INVALIDARG, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+ winetest_pop_context();
continue;
}
else
{
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
}
hr = IDirect3DDevice7_BeginScene(device);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DFVF_XYZ, quad, 4, 0);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_EndScene(device);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- check_rect(rt, tests[j].expected_rect, tests[j].message);
+ check_rect(rt, tests[j].expected_rect);
if (!i)
{
hr = IDirect3DDevice7_Clear(device, 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xff000000,
tests[j].expected_z + z_eps, 0);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_ZFUNC, D3DCMP_LESS);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_BeginScene(device);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DFVF_XYZ, quad, 4, 0);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_EndScene(device);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u, j %u).\n", hr, i, j);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- check_rect(rt, tests[j].expected_rect, tests[j].message);
+ check_rect(rt, tests[j].expected_rect);
}
+
+ winetest_pop_context();
}
hr = IDirectDrawSurface7_DeleteAttachedSurface(rt, 0, ds);
- ok(hr == DD_OK, "Got unexpected hr %#x (i %u).\n", hr, i);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
IDirectDrawSurface7_Release(ds);
IDirectDrawSurface7_Release(rt);
+
+ winetest_pop_context();
}
refcount = IDirect3DDevice7_Release(device);
--
2.35.1
3
2
April 21, 2022
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/ddraw/ddraw.c | 2 +-
dlls/ddraw/device.c | 2 +-
dlls/ddraw/executebuffer.c | 16 ++++++++--------
dlls/ddraw/material.c | 2 +-
dlls/ddraw/utils.c | 12 ++++++------
dlls/ddraw/viewport.c | 8 ++++----
6 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 10086a1bae7..f6770e59fb6 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -2496,7 +2496,7 @@ static HRESULT WINAPI ddraw7_EnumDisplayModes(IDirectDraw7 *iface, DWORD Flags,
callback_sd.u1.lPitch = (callback_sd.u4.ddpfPixelFormat.u1.dwRGBBitCount / 8) * mode.width;
callback_sd.u1.lPitch = (callback_sd.u1.lPitch + 3) & ~3;
- TRACE("Enumerating %ldx%ldx%ld @%ld\n", callback_sd.dwWidth, callback_sd.dwHeight, callback_sd.u4.ddpfPixelFormat.u1.dwRGBBitCount,
+ TRACE("Enumerating %lux%lux%lu @%lu\n", callback_sd.dwWidth, callback_sd.dwHeight, callback_sd.u4.ddpfPixelFormat.u1.dwRGBBitCount,
callback_sd.u2.dwRefreshRate);
if(cb(&callback_sd, Context) == DDENUMRET_CANCEL)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 0795d0e3552..27b650036cf 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -1350,7 +1350,7 @@ static HRESULT WINAPI d3d_device1_CreateMatrix(IDirect3DDevice *iface, D3DMATRIX
*D3DMatHandle = h + 1;
- TRACE(" returning matrix handle %lx\n", *D3DMatHandle);
+ TRACE(" returning matrix handle %#lx\n", *D3DMatHandle);
wined3d_mutex_unlock();
diff --git a/dlls/ddraw/executebuffer.c b/dlls/ddraw/executebuffer.c
index a6c367bd8ef..2f4c121789d 100644
--- a/dlls/ddraw/executebuffer.c
+++ b/dlls/ddraw/executebuffer.c
@@ -31,17 +31,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
*****************************************************************************/
static void _dump_executedata(const D3DEXECUTEDATA *lpData) {
- TRACE("dwSize : %ld\n", lpData->dwSize);
- TRACE("Vertex Offset : %ld Count : %ld\n", lpData->dwVertexOffset, lpData->dwVertexCount);
- TRACE("Instruction Offset : %ld Length : %ld\n", lpData->dwInstructionOffset, lpData->dwInstructionLength);
- TRACE("HVertex Offset : %ld\n", lpData->dwHVertexOffset);
+ TRACE("dwSize : %lu\n", lpData->dwSize);
+ TRACE("Vertex Offset : %lu Count : %lu\n", lpData->dwVertexOffset, lpData->dwVertexCount);
+ TRACE("Instruction Offset : %lu Length : %lu\n", lpData->dwInstructionOffset, lpData->dwInstructionLength);
+ TRACE("HVertex Offset : %lu\n", lpData->dwHVertexOffset);
}
static void _dump_D3DEXECUTEBUFFERDESC(const D3DEXECUTEBUFFERDESC *lpDesc) {
- TRACE("dwSize : %ld\n", lpDesc->dwSize);
- TRACE("dwFlags : %lx\n", lpDesc->dwFlags);
- TRACE("dwCaps : %lx\n", lpDesc->dwCaps);
- TRACE("dwBufferSize : %ld\n", lpDesc->dwBufferSize);
+ TRACE("dwSize : %lu\n", lpDesc->dwSize);
+ TRACE("dwFlags : %#lx\n", lpDesc->dwFlags);
+ TRACE("dwCaps : %#lx\n", lpDesc->dwCaps);
+ TRACE("dwBufferSize : %lu\n", lpDesc->dwBufferSize);
TRACE("lpData : %p\n", lpDesc->lpData);
}
diff --git a/dlls/ddraw/material.c b/dlls/ddraw/material.c
index 755c9923597..5bf2fcc7f9b 100644
--- a/dlls/ddraw/material.c
+++ b/dlls/ddraw/material.c
@@ -23,7 +23,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
static void dump_material(const D3DMATERIAL *mat)
{
- TRACE(" dwSize : %ld\n", mat->dwSize);
+ TRACE(" dwSize : %lu\n", mat->dwSize);
}
static inline struct d3d_material *impl_from_IDirect3DMaterial(IDirect3DMaterial *iface)
diff --git a/dlls/ddraw/utils.c b/dlls/ddraw/utils.c
index 663f97760ef..c2794824e9e 100644
--- a/dlls/ddraw/utils.c
+++ b/dlls/ddraw/utils.c
@@ -469,7 +469,7 @@ enum wined3d_format_id wined3dformat_from_ddrawformat(const DDPIXELFORMAT *DDPix
return WINED3DFMT_L8_UNORM;
default:
- WARN("Unknown luminance-only bit depth 0x%lx.\n", DDPixelFormat->u1.dwLuminanceBitCount);
+ WARN("Unknown luminance-only bit depth %lu.\n", DDPixelFormat->u1.dwLuminanceBitCount);
return WINED3DFMT_UNKNOWN;
}
}
@@ -1138,7 +1138,7 @@ void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps)
FE(DDSVCAPS_STEREOSEQUENTIAL),
};
- TRACE(" - dwSize : %ld\n", lpcaps->dwSize);
+ TRACE(" - dwSize : %lu\n", lpcaps->dwSize);
TRACE(" - dwCaps : "); DDRAW_dump_flags(lpcaps->dwCaps, flags1, ARRAY_SIZE(flags1));
TRACE(" - dwCaps2 : "); DDRAW_dump_flags(lpcaps->dwCaps2, flags2, ARRAY_SIZE(flags2));
TRACE(" - dwCKeyCaps : "); DDRAW_dump_flags(lpcaps->dwCKeyCaps, flags3, ARRAY_SIZE(flags3));
@@ -1147,10 +1147,10 @@ void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps)
TRACE(" - dwPalCaps : "); DDRAW_dump_flags(lpcaps->dwPalCaps, flags6, ARRAY_SIZE(flags6));
TRACE(" - dwSVCaps : "); DDRAW_dump_flags(lpcaps->dwSVCaps, flags7, ARRAY_SIZE(flags7));
TRACE("...\n");
- TRACE(" - dwNumFourCCCodes : %ld\n", lpcaps->dwNumFourCCCodes);
- TRACE(" - dwCurrVisibleOverlays : %ld\n", lpcaps->dwCurrVisibleOverlays);
- TRACE(" - dwMinOverlayStretch : %ld\n", lpcaps->dwMinOverlayStretch);
- TRACE(" - dwMaxOverlayStretch : %ld\n", lpcaps->dwMaxOverlayStretch);
+ TRACE(" - dwNumFourCCCodes : %lu\n", lpcaps->dwNumFourCCCodes);
+ TRACE(" - dwCurrVisibleOverlays : %lu\n", lpcaps->dwCurrVisibleOverlays);
+ TRACE(" - dwMinOverlayStretch : %lu\n", lpcaps->dwMinOverlayStretch);
+ TRACE(" - dwMaxOverlayStretch : %lu\n", lpcaps->dwMaxOverlayStretch);
TRACE("...\n");
TRACE(" - ddsCaps : "); DDRAW_dump_DDSCAPS2(&lpcaps->ddsCaps);
}
diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c
index 77b85118a4a..83c88f48691 100644
--- a/dlls/ddraw/viewport.c
+++ b/dlls/ddraw/viewport.c
@@ -181,9 +181,9 @@ void viewport_free_active_light_index(struct d3d_light *light)
*****************************************************************************/
static void _dump_D3DVIEWPORT(const D3DVIEWPORT *lpvp)
{
- TRACE(" - dwSize = %ld dwX = %ld dwY = %ld\n",
+ TRACE(" - dwSize = %lu dwX = %lu dwY = %lu\n",
lpvp->dwSize, lpvp->dwX, lpvp->dwY);
- TRACE(" - dwWidth = %ld dwHeight = %ld\n",
+ TRACE(" - dwWidth = %lu dwHeight = %lu\n",
lpvp->dwWidth, lpvp->dwHeight);
TRACE(" - dvScaleX = %f dvScaleY = %f\n",
lpvp->dvScaleX, lpvp->dvScaleY);
@@ -195,9 +195,9 @@ static void _dump_D3DVIEWPORT(const D3DVIEWPORT *lpvp)
static void _dump_D3DVIEWPORT2(const D3DVIEWPORT2 *lpvp)
{
- TRACE(" - dwSize = %ld dwX = %ld dwY = %ld\n",
+ TRACE(" - dwSize = %lu dwX = %lu dwY = %lu\n",
lpvp->dwSize, lpvp->dwX, lpvp->dwY);
- TRACE(" - dwWidth = %ld dwHeight = %ld\n",
+ TRACE(" - dwWidth = %lu dwHeight = %lu\n",
lpvp->dwWidth, lpvp->dwHeight);
TRACE(" - dvClipX = %f dvClipY = %f\n",
lpvp->dvClipX, lpvp->dvClipY);
--
2.35.1
3
2
[PATCH v2 1/4] wined3d: Clear the texture BO when loading textures into WINED3D_LOCATION_BUFFER.
by Zebediah Figura April 21, 2022
by Zebediah Figura April 21, 2022
April 21, 2022
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
v2: Restructure.
dlls/wined3d/texture.c | 51 +++++++++++++++++++++++++-----------------
1 file changed, 31 insertions(+), 20 deletions(-)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index eaa7cdf3ea5..0e4170f0022 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -799,23 +799,6 @@ BOOL wined3d_texture_load_location(struct wined3d_texture *texture,
return TRUE;
}
- if (current & WINED3D_LOCATION_CLEARED)
- {
- struct wined3d_bo_address addr;
-
- /* FIXME: Clear textures on the GPU if possible. */
-
- if (!wined3d_texture_prepare_location(texture, sub_resource_idx, context, WINED3D_LOCATION_SYSMEM))
- return FALSE;
- wined3d_texture_get_bo_address(texture, sub_resource_idx, &addr, WINED3D_LOCATION_SYSMEM);
- memset(addr.addr, 0, texture->sub_resources[sub_resource_idx].size);
- wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_SYSMEM);
- current |= WINED3D_LOCATION_SYSMEM;
-
- if (current & location)
- return TRUE;
- }
-
if (!current)
{
ERR("Sub-resource %u of texture %p does not have any up to date location.\n",
@@ -824,22 +807,50 @@ BOOL wined3d_texture_load_location(struct wined3d_texture *texture,
return wined3d_texture_load_location(texture, sub_resource_idx, context, location);
}
- if ((location & wined3d_texture_sysmem_locations) && (current & wined3d_texture_sysmem_locations))
+ if ((location & wined3d_texture_sysmem_locations)
+ && (current & (wined3d_texture_sysmem_locations | WINED3D_LOCATION_CLEARED)))
{
struct wined3d_bo_address source, destination;
struct wined3d_range range;
+ void *map_ptr;
if (!wined3d_texture_prepare_location(texture, sub_resource_idx, context, location))
return FALSE;
- wined3d_texture_get_bo_address(texture, sub_resource_idx, &source, (current & wined3d_texture_sysmem_locations));
wined3d_texture_get_bo_address(texture, sub_resource_idx, &destination, location);
range.offset = 0;
range.size = texture->sub_resources[sub_resource_idx].size;
- wined3d_context_copy_bo_address(context, &destination, &source, 1, &range);
+ if (current & WINED3D_LOCATION_CLEARED)
+ {
+ map_ptr = wined3d_context_map_bo_address(context, &destination, range.size,
+ WINED3D_MAP_WRITE | WINED3D_MAP_DISCARD);
+ memset(map_ptr, 0, range.size);
+ wined3d_context_unmap_bo_address(context, &destination, 1, &range);
+ }
+ else
+ {
+ wined3d_texture_get_bo_address(texture, sub_resource_idx,
+ &source, (current & wined3d_texture_sysmem_locations));
+ wined3d_context_copy_bo_address(context, &destination, &source, 1, &range);
+ }
ret = TRUE;
}
else
+ {
+ if (current & WINED3D_LOCATION_CLEARED)
+ {
+ struct wined3d_bo_address addr;
+
+ /* FIXME: Clear textures on the GPU if possible. */
+
+ if (!wined3d_texture_prepare_location(texture, sub_resource_idx, context, WINED3D_LOCATION_SYSMEM))
+ return FALSE;
+ wined3d_texture_get_bo_address(texture, sub_resource_idx, &addr, WINED3D_LOCATION_SYSMEM);
+ memset(addr.addr, 0, texture->sub_resources[sub_resource_idx].size);
+ wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_SYSMEM);
+ }
+
ret = texture->texture_ops->texture_load_location(texture, sub_resource_idx, context, location);
+ }
if (ret)
wined3d_texture_validate_location(texture, sub_resource_idx, location);
--
2.35.1
2
4
some improvement for createprocess tests:
- no longer assuming using Win7 console handles
- fixed regression introduced by shell-no-window type of consoles
- added some more tests around CreateProcess
V3 -> V4: removed skip part
Marvin will report errors for the 3 tests, until this bug is fixed
https://bugs.winehq.org/show_bug.cgi?id=52847
I'll let the NLS Guru(s) take care of it
This testbot run (all patches in this serie + ugly UTF8 support in TranslateCharsetInfo
to partially implement) show that fixing above bug is the only remaining
generator of failures
https://testbot.winehq.org/JobDetails.pl?Key=113102S
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
---
Eric Pouech (3):
dlls/kernel32/tests: let the console tests pass if current console is shell-no-window
dlls/kernel32/tests: adapt dup console handle test to non Win7 handles
dlls/kernel32/tests: test when passing non inheritable handles in CreateProcess
dlls/kernel32/tests/process.c | 115 +++++++++++++++++++++++++++++-----
1 file changed, 100 insertions(+), 15 deletions(-)
2
6
[PATCH v2 4/4] winepulse: Implement Wow64 entry points in the Unix library.
by Huw Davies April 21, 2022
by Huw Davies April 21, 2022
April 21, 2022
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winepulse.drv/pulse.c | 383 +++++++++++++++++++++++++++++++++++++
1 file changed, 383 insertions(+)
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c
index 9a205915b70..f685e2047e7 100644
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -2239,3 +2239,386 @@ const unixlib_entry_t __wine_unix_call_funcs[] =
pulse_is_started,
pulse_get_prop_value,
};
+
+#ifdef _WIN64
+
+typedef UINT PTR32;
+
+static NTSTATUS pulse_wow64_main_loop(void *args)
+{
+ struct
+ {
+ PTR32 event;
+ } *params32 = args;
+ struct main_loop_params params =
+ {
+ .event = ULongToHandle(params32->event)
+ };
+ return pulse_main_loop(¶ms);
+}
+
+static NTSTATUS pulse_wow64_get_endpoint_ids(void *args)
+{
+ struct
+ {
+ EDataFlow flow;
+ PTR32 endpoints;
+ unsigned int size;
+ HRESULT result;
+ unsigned int num;
+ unsigned int default_idx;
+ } *params32 = args;
+ struct get_endpoint_ids_params params =
+ {
+ .flow = params32->flow,
+ .endpoints = ULongToPtr(params32->endpoints),
+ .size = params32->size
+ };
+ pulse_get_endpoint_ids(¶ms);
+ params32->size = params.size;
+ params32->result = params.result;
+ params32->num = params.num;
+ params32->default_idx = params.default_idx;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_create_stream(void *args)
+{
+ struct
+ {
+ PTR32 name;
+ PTR32 pulse_name;
+ EDataFlow dataflow;
+ AUDCLNT_SHAREMODE mode;
+ DWORD flags;
+ REFERENCE_TIME duration;
+ PTR32 fmt;
+ HRESULT result;
+ PTR32 channel_count;
+ PTR32 stream;
+ } *params32 = args;
+ struct create_stream_params params =
+ {
+ .name = ULongToPtr(params32->name),
+ .pulse_name = ULongToPtr(params32->pulse_name),
+ .dataflow = params32->dataflow,
+ .mode = params32->mode,
+ .flags = params32->flags,
+ .duration = params32->duration,
+ .fmt = ULongToPtr(params32->fmt),
+ .channel_count = ULongToPtr(params32->channel_count),
+ .stream = ULongToPtr(params32->stream)
+ };
+ pulse_create_stream(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_release_stream(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ PTR32 timer;
+ HRESULT result;
+ } *params32 = args;
+ struct release_stream_params params =
+ {
+ .stream = params32->stream,
+ .timer = ULongToHandle(params32->timer)
+ };
+ pulse_release_stream(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_render_buffer(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ UINT32 frames;
+ HRESULT result;
+ PTR32 data;
+ } *params32 = args;
+ BYTE *data = NULL;
+ struct get_render_buffer_params params =
+ {
+ .stream = params32->stream,
+ .frames = params32->frames,
+ .data = &data
+ };
+ pulse_get_render_buffer(¶ms);
+ params32->result = params.result;
+ *(unsigned int *)ULongToPtr(params32->data) = PtrToUlong(data);
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_capture_buffer(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ HRESULT result;
+ PTR32 data;
+ PTR32 frames;
+ PTR32 flags;
+ PTR32 devpos;
+ PTR32 qpcpos;
+ } *params32 = args;
+ BYTE *data = NULL;
+ struct get_capture_buffer_params params =
+ {
+ .stream = params32->stream,
+ .data = &data,
+ .frames = ULongToPtr(params32->frames),
+ .flags = ULongToPtr(params32->flags),
+ .devpos = ULongToPtr(params32->devpos),
+ .qpcpos = ULongToPtr(params32->qpcpos)
+ };
+ pulse_get_capture_buffer(¶ms);
+ params32->result = params.result;
+ *(unsigned int *)ULongToPtr(params32->data) = PtrToUlong(data);
+ return STATUS_SUCCESS;
+};
+
+static NTSTATUS pulse_wow64_get_buffer_size(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ HRESULT result;
+ PTR32 size;
+ } *params32 = args;
+ struct get_buffer_size_params params =
+ {
+ .stream = params32->stream,
+ .size = ULongToPtr(params32->size)
+ };
+ pulse_get_buffer_size(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_latency(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ HRESULT result;
+ PTR32 latency;
+ } *params32 = args;
+ struct get_latency_params params =
+ {
+ .stream = params32->stream,
+ .latency = ULongToPtr(params32->latency)
+ };
+ pulse_get_latency(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_current_padding(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ HRESULT result;
+ PTR32 padding;
+ } *params32 = args;
+ struct get_current_padding_params params =
+ {
+ .stream = params32->stream,
+ .padding = ULongToPtr(params32->padding)
+ };
+ pulse_get_current_padding(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_next_packet_size(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ HRESULT result;
+ PTR32 frames;
+ } *params32 = args;
+ struct get_next_packet_size_params params =
+ {
+ .stream = params32->stream,
+ .frames = ULongToPtr(params32->frames)
+ };
+ pulse_get_next_packet_size(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_frequency(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ HRESULT result;
+ PTR32 freq;
+ } *params32 = args;
+ struct get_frequency_params params =
+ {
+ .stream = params32->stream,
+ .freq = ULongToPtr(params32->freq)
+ };
+ pulse_get_frequency(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_position(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ BOOL device;
+ HRESULT result;
+ PTR32 pos;
+ PTR32 qpctime;
+ } *params32 = args;
+ struct get_position_params params =
+ {
+ .stream = params32->stream,
+ .device = params32->device,
+ .pos = ULongToPtr(params32->pos),
+ .qpctime = ULongToPtr(params32->qpctime)
+ };
+ pulse_get_position(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_set_volumes(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ float master_volume;
+ PTR32 volumes;
+ PTR32 session_volumes;
+ } *params32 = args;
+ struct set_volumes_params params =
+ {
+ .stream = params32->stream,
+ .master_volume = params32->master_volume,
+ .volumes = ULongToPtr(params32->volumes),
+ .session_volumes = ULongToPtr(params32->session_volumes)
+ };
+ return pulse_set_volumes(¶ms);
+}
+
+static NTSTATUS pulse_wow64_set_event_handle(void *args)
+{
+ struct
+ {
+ stream_handle stream;
+ PTR32 event;
+ HRESULT result;
+ } *params32 = args;
+ struct set_event_handle_params params =
+ {
+ .stream = params32->stream,
+ .event = ULongToHandle(params32->event)
+ };
+ pulse_set_event_handle(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_test_connect(void *args)
+{
+ struct
+ {
+ PTR32 name;
+ HRESULT result;
+ PTR32 config;
+ } *params32 = args;
+ struct test_connect_params params =
+ {
+ .name = ULongToPtr(params32->name),
+ .config = ULongToPtr(params32->config), /* struct pulse_config is identical */
+ };
+ pulse_test_connect(¶ms);
+ params32->result = params.result;
+ return STATUS_SUCCESS;
+}
+
+static NTSTATUS pulse_wow64_get_prop_value(void *args)
+{
+ struct
+ {
+ PTR32 pulse_name;
+ PTR32 guid;
+ PTR32 prop;
+ EDataFlow flow;
+ HRESULT result;
+ VARTYPE vt;
+ union
+ {
+ WCHAR wstr[128];
+ ULONG ulVal;
+ };
+ } *params32 = args;
+ struct get_prop_value_params params =
+ {
+ .pulse_name = ULongToPtr(params32->pulse_name),
+ .guid = ULongToPtr(params32->guid),
+ .prop = ULongToPtr(params32->prop),
+ .flow = params32->flow,
+ };
+ pulse_get_prop_value(¶ms);
+ params32->result = params.result;
+ params32->vt = params.vt;
+ if (SUCCEEDED(params.result))
+ {
+ switch (params.vt)
+ {
+ case VT_UI4:
+ params32->ulVal = params.ulVal;
+ break;
+ case VT_LPWSTR:
+ wcscpy(params32->wstr, params.wstr);
+ break;
+ default:
+ FIXME("Unhandled vt %04x\n", params.vt);
+ }
+ }
+ return STATUS_SUCCESS;
+}
+
+const unixlib_entry_t __wine_unix_call_wow64_funcs[] =
+{
+ pulse_process_attach,
+ pulse_process_detach,
+ pulse_wow64_main_loop,
+ pulse_wow64_get_endpoint_ids,
+ pulse_wow64_create_stream,
+ pulse_wow64_release_stream,
+ pulse_start,
+ pulse_stop,
+ pulse_reset,
+ pulse_timer_loop,
+ pulse_wow64_get_render_buffer,
+ pulse_release_render_buffer,
+ pulse_wow64_get_capture_buffer,
+ pulse_release_capture_buffer,
+ pulse_wow64_get_buffer_size,
+ pulse_wow64_get_latency,
+ pulse_wow64_get_current_padding,
+ pulse_wow64_get_next_packet_size,
+ pulse_wow64_get_frequency,
+ pulse_wow64_get_position,
+ pulse_wow64_set_volumes,
+ pulse_wow64_set_event_handle,
+ pulse_wow64_test_connect,
+ pulse_is_started,
+ pulse_wow64_get_prop_value,
+};
+
+#endif /* _WIN64 */
--
2.25.1
2
1
[PATCH v2 3/4] winepulse: Limit Wow64 buffer allocations to 32-bit addresses.
by Huw Davies April 21, 2022
by Huw Davies April 21, 2022
April 21, 2022
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winepulse.drv/pulse.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c
index 06047a21944..9a205915b70 100644
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -981,6 +981,15 @@ static HRESULT pulse_stream_connect(struct pulse_stream *stream, const char *pul
return S_OK;
}
+static ULONG_PTR zero_bits(void)
+{
+#ifdef _WIN64
+ return !NtCurrentTeb()->WowTebOffset ? 0 : 0x7fffffff;
+#else
+ return 0;
+#endif
+}
+
static NTSTATUS pulse_create_stream(void *args)
{
struct create_stream_params *params = args;
@@ -1039,7 +1048,7 @@ static NTSTATUS pulse_create_stream(void *args)
size = stream->real_bufsize_bytes =
stream->bufsize_frames * 2 * pa_frame_size(&stream->ss);
if (NtAllocateVirtualMemory(GetCurrentProcess(), (void **)&stream->local_buffer,
- 0, &size, MEM_COMMIT, PAGE_READWRITE))
+ zero_bits(), &size, MEM_COMMIT, PAGE_READWRITE))
hr = E_OUTOFMEMORY;
} else {
UINT32 i, capture_packets;
@@ -1053,7 +1062,7 @@ static NTSTATUS pulse_create_stream(void *args)
size = stream->real_bufsize_bytes + capture_packets * sizeof(ACPacket);
if (NtAllocateVirtualMemory(GetCurrentProcess(), (void **)&stream->local_buffer,
- 0, &size, MEM_COMMIT, PAGE_READWRITE))
+ zero_bits(), &size, MEM_COMMIT, PAGE_READWRITE))
hr = E_OUTOFMEMORY;
else {
ACPacket *cur_packet = (ACPacket*)((char*)stream->local_buffer + stream->real_bufsize_bytes);
@@ -1697,7 +1706,7 @@ static BOOL alloc_tmp_buffer(struct pulse_stream *stream, SIZE_T bytes)
stream->tmp_buffer_bytes = 0;
}
if (NtAllocateVirtualMemory(GetCurrentProcess(), (void **)&stream->tmp_buffer,
- 0, &bytes, MEM_COMMIT, PAGE_READWRITE))
+ zero_bits(), &bytes, MEM_COMMIT, PAGE_READWRITE))
return FALSE;
stream->tmp_buffer_bytes = bytes;
--
2.25.1
2
1
[PATCH v2 2/4] winepulse: Return offsets rather than ptrs to the strings.
by Huw Davies April 21, 2022
by Huw Davies April 21, 2022
April 21, 2022
This will make the Wow64 syscall rather simpler.
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winepulse.drv/mmdevdrv.c | 9 ++++++---
dlls/winepulse.drv/pulse.c | 17 ++++++++---------
dlls/winepulse.drv/unixlib.h | 4 ++--
3 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
index 4a0ee70ee92..18009435f1f 100644
--- a/dlls/winepulse.drv/mmdevdrv.c
+++ b/dlls/winepulse.drv/mmdevdrv.c
@@ -457,13 +457,16 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids_out, GUID **ke
}
for (i = 0; i < params.num; i++) {
- unsigned int size = (wcslen(params.endpoints[i].name) + 1) * sizeof(WCHAR);
+ WCHAR *name = (WCHAR *)((char *)params.endpoints + params.endpoints[i].name);
+ char *pulse_name = (char *)params.endpoints + params.endpoints[i].pulse_name;
+ unsigned int size = (wcslen(name) + 1) * sizeof(WCHAR);
+
if (!(ids[i] = HeapAlloc(GetProcessHeap(), 0, size))) {
params.result = E_OUTOFMEMORY;
break;
}
- memcpy(ids[i], params.endpoints[i].name, size);
- get_device_guid(drv_key, flow, params.endpoints[i].pulse_name, &guids[i]);
+ memcpy(ids[i], name, size);
+ get_device_guid(drv_key, flow, pulse_name, &guids[i]);
}
if (drv_key)
RegCloseKey(drv_key);
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c
index 6312ac58ebc..06047a21944 100644
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -253,12 +253,11 @@ static NTSTATUS pulse_get_endpoint_ids(void *args)
struct list *list = (params->flow == eRender) ? &g_phys_speakers : &g_phys_sources;
struct endpoint *endpoint = params->endpoints;
DWORD len, name_len, needed;
+ unsigned int offset;
PhysDevice *dev;
- char *ptr;
params->num = list_count(list);
- needed = params->num * sizeof(*params->endpoints);
- ptr = (char*)(endpoint + params->num);
+ offset = needed = params->num * sizeof(*params->endpoints);
LIST_FOR_EACH_ENTRY(dev, list, PhysDevice, entry) {
name_len = lstrlenW(dev->name) + 1;
@@ -266,12 +265,12 @@ static NTSTATUS pulse_get_endpoint_ids(void *args)
needed += name_len * sizeof(WCHAR) + ((len + 1) & ~1);
if (needed <= params->size) {
- endpoint->name = (WCHAR*)ptr;
- memcpy(endpoint->name, dev->name, name_len * sizeof(WCHAR));
- ptr += name_len * sizeof(WCHAR);
- endpoint->pulse_name = ptr;
- memcpy(endpoint->pulse_name, dev->pulse_name, len);
- ptr += (len + 1) & ~1;
+ endpoint->name = offset;
+ memcpy((char *)params->endpoints + offset, dev->name, name_len * sizeof(WCHAR));
+ offset += name_len * sizeof(WCHAR);
+ endpoint->pulse_name = offset;
+ memcpy((char *)params->endpoints + offset, dev->pulse_name, len);
+ offset += (len + 1) & ~1;
endpoint++;
}
}
diff --git a/dlls/winepulse.drv/unixlib.h b/dlls/winepulse.drv/unixlib.h
index 4780943c4eb..f224f26c909 100644
--- a/dlls/winepulse.drv/unixlib.h
+++ b/dlls/winepulse.drv/unixlib.h
@@ -41,8 +41,8 @@ struct pulse_config
struct endpoint
{
- WCHAR *name;
- char *pulse_name;
+ unsigned int name;
+ unsigned int pulse_name;
};
struct main_loop_params
--
2.25.1
2
1
April 21, 2022
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winepulse.drv/mmdevdrv.c | 8 +++---
dlls/winepulse.drv/pulse.c | 46 ++++++++++++++++++++---------------
dlls/winepulse.drv/unixlib.h | 40 +++++++++++++++---------------
3 files changed, 50 insertions(+), 44 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
index 7b5ef7cfe39..4a0ee70ee92 100644
--- a/dlls/winepulse.drv/mmdevdrv.c
+++ b/dlls/winepulse.drv/mmdevdrv.c
@@ -156,7 +156,7 @@ struct ACImpl {
UINT32 channel_count;
HANDLE timer;
- struct pulse_stream *pulse_stream;
+ stream_handle pulse_stream;
AudioSession *session;
AudioSessionWrapper *session_wrapper;
@@ -228,7 +228,7 @@ static void pulse_call(enum unix_funcs code, void *params)
assert(!status);
}
-static void pulse_release_stream(struct pulse_stream *stream, HANDLE timer)
+static void pulse_release_stream(stream_handle stream, HANDLE timer)
{
struct release_stream_params params;
params.stream = stream;
@@ -668,7 +668,7 @@ static ULONG WINAPI AudioClient_Release(IAudioClient3 *iface)
if (!ref) {
if (This->pulse_stream) {
pulse_release_stream(This->pulse_stream, This->timer);
- This->pulse_stream = NULL;
+ This->pulse_stream = 0;
EnterCriticalSection(&session_cs);
list_remove(&This->entry);
LeaveCriticalSection(&session_cs);
@@ -822,7 +822,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
ACImpl *This = impl_from_IAudioClient3(iface);
struct create_stream_params params;
unsigned int i, channel_count;
- struct pulse_stream *stream;
+ stream_handle stream;
char *name;
HRESULT hr;
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c
index 901e054f6d0..6312ac58ebc 100644
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -131,6 +131,11 @@ static void pulse_broadcast(void)
pthread_cond_broadcast(&pulse_cond);
}
+static struct pulse_stream *handle_get_stream(stream_handle h)
+{
+ return (struct pulse_stream *)(UINT_PTR)h;
+}
+
static void dump_attr(const pa_buffer_attr *attr)
{
TRACE("maxlength: %u\n", attr->maxlength);
@@ -1067,7 +1072,7 @@ static NTSTATUS pulse_create_stream(void *args)
}
*params->channel_count = stream->ss.channels;
- *params->stream = stream;
+ *params->stream = (stream_handle)(UINT_PTR)stream;
exit:
if (FAILED(params->result = hr)) {
@@ -1086,7 +1091,7 @@ exit:
static NTSTATUS pulse_release_stream(void *args)
{
struct release_stream_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
SIZE_T size;
if(params->timer) {
@@ -1407,7 +1412,7 @@ static void pulse_read(struct pulse_stream *stream)
static NTSTATUS pulse_timer_loop(void *args)
{
struct timer_loop_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
LARGE_INTEGER delay;
pa_usec_t last_time;
UINT32 adv_bytes;
@@ -1515,7 +1520,7 @@ static NTSTATUS pulse_timer_loop(void *args)
static NTSTATUS pulse_start(void *args)
{
struct start_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
int success;
pa_operation *o;
@@ -1571,7 +1576,7 @@ static NTSTATUS pulse_start(void *args)
static NTSTATUS pulse_stop(void *args)
{
struct stop_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pa_operation *o;
int success;
@@ -1614,7 +1619,7 @@ static NTSTATUS pulse_stop(void *args)
static NTSTATUS pulse_reset(void *args)
{
struct reset_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -1720,7 +1725,7 @@ static UINT32 pulse_capture_padding(struct pulse_stream *stream)
static NTSTATUS pulse_get_render_buffer(void *args)
{
struct get_render_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
size_t bytes;
UINT32 wri_offs_bytes;
@@ -1799,7 +1804,7 @@ static void pulse_wrap_buffer(struct pulse_stream *stream, BYTE *buffer, UINT32
static NTSTATUS pulse_release_render_buffer(void *args)
{
struct release_render_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
UINT32 written_bytes;
BYTE *buffer;
@@ -1856,7 +1861,7 @@ static NTSTATUS pulse_release_render_buffer(void *args)
static NTSTATUS pulse_get_capture_buffer(void *args)
{
struct get_capture_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
ACPacket *packet;
pulse_lock();
@@ -1902,7 +1907,7 @@ static NTSTATUS pulse_get_capture_buffer(void *args)
static NTSTATUS pulse_release_capture_buffer(void *args)
{
struct release_capture_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!stream->locked && params->done)
@@ -1937,14 +1942,15 @@ static NTSTATUS pulse_release_capture_buffer(void *args)
static NTSTATUS pulse_get_buffer_size(void *args)
{
struct get_buffer_size_params *params = args;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
params->result = S_OK;
pulse_lock();
- if (!pulse_stream_valid(params->stream))
+ if (!pulse_stream_valid(stream))
params->result = AUDCLNT_E_DEVICE_INVALIDATED;
else
- *params->size = params->stream->bufsize_frames;
+ *params->size = stream->bufsize_frames;
pulse_unlock();
return STATUS_SUCCESS;
@@ -1953,7 +1959,7 @@ static NTSTATUS pulse_get_buffer_size(void *args)
static NTSTATUS pulse_get_latency(void *args)
{
struct get_latency_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
const pa_buffer_attr *attr;
REFERENCE_TIME lat;
@@ -1978,7 +1984,7 @@ static NTSTATUS pulse_get_latency(void *args)
static NTSTATUS pulse_get_current_padding(void *args)
{
struct get_current_padding_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -2003,7 +2009,7 @@ static NTSTATUS pulse_get_current_padding(void *args)
static NTSTATUS pulse_get_next_packet_size(void *args)
{
struct get_next_packet_size_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
pulse_capture_padding(stream);
@@ -2020,7 +2026,7 @@ static NTSTATUS pulse_get_next_packet_size(void *args)
static NTSTATUS pulse_get_frequency(void *args)
{
struct get_frequency_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -2041,7 +2047,7 @@ static NTSTATUS pulse_get_frequency(void *args)
static NTSTATUS pulse_get_position(void *args)
{
struct get_position_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -2079,7 +2085,7 @@ static NTSTATUS pulse_get_position(void *args)
static NTSTATUS pulse_set_volumes(void *args)
{
struct set_volumes_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
unsigned int i;
for (i = 0; i < stream->ss.channels; i++)
@@ -2091,7 +2097,7 @@ static NTSTATUS pulse_set_volumes(void *args)
static NTSTATUS pulse_set_event_handle(void *args)
{
struct set_event_handle_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
HRESULT hr = S_OK;
pulse_lock();
@@ -2112,7 +2118,7 @@ static NTSTATUS pulse_set_event_handle(void *args)
static NTSTATUS pulse_is_started(void *args)
{
struct is_started_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
params->started = pulse_stream_valid(stream) && stream->started;
diff --git a/dlls/winepulse.drv/unixlib.h b/dlls/winepulse.drv/unixlib.h
index 9089e2829fc..4780943c4eb 100644
--- a/dlls/winepulse.drv/unixlib.h
+++ b/dlls/winepulse.drv/unixlib.h
@@ -21,7 +21,7 @@
#define MAX_PULSE_NAME_LEN 256
-struct pulse_stream;
+typedef UINT64 stream_handle;
enum phys_device_bus_type {
phys_device_bus_invalid = -1,
@@ -71,42 +71,42 @@ struct create_stream_params
const WAVEFORMATEX *fmt;
HRESULT result;
UINT32 *channel_count;
- struct pulse_stream **stream;
+ stream_handle *stream;
};
struct release_stream_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HANDLE timer;
HRESULT result;
};
struct start_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
};
struct stop_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
};
struct reset_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
};
struct timer_loop_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
};
struct get_render_buffer_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
UINT32 frames;
HRESULT result;
BYTE **data;
@@ -114,7 +114,7 @@ struct get_render_buffer_params
struct release_render_buffer_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
UINT32 written_frames;
DWORD flags;
HRESULT result;
@@ -122,7 +122,7 @@ struct release_render_buffer_params
struct get_capture_buffer_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
BYTE **data;
UINT32 *frames;
@@ -133,49 +133,49 @@ struct get_capture_buffer_params
struct release_capture_buffer_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
BOOL done;
HRESULT result;
};
struct get_buffer_size_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
UINT32 *size;
};
struct get_latency_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
REFERENCE_TIME *latency;
};
struct get_current_padding_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
UINT32 *padding;
};
struct get_next_packet_size_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
UINT32 *frames;
};
struct get_frequency_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HRESULT result;
UINT64 *freq;
};
struct get_position_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
BOOL device;
HRESULT result;
UINT64 *pos;
@@ -184,7 +184,7 @@ struct get_position_params
struct set_volumes_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
float master_volume;
const float *volumes;
const float *session_volumes;
@@ -192,7 +192,7 @@ struct set_volumes_params
struct set_event_handle_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
HANDLE event;
HRESULT result;
};
@@ -206,7 +206,7 @@ struct test_connect_params
struct is_started_params
{
- struct pulse_stream *stream;
+ stream_handle stream;
BOOL started;
};
--
2.25.1
2
1
April 21, 2022
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/winepulse.drv/mmdevdrv.c | 8 +--
dlls/winepulse.drv/pulse.c | 122 ++++++++++++++++++++++++++++------
dlls/winepulse.drv/unixlib.h | 40 ++++++-----
3 files changed, 125 insertions(+), 45 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
index 7b5ef7cfe39..96b8b28d1b5 100644
--- a/dlls/winepulse.drv/mmdevdrv.c
+++ b/dlls/winepulse.drv/mmdevdrv.c
@@ -156,7 +156,7 @@ struct ACImpl {
UINT32 channel_count;
HANDLE timer;
- struct pulse_stream *pulse_stream;
+ unsigned int pulse_stream;
AudioSession *session;
AudioSessionWrapper *session_wrapper;
@@ -228,7 +228,7 @@ static void pulse_call(enum unix_funcs code, void *params)
assert(!status);
}
-static void pulse_release_stream(struct pulse_stream *stream, HANDLE timer)
+static void pulse_release_stream(unsigned int stream, HANDLE timer)
{
struct release_stream_params params;
params.stream = stream;
@@ -668,7 +668,7 @@ static ULONG WINAPI AudioClient_Release(IAudioClient3 *iface)
if (!ref) {
if (This->pulse_stream) {
pulse_release_stream(This->pulse_stream, This->timer);
- This->pulse_stream = NULL;
+ This->pulse_stream = 0;
EnterCriticalSection(&session_cs);
list_remove(&This->entry);
LeaveCriticalSection(&session_cs);
@@ -822,7 +822,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface,
ACImpl *This = impl_from_IAudioClient3(iface);
struct create_stream_params params;
unsigned int i, channel_count;
- struct pulse_stream *stream;
+ unsigned int stream;
char *name;
HRESULT hr;
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c
index 901e054f6d0..5e3ddcc9b6e 100644
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -108,6 +108,18 @@ static const REFERENCE_TIME DefaultPeriod = 100000;
static pthread_mutex_t pulse_mutex;
static pthread_cond_t pulse_cond = PTHREAD_COND_INITIALIZER;
+struct stream_entry
+{
+ union
+ {
+ struct pulse_stream *stream;
+ unsigned int next_free;
+ };
+};
+static struct stream_entry *handles;
+static unsigned int next_free = ~0u, next_unused, num_handles;
+static pthread_mutex_t handle_lock = PTHREAD_MUTEX_INITIALIZER;
+
UINT8 mult_alaw_sample(UINT8, float);
UINT8 mult_ulaw_sample(UINT8, float);
@@ -131,6 +143,73 @@ static void pulse_broadcast(void)
pthread_cond_broadcast(&pulse_cond);
}
+static unsigned int handle_alloc(struct pulse_stream *stream)
+{
+ unsigned int index, count;
+ struct stream_entry *new_handles;
+
+ pthread_mutex_lock(&handle_lock);
+
+ index = next_free;
+ if(index != ~0u) next_free = handles[index].next_free;
+ else if(next_unused < num_handles) index = next_unused++;
+ else{
+ count = max(num_handles * 2, 256);
+ new_handles = realloc(handles, count);
+ if(!new_handles){
+ pthread_mutex_unlock(&handle_lock);
+ return 0;
+ }
+ handles = new_handles;
+ num_handles = count;
+ index = next_unused++;
+ }
+ handles[index].stream = stream;
+
+ pthread_mutex_unlock(&handle_lock);
+
+ return index + 1;
+}
+
+static struct stream_entry *handle_entry(unsigned int h)
+{
+ if(!h || h > num_handles){
+ ERR("Invalid handle %08x\n", h);
+ return NULL;
+ }
+ return handles + h - 1;
+}
+
+static void handle_free(unsigned int h)
+{
+ struct stream_entry *entry;
+
+ pthread_mutex_lock(&handle_lock);
+
+ entry = handle_entry(h);
+ if(entry){
+ entry->next_free = next_free;
+ next_free = h - 1;
+ }
+
+ pthread_mutex_unlock(&handle_lock);
+}
+
+static struct pulse_stream *handle_get_stream(unsigned int h)
+{
+ struct stream_entry *entry;
+ struct pulse_stream *stream = NULL;
+
+ pthread_mutex_lock(&handle_lock);
+
+ entry = handle_entry(h);
+ if(entry) stream = entry->stream;
+
+ pthread_mutex_unlock(&handle_lock);
+
+ return stream;
+}
+
static void dump_attr(const pa_buffer_attr *attr)
{
TRACE("maxlength: %u\n", attr->maxlength);
@@ -1067,7 +1146,8 @@ static NTSTATUS pulse_create_stream(void *args)
}
*params->channel_count = stream->ss.channels;
- *params->stream = stream;
+ *params->stream = handle_alloc(stream);
+ if (!*params->stream) params->result = E_OUTOFMEMORY;
exit:
if (FAILED(params->result = hr)) {
@@ -1086,7 +1166,7 @@ exit:
static NTSTATUS pulse_release_stream(void *args)
{
struct release_stream_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
SIZE_T size;
if(params->timer) {
@@ -1114,6 +1194,7 @@ static NTSTATUS pulse_release_stream(void *args)
NtFreeVirtualMemory(GetCurrentProcess(), (void **)&stream->local_buffer,
&size, MEM_RELEASE);
}
+ handle_free(params->stream);
free(stream->peek_buffer);
free(stream);
return STATUS_SUCCESS;
@@ -1407,7 +1488,7 @@ static void pulse_read(struct pulse_stream *stream)
static NTSTATUS pulse_timer_loop(void *args)
{
struct timer_loop_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
LARGE_INTEGER delay;
pa_usec_t last_time;
UINT32 adv_bytes;
@@ -1515,7 +1596,7 @@ static NTSTATUS pulse_timer_loop(void *args)
static NTSTATUS pulse_start(void *args)
{
struct start_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
int success;
pa_operation *o;
@@ -1571,7 +1652,7 @@ static NTSTATUS pulse_start(void *args)
static NTSTATUS pulse_stop(void *args)
{
struct stop_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pa_operation *o;
int success;
@@ -1614,7 +1695,7 @@ static NTSTATUS pulse_stop(void *args)
static NTSTATUS pulse_reset(void *args)
{
struct reset_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -1720,7 +1801,7 @@ static UINT32 pulse_capture_padding(struct pulse_stream *stream)
static NTSTATUS pulse_get_render_buffer(void *args)
{
struct get_render_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
size_t bytes;
UINT32 wri_offs_bytes;
@@ -1799,7 +1880,7 @@ static void pulse_wrap_buffer(struct pulse_stream *stream, BYTE *buffer, UINT32
static NTSTATUS pulse_release_render_buffer(void *args)
{
struct release_render_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
UINT32 written_bytes;
BYTE *buffer;
@@ -1856,7 +1937,7 @@ static NTSTATUS pulse_release_render_buffer(void *args)
static NTSTATUS pulse_get_capture_buffer(void *args)
{
struct get_capture_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
ACPacket *packet;
pulse_lock();
@@ -1902,7 +1983,7 @@ static NTSTATUS pulse_get_capture_buffer(void *args)
static NTSTATUS pulse_release_capture_buffer(void *args)
{
struct release_capture_buffer_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!stream->locked && params->done)
@@ -1937,14 +2018,15 @@ static NTSTATUS pulse_release_capture_buffer(void *args)
static NTSTATUS pulse_get_buffer_size(void *args)
{
struct get_buffer_size_params *params = args;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
params->result = S_OK;
pulse_lock();
- if (!pulse_stream_valid(params->stream))
+ if (!pulse_stream_valid(stream))
params->result = AUDCLNT_E_DEVICE_INVALIDATED;
else
- *params->size = params->stream->bufsize_frames;
+ *params->size = stream->bufsize_frames;
pulse_unlock();
return STATUS_SUCCESS;
@@ -1953,7 +2035,7 @@ static NTSTATUS pulse_get_buffer_size(void *args)
static NTSTATUS pulse_get_latency(void *args)
{
struct get_latency_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
const pa_buffer_attr *attr;
REFERENCE_TIME lat;
@@ -1978,7 +2060,7 @@ static NTSTATUS pulse_get_latency(void *args)
static NTSTATUS pulse_get_current_padding(void *args)
{
struct get_current_padding_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -2003,7 +2085,7 @@ static NTSTATUS pulse_get_current_padding(void *args)
static NTSTATUS pulse_get_next_packet_size(void *args)
{
struct get_next_packet_size_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
pulse_capture_padding(stream);
@@ -2020,7 +2102,7 @@ static NTSTATUS pulse_get_next_packet_size(void *args)
static NTSTATUS pulse_get_frequency(void *args)
{
struct get_frequency_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -2041,7 +2123,7 @@ static NTSTATUS pulse_get_frequency(void *args)
static NTSTATUS pulse_get_position(void *args)
{
struct get_position_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
if (!pulse_stream_valid(stream))
@@ -2079,7 +2161,7 @@ static NTSTATUS pulse_get_position(void *args)
static NTSTATUS pulse_set_volumes(void *args)
{
struct set_volumes_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
unsigned int i;
for (i = 0; i < stream->ss.channels; i++)
@@ -2091,7 +2173,7 @@ static NTSTATUS pulse_set_volumes(void *args)
static NTSTATUS pulse_set_event_handle(void *args)
{
struct set_event_handle_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
HRESULT hr = S_OK;
pulse_lock();
@@ -2112,7 +2194,7 @@ static NTSTATUS pulse_set_event_handle(void *args)
static NTSTATUS pulse_is_started(void *args)
{
struct is_started_params *params = args;
- struct pulse_stream *stream = params->stream;
+ struct pulse_stream *stream = handle_get_stream(params->stream);
pulse_lock();
params->started = pulse_stream_valid(stream) && stream->started;
diff --git a/dlls/winepulse.drv/unixlib.h b/dlls/winepulse.drv/unixlib.h
index 9089e2829fc..e09362f0751 100644
--- a/dlls/winepulse.drv/unixlib.h
+++ b/dlls/winepulse.drv/unixlib.h
@@ -21,8 +21,6 @@
#define MAX_PULSE_NAME_LEN 256
-struct pulse_stream;
-
enum phys_device_bus_type {
phys_device_bus_invalid = -1,
phys_device_bus_pci,
@@ -71,42 +69,42 @@ struct create_stream_params
const WAVEFORMATEX *fmt;
HRESULT result;
UINT32 *channel_count;
- struct pulse_stream **stream;
+ unsigned int *stream;
};
struct release_stream_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HANDLE timer;
HRESULT result;
};
struct start_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
};
struct stop_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
};
struct reset_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
};
struct timer_loop_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
};
struct get_render_buffer_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
UINT32 frames;
HRESULT result;
BYTE **data;
@@ -114,7 +112,7 @@ struct get_render_buffer_params
struct release_render_buffer_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
UINT32 written_frames;
DWORD flags;
HRESULT result;
@@ -122,7 +120,7 @@ struct release_render_buffer_params
struct get_capture_buffer_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
BYTE **data;
UINT32 *frames;
@@ -133,49 +131,49 @@ struct get_capture_buffer_params
struct release_capture_buffer_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
BOOL done;
HRESULT result;
};
struct get_buffer_size_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
UINT32 *size;
};
struct get_latency_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
REFERENCE_TIME *latency;
};
struct get_current_padding_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
UINT32 *padding;
};
struct get_next_packet_size_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
UINT32 *frames;
};
struct get_frequency_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HRESULT result;
UINT64 *freq;
};
struct get_position_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
BOOL device;
HRESULT result;
UINT64 *pos;
@@ -184,7 +182,7 @@ struct get_position_params
struct set_volumes_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
float master_volume;
const float *volumes;
const float *session_volumes;
@@ -192,7 +190,7 @@ struct set_volumes_params
struct set_event_handle_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
HANDLE event;
HRESULT result;
};
@@ -206,7 +204,7 @@ struct test_connect_params
struct is_started_params
{
- struct pulse_stream *stream;
+ unsigned int stream;
BOOL started;
};
--
2.25.1
2
2