Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
81097744
Commit
81097744
authored
Sep 15, 2014
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 15, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dxgi: Call wined3d_device_init_3d() on device creation.
parent
72aaaac4
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
43 additions
and
57 deletions
+43
-57
Makefile.in
dlls/dxgi/Makefile.in
+1
-1
device.c
dlls/dxgi/device.c
+14
-13
dxgi_private.h
dlls/dxgi/dxgi_private.h
+2
-0
factory.c
dlls/dxgi/factory.c
+25
-29
swapchain.c
dlls/dxgi/swapchain.c
+1
-13
winedxgi.idl
include/wine/winedxgi.idl
+0
-1
No files found.
dlls/dxgi/Makefile.in
View file @
81097744
MODULE
=
dxgi.dll
MODULE
=
dxgi.dll
IMPORTLIB
=
dxgi
IMPORTLIB
=
dxgi
IMPORTS
=
dxguid uuid wined3d
IMPORTS
=
dxguid uuid wined3d
user32
C_SRCS
=
\
C_SRCS
=
\
adapter.c
\
adapter.c
\
...
...
dlls/dxgi/device.c
View file @
81097744
...
@@ -80,6 +80,7 @@ static ULONG STDMETHODCALLTYPE dxgi_device_Release(IWineDXGIDevice *iface)
...
@@ -80,6 +80,7 @@ static ULONG STDMETHODCALLTYPE dxgi_device_Release(IWineDXGIDevice *iface)
{
{
if
(
This
->
child_layer
)
IUnknown_Release
(
This
->
child_layer
);
if
(
This
->
child_layer
)
IUnknown_Release
(
This
->
child_layer
);
EnterCriticalSection
(
&
dxgi_cs
);
EnterCriticalSection
(
&
dxgi_cs
);
wined3d_device_uninit_3d
(
This
->
wined3d_device
);
wined3d_device_decref
(
This
->
wined3d_device
);
wined3d_device_decref
(
This
->
wined3d_device
);
LeaveCriticalSection
(
&
dxgi_cs
);
LeaveCriticalSection
(
&
dxgi_cs
);
IDXGIFactory1_Release
(
This
->
factory
);
IDXGIFactory1_Release
(
This
->
factory
);
...
@@ -248,18 +249,6 @@ static HRESULT STDMETHODCALLTYPE dxgi_device_GetGPUThreadPriority(IWineDXGIDevic
...
@@ -248,18 +249,6 @@ static HRESULT STDMETHODCALLTYPE dxgi_device_GetGPUThreadPriority(IWineDXGIDevic
/* IWineDXGIDevice methods */
/* IWineDXGIDevice methods */
static
struct
wined3d_device
*
STDMETHODCALLTYPE
dxgi_device_get_wined3d_device
(
IWineDXGIDevice
*
iface
)
{
struct
dxgi_device
*
This
=
impl_from_IWineDXGIDevice
(
iface
);
TRACE
(
"iface %p
\n
"
,
iface
);
EnterCriticalSection
(
&
dxgi_cs
);
wined3d_device_incref
(
This
->
wined3d_device
);
LeaveCriticalSection
(
&
dxgi_cs
);
return
This
->
wined3d_device
;
}
static
HRESULT
STDMETHODCALLTYPE
dxgi_device_create_surface
(
IWineDXGIDevice
*
iface
,
const
DXGI_SURFACE_DESC
*
desc
,
static
HRESULT
STDMETHODCALLTYPE
dxgi_device_create_surface
(
IWineDXGIDevice
*
iface
,
const
DXGI_SURFACE_DESC
*
desc
,
DXGI_USAGE
usage
,
const
DXGI_SHARED_RESOURCE
*
shared_resource
,
IUnknown
*
outer
,
void
**
surface
)
DXGI_USAGE
usage
,
const
DXGI_SHARED_RESOURCE
*
shared_resource
,
IUnknown
*
outer
,
void
**
surface
)
{
{
...
@@ -338,7 +327,6 @@ static const struct IWineDXGIDeviceVtbl dxgi_device_vtbl =
...
@@ -338,7 +327,6 @@ static const struct IWineDXGIDeviceVtbl dxgi_device_vtbl =
dxgi_device_SetGPUThreadPriority
,
dxgi_device_SetGPUThreadPriority
,
dxgi_device_GetGPUThreadPriority
,
dxgi_device_GetGPUThreadPriority
,
/* IWineDXGIAdapter methods */
/* IWineDXGIAdapter methods */
dxgi_device_get_wined3d_device
,
dxgi_device_create_surface
,
dxgi_device_create_surface
,
dxgi_device_create_swapchain
,
dxgi_device_create_swapchain
,
};
};
...
@@ -347,6 +335,7 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l
...
@@ -347,6 +335,7 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l
IDXGIFactory
*
factory
,
IDXGIAdapter
*
adapter
)
IDXGIFactory
*
factory
,
IDXGIAdapter
*
adapter
)
{
{
struct
wined3d_device_parent
*
wined3d_device_parent
;
struct
wined3d_device_parent
*
wined3d_device_parent
;
struct
wined3d_swapchain_desc
swapchain_desc
;
IWineDXGIDeviceParent
*
dxgi_device_parent
;
IWineDXGIDeviceParent
*
dxgi_device_parent
;
struct
dxgi_adapter
*
dxgi_adapter
;
struct
dxgi_adapter
*
dxgi_adapter
;
struct
dxgi_factory
*
dxgi_factory
;
struct
dxgi_factory
*
dxgi_factory
;
...
@@ -411,6 +400,18 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l
...
@@ -411,6 +400,18 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l
return
hr
;
return
hr
;
}
}
memset
(
&
swapchain_desc
,
0
,
sizeof
(
swapchain_desc
));
swapchain_desc
.
swap_effect
=
WINED3D_SWAP_EFFECT_DISCARD
;
swapchain_desc
.
device_window
=
dxgi_factory_get_device_window
(
dxgi_factory
);
swapchain_desc
.
windowed
=
TRUE
;
if
(
FAILED
(
hr
=
wined3d_device_init_3d
(
device
->
wined3d_device
,
&
swapchain_desc
)))
{
ERR
(
"Failed to initialize 3D, hr %#x.
\n
"
,
hr
);
wined3d_device_decref
(
device
->
wined3d_device
);
IUnknown_Release
(
device
->
child_layer
);
return
hr
;
}
device
->
factory
=
&
dxgi_factory
->
IDXGIFactory1_iface
;
device
->
factory
=
&
dxgi_factory
->
IDXGIFactory1_iface
;
IDXGIFactory1_AddRef
(
device
->
factory
);
IDXGIFactory1_AddRef
(
device
->
factory
);
...
...
dlls/dxgi/dxgi_private.h
View file @
81097744
...
@@ -86,9 +86,11 @@ struct dxgi_factory
...
@@ -86,9 +86,11 @@ struct dxgi_factory
UINT
adapter_count
;
UINT
adapter_count
;
IDXGIAdapter1
**
adapters
;
IDXGIAdapter1
**
adapters
;
BOOL
extended
;
BOOL
extended
;
HWND
device_window
;
};
};
HRESULT
dxgi_factory_create
(
REFIID
riid
,
void
**
factory
,
BOOL
extended
)
DECLSPEC_HIDDEN
;
HRESULT
dxgi_factory_create
(
REFIID
riid
,
void
**
factory
,
BOOL
extended
)
DECLSPEC_HIDDEN
;
HWND
dxgi_factory_get_device_window
(
struct
dxgi_factory
*
factory
)
DECLSPEC_HIDDEN
;
struct
dxgi_factory
*
unsafe_impl_from_IDXGIFactory1
(
IDXGIFactory1
*
iface
)
DECLSPEC_HIDDEN
;
struct
dxgi_factory
*
unsafe_impl_from_IDXGIFactory1
(
IDXGIFactory1
*
iface
)
DECLSPEC_HIDDEN
;
/* IDXGIDevice */
/* IDXGIDevice */
...
...
dlls/dxgi/factory.c
View file @
81097744
...
@@ -72,6 +72,8 @@ static ULONG STDMETHODCALLTYPE dxgi_factory_Release(IDXGIFactory1 *iface)
...
@@ -72,6 +72,8 @@ static ULONG STDMETHODCALLTYPE dxgi_factory_Release(IDXGIFactory1 *iface)
{
{
UINT
i
;
UINT
i
;
if
(
factory
->
device_window
)
DestroyWindow
(
factory
->
device_window
);
for
(
i
=
0
;
i
<
factory
->
adapter_count
;
++
i
)
for
(
i
=
0
;
i
<
factory
->
adapter_count
;
++
i
)
{
{
IDXGIAdapter1_Release
(
factory
->
adapters
[
i
]);
IDXGIAdapter1_Release
(
factory
->
adapters
[
i
]);
...
@@ -179,9 +181,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IDXGIFactory1 *ifa
...
@@ -179,9 +181,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IDXGIFactory1 *ifa
{
{
struct
wined3d_swapchain
*
wined3d_swapchain
;
struct
wined3d_swapchain
*
wined3d_swapchain
;
struct
wined3d_swapchain_desc
wined3d_desc
;
struct
wined3d_swapchain_desc
wined3d_desc
;
struct
wined3d_device
*
wined3d_device
;
IWineDXGIDevice
*
dxgi_device
;
IWineDXGIDevice
*
dxgi_device
;
UINT
count
;
HRESULT
hr
;
HRESULT
hr
;
FIXME
(
"iface %p, device %p, desc %p, swapchain %p partial stub!
\n
"
,
iface
,
device
,
desc
,
swapchain
);
FIXME
(
"iface %p, device %p, desc %p, swapchain %p partial stub!
\n
"
,
iface
,
device
,
desc
,
swapchain
);
...
@@ -193,17 +193,6 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IDXGIFactory1 *ifa
...
@@ -193,17 +193,6 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IDXGIFactory1 *ifa
return
hr
;
return
hr
;
}
}
wined3d_device
=
IWineDXGIDevice_get_wined3d_device
(
dxgi_device
);
IWineDXGIDevice_Release
(
dxgi_device
);
count
=
wined3d_device_get_swapchain_count
(
wined3d_device
);
if
(
count
)
{
FIXME
(
"Only a single swapchain supported.
\n
"
);
wined3d_device_decref
(
wined3d_device
);
return
E_FAIL
;
}
if
(
!
desc
->
OutputWindow
)
if
(
!
desc
->
OutputWindow
)
{
{
FIXME
(
"No output window, should use factory output window
\n
"
);
FIXME
(
"No output window, should use factory output window
\n
"
);
...
@@ -234,29 +223,16 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IDXGIFactory1 *ifa
...
@@ -234,29 +223,16 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IDXGIFactory1 *ifa
wined3d_desc
.
refresh_rate
=
dxgi_rational_to_uint
(
&
desc
->
BufferDesc
.
RefreshRate
);
wined3d_desc
.
refresh_rate
=
dxgi_rational_to_uint
(
&
desc
->
BufferDesc
.
RefreshRate
);
wined3d_desc
.
swap_interval
=
WINED3DPRESENT_INTERVAL_DEFAULT
;
wined3d_desc
.
swap_interval
=
WINED3DPRESENT_INTERVAL_DEFAULT
;
hr
=
wined3d_device_init_3d
(
wined3d_device
,
&
wined3d_desc
);
hr
=
IWineDXGIDevice_create_swapchain
(
dxgi_device
,
&
wined3d_desc
,
&
wined3d_swapchain
);
IWineDXGIDevice_Release
(
dxgi_device
);
if
(
FAILED
(
hr
))
if
(
FAILED
(
hr
))
{
{
WARN
(
"Failed to initialize 3D, returning %#x
\n
"
,
hr
);
WARN
(
"Failed to create swapchain, hr %#x.
\n
"
,
hr
);
wined3d_device_decref
(
wined3d_device
);
return
hr
;
return
hr
;
}
}
wined3d_swapchain
=
wined3d_device_get_swapchain
(
wined3d_device
,
0
);
wined3d_device_decref
(
wined3d_device
);
if
(
!
wined3d_swapchain
)
{
WARN
(
"Failed to get swapchain.
\n
"
);
return
E_FAIL
;
}
*
swapchain
=
wined3d_swapchain_get_parent
(
wined3d_swapchain
);
*
swapchain
=
wined3d_swapchain_get_parent
(
wined3d_swapchain
);
/* FIXME? The swapchain is created with refcount 1 by the wined3d device,
* but the wined3d device can't hold a real reference. */
TRACE
(
"Created IDXGISwapChain %p
\n
"
,
*
swapchain
);
return
S_OK
;
return
S_OK
;
}
}
...
@@ -395,3 +371,23 @@ HRESULT dxgi_factory_create(REFIID riid, void **factory, BOOL extended)
...
@@ -395,3 +371,23 @@ HRESULT dxgi_factory_create(REFIID riid, void **factory, BOOL extended)
return
hr
;
return
hr
;
}
}
HWND
dxgi_factory_get_device_window
(
struct
dxgi_factory
*
factory
)
{
EnterCriticalSection
(
&
dxgi_cs
);
if
(
!
factory
->
device_window
)
{
if
(
!
(
factory
->
device_window
=
CreateWindowA
(
"static"
,
"DXGI device window"
,
WS_DISABLED
,
0
,
0
,
0
,
0
,
NULL
,
NULL
,
NULL
,
NULL
)))
{
ERR
(
"Failed to create a window.
\n
"
);
return
NULL
;
}
TRACE
(
"Created device window %p for factory %p.
\n
"
,
factory
->
device_window
,
factory
);
}
LeaveCriticalSection
(
&
dxgi_cs
);
return
factory
->
device_window
;
}
dlls/dxgi/swapchain.c
View file @
81097744
...
@@ -72,19 +72,7 @@ static ULONG STDMETHODCALLTYPE dxgi_swapchain_Release(IDXGISwapChain *iface)
...
@@ -72,19 +72,7 @@ static ULONG STDMETHODCALLTYPE dxgi_swapchain_Release(IDXGISwapChain *iface)
TRACE
(
"%p decreasing refcount to %u
\n
"
,
This
,
refcount
);
TRACE
(
"%p decreasing refcount to %u
\n
"
,
This
,
refcount
);
if
(
!
refcount
)
if
(
!
refcount
)
{
wined3d_swapchain_decref
(
This
->
wined3d_swapchain
);
struct
wined3d_device
*
wined3d_device
;
HRESULT
hr
;
FIXME
(
"Only a single swapchain is supported
\n
"
);
wined3d_device
=
wined3d_swapchain_get_device
(
This
->
wined3d_swapchain
);
hr
=
wined3d_device_uninit_3d
(
wined3d_device
);
if
(
FAILED
(
hr
))
{
ERR
(
"Uninit3D failed, hr %#x
\n
"
,
hr
);
}
}
return
refcount
;
return
refcount
;
}
}
...
...
include/wine/winedxgi.idl
View file @
81097744
...
@@ -25,7 +25,6 @@ import "dxgi.idl";
...
@@ -25,7 +25,6 @@ import "dxgi.idl";
]
]
interface
IWineDXGIDevice
:
IDXGIDevice
interface
IWineDXGIDevice
:
IDXGIDevice
{
{
struct
wined3d_device
*
get_wined3d_device
()
;
HRESULT
create_surface
(
HRESULT
create_surface
(
[
in
]
const
DXGI_SURFACE_DESC
*
desc
,
[
in
]
const
DXGI_SURFACE_DESC
*
desc
,
[
in
]
DXGI_USAGE
usage
,
[
in
]
DXGI_USAGE
usage
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment