[PATCH 1/2] wined3d: Introduce wined3d_output_get_ordinal().
Zhiyi Zhang
zzhang at codeweavers.com
Fri Nov 13 01:49:26 CST 2020
Secondhand Lands calls d3d9_device_GetDeviceCaps() frequently. Introduce a wined3d_output_get_ordinal()
to get output ordinal only instead of using the more expensive wined3d_output_get_desc().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50096
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/d3d9/device.c | 16 ++++------------
dlls/wined3d/directx.c | 8 +++++++-
dlls/wined3d/wined3d.spec | 1 +
include/wine/wined3d.h | 2 +-
4 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index fec631e0e67..44a4ecdebc1 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -378,10 +378,8 @@ void d3d9_caps_from_wined3dcaps(const struct d3d9 *d3d9, unsigned int adapter_or
D3DPTFILTERCAPS_MAGFLINEAR |D3DPTFILTERCAPS_MAGFANISOTROPIC|D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD|
D3DPTFILTERCAPS_MAGFGAUSSIANQUAD;
struct wined3d_adapter *wined3d_adapter;
- struct wined3d_output_desc output_desc;
+ unsigned int output_idx, output_ordinal;
struct wined3d_output *wined3d_output;
- unsigned int output_idx;
- HRESULT hr;
caps->DeviceType = (D3DDEVTYPE)wined3d_caps->DeviceType;
caps->AdapterOrdinal = adapter_ordinal;
@@ -535,17 +533,11 @@ void d3d9_caps_from_wined3dcaps(const struct d3d9 *d3d9, unsigned int adapter_or
wined3d_output = d3d9->wined3d_outputs[output_idx];
wined3d_mutex_lock();
- hr = wined3d_output_get_desc(wined3d_output, &output_desc);
+ output_ordinal = wined3d_output_get_ordinal(wined3d_output);
wined3d_mutex_unlock();
- if (FAILED(hr))
- {
- ERR("Failed to get output desc, hr %#x.\n", hr);
- return;
- }
-
- caps->MasterAdapterOrdinal = output_idx - output_desc.ordinal;
- caps->AdapterOrdinalInGroup = output_desc.ordinal;
+ caps->MasterAdapterOrdinal = output_idx - output_ordinal;
+ caps->AdapterOrdinalInGroup = output_ordinal;
if (!caps->AdapterOrdinalInGroup)
{
wined3d_adapter = wined3d_output_get_adapter(wined3d_output);
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 50b1376a75b..439720032f9 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1007,12 +1007,18 @@ HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output,
TRACE("output %p, desc %p.\n", output, desc);
memset(desc, 0, sizeof(*desc));
- desc->ordinal = output->ordinal;
lstrcpyW(desc->device_name, output->device_name);
EnumDisplayMonitors(NULL, NULL, enum_monitor_proc, (LPARAM)desc);
return wined3d_output_get_display_mode(output, &mode, &desc->rotation);
}
+unsigned int CDECL wined3d_output_get_ordinal(const struct wined3d_output *output)
+{
+ TRACE("output %p.\n", output);
+
+ return output->ordinal;
+}
+
/* FIXME: GetAdapterModeCount and EnumAdapterModes currently only returns modes
of the same bpp but different resolutions */
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 44008119a8d..e8d74e7ad84 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -170,6 +170,7 @@
@ cdecl wined3d_output_get_display_mode(ptr ptr ptr)
@ cdecl wined3d_output_get_mode(ptr long long long ptr)
@ cdecl wined3d_output_get_mode_count(ptr long long)
+@ cdecl wined3d_output_get_ordinal(ptr)
@ cdecl wined3d_output_get_raster_status(ptr ptr)
@ cdecl wined3d_output_release_ownership(ptr)
@ cdecl wined3d_output_set_display_mode(ptr ptr)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 4a06b511211..ac51fdf3528 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2153,7 +2153,6 @@ struct wined3d_view_desc
struct wined3d_output_desc
{
- unsigned int ordinal;
WCHAR device_name[CCHDEVICENAME];
RECT desktop_rect;
BOOL attached_to_desktop;
@@ -2557,6 +2556,7 @@ HRESULT __cdecl wined3d_output_get_mode(const struct wined3d_output *output,
unsigned int mode_idx, struct wined3d_display_mode *mode);
unsigned int __cdecl wined3d_output_get_mode_count(const struct wined3d_output *output,
enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering);
+unsigned int __cdecl wined3d_output_get_ordinal(const struct wined3d_output *output);
HRESULT __cdecl wined3d_output_get_raster_status(const struct wined3d_output *output,
struct wined3d_raster_status *raster_status);
void __cdecl wined3d_output_release_ownership(const struct wined3d_output *output);
--
2.27.0
More information about the wine-devel
mailing list