wined3d: Move kernel mode adapter handle from wined3d_output to wined3d_adapter.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f3d9f00850
commit
e85875d59d
|
@ -103,14 +103,11 @@ HRESULT CDECL wined3d_output_take_ownership(const struct wined3d_output *output,
|
||||||
static void wined3d_output_cleanup(const struct wined3d_output *output)
|
static void wined3d_output_cleanup(const struct wined3d_output *output)
|
||||||
{
|
{
|
||||||
D3DKMT_DESTROYDEVICE destroy_device_desc;
|
D3DKMT_DESTROYDEVICE destroy_device_desc;
|
||||||
D3DKMT_CLOSEADAPTER close_adapter_desc;
|
|
||||||
|
|
||||||
TRACE("output %p.\n", output);
|
TRACE("output %p.\n", output);
|
||||||
|
|
||||||
destroy_device_desc.hDevice = output->kmt_device;
|
destroy_device_desc.hDevice = output->kmt_device;
|
||||||
D3DKMTDestroyDevice(&destroy_device_desc);
|
D3DKMTDestroyDevice(&destroy_device_desc);
|
||||||
close_adapter_desc.hAdapter = output->kmt_adapter;
|
|
||||||
D3DKMTCloseAdapter(&close_adapter_desc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT wined3d_output_init(struct wined3d_output *output, unsigned int ordinal,
|
static HRESULT wined3d_output_init(struct wined3d_output *output, unsigned int ordinal,
|
||||||
|
@ -125,20 +122,17 @@ static HRESULT wined3d_output_init(struct wined3d_output *output, unsigned int o
|
||||||
lstrcpyW(open_adapter_desc.DeviceName, device_name);
|
lstrcpyW(open_adapter_desc.DeviceName, device_name);
|
||||||
if (D3DKMTOpenAdapterFromGdiDisplayName(&open_adapter_desc))
|
if (D3DKMTOpenAdapterFromGdiDisplayName(&open_adapter_desc))
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
close_adapter_desc.hAdapter = open_adapter_desc.hAdapter;
|
||||||
|
D3DKMTCloseAdapter(&close_adapter_desc);
|
||||||
|
|
||||||
create_device_desc.u.hAdapter = open_adapter_desc.hAdapter;
|
create_device_desc.u.hAdapter = adapter->kmt_adapter;
|
||||||
if (D3DKMTCreateDevice(&create_device_desc))
|
if (D3DKMTCreateDevice(&create_device_desc))
|
||||||
{
|
|
||||||
close_adapter_desc.hAdapter = open_adapter_desc.hAdapter;
|
|
||||||
D3DKMTCloseAdapter(&close_adapter_desc);
|
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
|
||||||
|
|
||||||
output->ordinal = ordinal;
|
output->ordinal = ordinal;
|
||||||
lstrcpyW(output->device_name, device_name);
|
lstrcpyW(output->device_name, device_name);
|
||||||
output->adapter = adapter;
|
output->adapter = adapter;
|
||||||
output->screen_format = WINED3DFMT_UNKNOWN;
|
output->screen_format = WINED3DFMT_UNKNOWN;
|
||||||
output->kmt_adapter = open_adapter_desc.hAdapter;
|
|
||||||
output->kmt_device = create_device_desc.hDevice;
|
output->kmt_device = create_device_desc.hDevice;
|
||||||
output->vidpn_source_id = open_adapter_desc.VidPnSourceId;
|
output->vidpn_source_id = open_adapter_desc.VidPnSourceId;
|
||||||
|
|
||||||
|
@ -166,12 +160,15 @@ ssize_t adapter_adjust_mapped_memory(struct wined3d_adapter *adapter, ssize_t si
|
||||||
|
|
||||||
void wined3d_adapter_cleanup(struct wined3d_adapter *adapter)
|
void wined3d_adapter_cleanup(struct wined3d_adapter *adapter)
|
||||||
{
|
{
|
||||||
|
D3DKMT_CLOSEADAPTER close_adapter_desc;
|
||||||
unsigned int output_idx;
|
unsigned int output_idx;
|
||||||
|
|
||||||
for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
|
for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
|
||||||
wined3d_output_cleanup(&adapter->outputs[output_idx]);
|
wined3d_output_cleanup(&adapter->outputs[output_idx]);
|
||||||
heap_free(adapter->outputs);
|
heap_free(adapter->outputs);
|
||||||
heap_free(adapter->formats);
|
heap_free(adapter->formats);
|
||||||
|
close_adapter_desc.hAdapter = adapter->kmt_adapter;
|
||||||
|
D3DKMTCloseAdapter(&close_adapter_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG CDECL wined3d_incref(struct wined3d *wined3d)
|
ULONG CDECL wined3d_incref(struct wined3d *wined3d)
|
||||||
|
@ -3222,7 +3219,9 @@ static BOOL wined3d_adapter_create_output(struct wined3d_adapter *adapter, const
|
||||||
BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal, const LUID *luid,
|
BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal, const LUID *luid,
|
||||||
const struct wined3d_adapter_ops *adapter_ops)
|
const struct wined3d_adapter_ops *adapter_ops)
|
||||||
{
|
{
|
||||||
|
D3DKMT_OPENADAPTERFROMLUID open_adapter_desc;
|
||||||
unsigned int output_idx = 0, primary_idx = 0;
|
unsigned int output_idx = 0, primary_idx = 0;
|
||||||
|
D3DKMT_CLOSEADAPTER close_adapter_desc;
|
||||||
DISPLAY_DEVICEW display_device;
|
DISPLAY_DEVICEW display_device;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
|
@ -3245,6 +3244,11 @@ BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal,
|
||||||
}
|
}
|
||||||
TRACE("adapter %p LUID %08x:%08x.\n", adapter, adapter->luid.HighPart, adapter->luid.LowPart);
|
TRACE("adapter %p LUID %08x:%08x.\n", adapter, adapter->luid.HighPart, adapter->luid.LowPart);
|
||||||
|
|
||||||
|
open_adapter_desc.AdapterLuid = adapter->luid;
|
||||||
|
if (D3DKMTOpenAdapterFromLuid(&open_adapter_desc))
|
||||||
|
return FALSE;
|
||||||
|
adapter->kmt_adapter = open_adapter_desc.hAdapter;
|
||||||
|
|
||||||
display_device.cb = sizeof(display_device);
|
display_device.cb = sizeof(display_device);
|
||||||
while (EnumDisplayDevicesW(NULL, output_idx++, &display_device, 0))
|
while (EnumDisplayDevicesW(NULL, output_idx++, &display_device, 0))
|
||||||
{
|
{
|
||||||
|
@ -3282,6 +3286,8 @@ done:
|
||||||
for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
|
for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
|
||||||
wined3d_output_cleanup(&adapter->outputs[output_idx]);
|
wined3d_output_cleanup(&adapter->outputs[output_idx]);
|
||||||
heap_free(adapter->outputs);
|
heap_free(adapter->outputs);
|
||||||
|
close_adapter_desc.hAdapter = adapter->kmt_adapter;
|
||||||
|
D3DKMTCloseAdapter(&close_adapter_desc);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3498,7 +3498,6 @@ struct wined3d_output
|
||||||
struct wined3d_adapter *adapter;
|
struct wined3d_adapter *adapter;
|
||||||
enum wined3d_format_id screen_format;
|
enum wined3d_format_id screen_format;
|
||||||
|
|
||||||
D3DKMT_HANDLE kmt_adapter;
|
|
||||||
D3DKMT_HANDLE kmt_device;
|
D3DKMT_HANDLE kmt_device;
|
||||||
D3DDDI_VIDEO_PRESENT_SOURCE_ID vidpn_source_id;
|
D3DDDI_VIDEO_PRESENT_SOURCE_ID vidpn_source_id;
|
||||||
};
|
};
|
||||||
|
@ -3521,6 +3520,7 @@ struct wined3d_adapter
|
||||||
struct wined3d_driver_info driver_info;
|
struct wined3d_driver_info driver_info;
|
||||||
struct wined3d_output *outputs;
|
struct wined3d_output *outputs;
|
||||||
unsigned int output_count;
|
unsigned int output_count;
|
||||||
|
D3DKMT_HANDLE kmt_adapter;
|
||||||
UINT64 vram_bytes_used;
|
UINT64 vram_bytes_used;
|
||||||
GUID driver_uuid;
|
GUID driver_uuid;
|
||||||
GUID device_uuid;
|
GUID device_uuid;
|
||||||
|
|
Loading…
Reference in New Issue