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
76fecde8
Commit
76fecde8
authored
Aug 26, 2011
by
Stefan Dösinger
Committed by
Alexandre Julliard
Aug 31, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ddraw: Introduce a function to convert a DDSURFACEDESC to a DDSURFACEDESC2.
parent
167b65ca
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
79 additions
and
14 deletions
+79
-14
ddraw.c
dlls/ddraw/ddraw.c
+28
-10
ddraw_private.h
dlls/ddraw/ddraw_private.h
+1
-0
surface.c
dlls/ddraw/surface.c
+12
-4
utils.c
dlls/ddraw/utils.c
+38
-0
No files found.
dlls/ddraw/ddraw.c
View file @
76fecde8
...
...
@@ -2299,6 +2299,7 @@ static HRESULT WINAPI ddraw3_EnumDisplayModes(IDirectDraw3 *iface, DWORD flags,
{
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw3
(
iface
);
struct
displaymodescallback_context
cbcontext
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
...
...
@@ -2306,7 +2307,8 @@ static HRESULT WINAPI ddraw3_EnumDisplayModes(IDirectDraw3 *iface, DWORD flags,
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumDisplayModes
(
&
This
->
IDirectDraw7_iface
,
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw7_EnumDisplayModes
(
&
This
->
IDirectDraw7_iface
,
flags
,
&
surface_desc2
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
...
...
@@ -2315,6 +2317,7 @@ static HRESULT WINAPI ddraw2_EnumDisplayModes(IDirectDraw2 *iface, DWORD flags,
{
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw2
(
iface
);
struct
displaymodescallback_context
cbcontext
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
...
...
@@ -2322,7 +2325,8 @@ static HRESULT WINAPI ddraw2_EnumDisplayModes(IDirectDraw2 *iface, DWORD flags,
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumDisplayModes
(
&
This
->
IDirectDraw7_iface
,
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw7_EnumDisplayModes
(
&
This
->
IDirectDraw7_iface
,
flags
,
&
surface_desc2
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
...
...
@@ -2331,6 +2335,7 @@ static HRESULT WINAPI ddraw1_EnumDisplayModes(IDirectDraw *iface, DWORD flags,
{
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw
(
iface
);
struct
displaymodescallback_context
cbcontext
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
...
...
@@ -2338,7 +2343,8 @@ static HRESULT WINAPI ddraw1_EnumDisplayModes(IDirectDraw *iface, DWORD flags,
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumDisplayModes
(
&
This
->
IDirectDraw7_iface
,
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw7_EnumDisplayModes
(
&
This
->
IDirectDraw7_iface
,
flags
,
&
surface_desc2
,
&
cbcontext
,
EnumDisplayModesCallbackThunk
);
}
...
...
@@ -3399,6 +3405,7 @@ static HRESULT WINAPI ddraw3_CreateSurface(IDirectDraw3 *iface, DDSURFACEDESC *s
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw3
(
iface
);
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, surface_desc %p, surface %p, outer_unknown %p.
\n
"
,
iface
,
surface_desc
,
surface
,
outer_unknown
);
...
...
@@ -3408,6 +3415,7 @@ static HRESULT WINAPI ddraw3_CreateSurface(IDirectDraw3 *iface, DDSURFACEDESC *s
WARN
(
"Application supplied invalid surface descriptor
\n
"
);
return
DDERR_INVALIDPARAMS
;
}
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
if
(
surface_desc
->
ddsCaps
.
dwCaps
&
(
DDSCAPS_FRONTBUFFER
|
DDSCAPS_BACKBUFFER
))
{
...
...
@@ -3421,7 +3429,7 @@ static HRESULT WINAPI ddraw3_CreateSurface(IDirectDraw3 *iface, DDSURFACEDESC *s
return
DDERR_INVALIDCAPS
;
}
hr
=
CreateSurface
(
This
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
impl
,
outer_unknown
,
3
);
hr
=
CreateSurface
(
This
,
&
surface_desc2
,
&
impl
,
outer_unknown
,
3
);
if
(
FAILED
(
hr
))
{
*
surface
=
NULL
;
...
...
@@ -3441,6 +3449,7 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface,
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw2
(
iface
);
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, surface_desc %p, surface %p, outer_unknown %p.
\n
"
,
iface
,
surface_desc
,
surface
,
outer_unknown
);
...
...
@@ -3451,6 +3460,7 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface,
return
DDERR_INVALIDPARAMS
;
}
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
if
(
surface_desc
->
ddsCaps
.
dwCaps
&
(
DDSCAPS_FRONTBUFFER
|
DDSCAPS_BACKBUFFER
))
{
if
(
TRACE_ON
(
ddraw
))
...
...
@@ -3463,7 +3473,7 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface,
return
DDERR_INVALIDCAPS
;
}
hr
=
CreateSurface
(
This
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
impl
,
outer_unknown
,
2
);
hr
=
CreateSurface
(
This
,
&
surface_desc2
,
&
impl
,
outer_unknown
,
2
);
if
(
FAILED
(
hr
))
{
*
surface
=
NULL
;
...
...
@@ -3482,6 +3492,7 @@ static HRESULT WINAPI ddraw1_CreateSurface(IDirectDraw *iface,
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw
(
iface
);
IDirectDrawSurfaceImpl
*
impl
;
HRESULT
hr
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, surface_desc %p, surface %p, outer_unknown %p.
\n
"
,
iface
,
surface_desc
,
surface
,
outer_unknown
);
...
...
@@ -3495,7 +3506,8 @@ static HRESULT WINAPI ddraw1_CreateSurface(IDirectDraw *iface,
/* Remove front buffer flag, this causes failure in v7, and its added to normal
* primaries anyway. */
surface_desc
->
ddsCaps
.
dwCaps
&=
~
DDSCAPS_FRONTBUFFER
;
hr
=
CreateSurface
(
This
,
(
DDSURFACEDESC2
*
)
surface_desc
,
&
impl
,
outer_unknown
,
1
);
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
hr
=
CreateSurface
(
This
,
&
surface_desc2
,
&
impl
,
outer_unknown
,
1
);
if
(
FAILED
(
hr
))
{
*
surface
=
NULL
;
...
...
@@ -3738,7 +3750,7 @@ static HRESULT WINAPI ddraw4_EnumSurfaces(IDirectDraw4 *iface, DWORD flags,
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
surface_desc
,
&
cbcontext
,
EnumSurfacesCallback2Thunk
);
}
...
...
@@ -3747,6 +3759,7 @@ static HRESULT WINAPI ddraw3_EnumSurfaces(IDirectDraw3 *iface, DWORD flags,
{
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw3
(
iface
);
struct
surfacescallback_context
cbcontext
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
...
...
@@ -3754,7 +3767,8 @@ static HRESULT WINAPI ddraw3_EnumSurfaces(IDirectDraw3 *iface, DWORD flags,
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
&
surface_desc2
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
...
...
@@ -3763,6 +3777,7 @@ static HRESULT WINAPI ddraw2_EnumSurfaces(IDirectDraw2 *iface, DWORD flags,
{
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw2
(
iface
);
struct
surfacescallback_context
cbcontext
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
...
...
@@ -3770,7 +3785,8 @@ static HRESULT WINAPI ddraw2_EnumSurfaces(IDirectDraw2 *iface, DWORD flags,
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
&
surface_desc2
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
...
...
@@ -3779,6 +3795,7 @@ static HRESULT WINAPI ddraw1_EnumSurfaces(IDirectDraw *iface, DWORD flags,
{
IDirectDrawImpl
*
This
=
impl_from_IDirectDraw
(
iface
);
struct
surfacescallback_context
cbcontext
;
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, flags %#x, surface_desc %p, context %p, callback %p.
\n
"
,
iface
,
flags
,
surface_desc
,
context
,
callback
);
...
...
@@ -3786,7 +3803,8 @@ static HRESULT WINAPI ddraw1_EnumSurfaces(IDirectDraw *iface, DWORD flags,
cbcontext
.
func
=
callback
;
cbcontext
.
context
=
context
;
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
(
DDSURFACEDESC2
*
)
surface_desc
,
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw7_EnumSurfaces
(
&
This
->
IDirectDraw7_iface
,
flags
,
&
surface_desc2
,
&
cbcontext
,
EnumSurfacesCallbackThunk
);
}
...
...
dlls/ddraw/ddraw_private.h
View file @
76fecde8
...
...
@@ -555,6 +555,7 @@ void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps) DECLSPEC_HIDDEN;
DWORD
get_flexible_vertex_size
(
DWORD
d3dvtVertexType
)
DECLSPEC_HIDDEN
;
void
DDRAW_dump_DDSCAPS2
(
const
DDSCAPS2
*
in
)
DECLSPEC_HIDDEN
;
void
DDRAW_dump_cooperativelevel
(
DWORD
cooplevel
)
DECLSPEC_HIDDEN
;
void
DDSD_to_DDSD2
(
const
DDSURFACEDESC
*
in
,
DDSURFACEDESC2
*
out
)
DECLSPEC_HIDDEN
;
/* This only needs to be here as long the processvertices functionality of
* IDirect3DExecuteBuffer isn't in WineD3D */
...
...
dlls/ddraw/surface.c
View file @
76fecde8
...
...
@@ -2926,30 +2926,36 @@ static HRESULT WINAPI ddraw_surface3_Initialize(IDirectDrawSurface3 *iface,
IDirectDraw
*
ddraw
,
DDSURFACEDESC
*
surface_desc
)
{
IDirectDrawSurfaceImpl
*
This
=
impl_from_IDirectDrawSurface3
(
iface
);
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, ddraw %p, surface_desc %p.
\n
"
,
iface
,
ddraw
,
surface_desc
);
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw_surface7_Initialize
(
&
This
->
IDirectDrawSurface7_iface
,
ddraw
,
(
DDSURFACEDESC2
*
)
surface_desc
);
ddraw
,
&
surface_desc2
);
}
static
HRESULT
WINAPI
ddraw_surface2_Initialize
(
IDirectDrawSurface2
*
iface
,
IDirectDraw
*
ddraw
,
DDSURFACEDESC
*
surface_desc
)
{
IDirectDrawSurfaceImpl
*
This
=
impl_from_IDirectDrawSurface2
(
iface
);
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, ddraw %p, surface_desc %p.
\n
"
,
iface
,
ddraw
,
surface_desc
);
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw_surface7_Initialize
(
&
This
->
IDirectDrawSurface7_iface
,
ddraw
,
(
DDSURFACEDESC2
*
)
surface_desc
);
ddraw
,
&
surface_desc2
);
}
static
HRESULT
WINAPI
ddraw_surface1_Initialize
(
IDirectDrawSurface
*
iface
,
IDirectDraw
*
ddraw
,
DDSURFACEDESC
*
surface_desc
)
{
IDirectDrawSurfaceImpl
*
This
=
impl_from_IDirectDrawSurface
(
iface
);
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, ddraw %p, surface_desc %p.
\n
"
,
iface
,
ddraw
,
surface_desc
);
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw_surface7_Initialize
(
&
This
->
IDirectDrawSurface7_iface
,
ddraw
,
(
DDSURFACEDESC2
*
)
surface_desc
);
ddraw
,
&
surface_desc2
);
}
/*****************************************************************************
...
...
@@ -3939,10 +3945,12 @@ static HRESULT WINAPI ddraw_surface3_SetSurfaceDesc(IDirectDrawSurface3 *iface,
DDSURFACEDESC
*
surface_desc
,
DWORD
flags
)
{
IDirectDrawSurfaceImpl
*
This
=
impl_from_IDirectDrawSurface3
(
iface
);
DDSURFACEDESC2
surface_desc2
;
TRACE
(
"iface %p, surface_desc %p, flags %#x.
\n
"
,
iface
,
surface_desc
,
flags
);
DDSD_to_DDSD2
(
surface_desc
,
&
surface_desc2
);
return
ddraw_surface7_SetSurfaceDesc
(
&
This
->
IDirectDrawSurface7_iface
,
(
DDSURFACEDESC2
*
)
surface_desc
,
flags
);
&
surface_desc2
,
flags
);
}
/*****************************************************************************
...
...
dlls/ddraw/utils.c
View file @
76fecde8
...
...
@@ -1181,3 +1181,41 @@ hr_ddraw_from_wined3d(HRESULT hr)
default:
return
hr
;
}
}
/* Note that this function writes the full sizeof(DDSURFACEDESC2) size, don't use it
* for writing into application-provided DDSURFACEDESC2 structures if the size may
* be different */
void
DDSD_to_DDSD2
(
const
DDSURFACEDESC
*
in
,
DDSURFACEDESC2
*
out
)
{
/* The output of this function is never passed to the application directly, so
* the memset is not strictly needed. CreateSurface still has problems with this
* though. Don't forget to set ddsCaps.dwCaps2/3/4 to 0 when removing this */
memset
(
out
,
0x00
,
sizeof
(
*
out
));
out
->
dwSize
=
sizeof
(
*
out
);
out
->
dwFlags
=
in
->
dwFlags
;
if
(
in
->
dwFlags
&
DDSD_WIDTH
)
out
->
dwWidth
=
in
->
dwWidth
;
if
(
in
->
dwFlags
&
DDSD_HEIGHT
)
out
->
dwHeight
=
in
->
dwHeight
;
if
(
in
->
dwFlags
&
DDSD_PIXELFORMAT
)
out
->
u4
.
ddpfPixelFormat
=
in
->
ddpfPixelFormat
;
/* ddsCaps is read even without DDSD_CAPS set. See dsurface:no_ddsd_caps_test */
out
->
ddsCaps
.
dwCaps
=
in
->
ddsCaps
.
dwCaps
;
if
(
in
->
dwFlags
&
DDSD_PITCH
)
out
->
u1
.
lPitch
=
in
->
u1
.
lPitch
;
if
(
in
->
dwFlags
&
DDSD_BACKBUFFERCOUNT
)
out
->
dwBackBufferCount
=
in
->
dwBackBufferCount
;
if
(
in
->
dwFlags
&
DDSD_ZBUFFERBITDEPTH
)
{
/* FIXME: Convert into a DDPIXELFORMAT */
out
->
u2
.
dwMipMapCount
=
in
->
u2
.
dwZBufferBitDepth
;
/* same union */
}
if
(
in
->
dwFlags
&
DDSD_ALPHABITDEPTH
)
out
->
dwAlphaBitDepth
=
in
->
dwAlphaBitDepth
;
/* DDraw(native, and wine) does not set the DDSD_LPSURFACE, so always copy */
out
->
lpSurface
=
in
->
lpSurface
;
if
(
in
->
dwFlags
&
DDSD_CKDESTOVERLAY
)
out
->
u3
.
ddckCKDestOverlay
=
in
->
ddckCKDestOverlay
;
if
(
in
->
dwFlags
&
DDSD_CKDESTBLT
)
out
->
ddckCKDestBlt
=
in
->
ddckCKDestBlt
;
if
(
in
->
dwFlags
&
DDSD_CKSRCOVERLAY
)
out
->
ddckCKSrcOverlay
=
in
->
ddckCKSrcOverlay
;
if
(
in
->
dwFlags
&
DDSD_CKSRCBLT
)
out
->
ddckCKSrcBlt
=
in
->
ddckCKSrcBlt
;
if
(
in
->
dwFlags
&
DDSD_MIPMAPCOUNT
)
out
->
u2
.
dwMipMapCount
=
in
->
u2
.
dwMipMapCount
;
if
(
in
->
dwFlags
&
DDSD_REFRESHRATE
)
out
->
u2
.
dwRefreshRate
=
in
->
u2
.
dwRefreshRate
;
if
(
in
->
dwFlags
&
DDSD_LINEARSIZE
)
out
->
u1
.
dwLinearSize
=
in
->
u1
.
dwLinearSize
;
/* Does not exist in DDSURFACEDESC:
* DDSD_TEXTURESTAGE, DDSD_FVF, DDSD_SRCVBHANDLE,
*/
}
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