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
2bce6fea
Commit
2bce6fea
authored
Jul 23, 1999
by
Lionel Ulmer
Committed by
Alexandre Julliard
Jul 23, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Added a new option 'noxshm'
- Added a 16bpp -> 32 bpp conversion function
parent
fd087377
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
193 additions
and
97 deletions
+193
-97
ddraw.c
graphics/ddraw.c
+187
-97
options.h
include/options.h
+1
-0
main.c
misc/main.c
+2
-0
main.c
windows/x11drv/main.c
+3
-0
No files found.
graphics/ddraw.c
View file @
2bce6fea
...
@@ -114,6 +114,42 @@ static struct ICOM_VTABLE(IDirectDrawClipper) ddclipvt;
...
@@ -114,6 +114,42 @@ static struct ICOM_VTABLE(IDirectDrawClipper) ddclipvt;
static
struct
ICOM_VTABLE
(
IDirect3D
)
d3dvt
;
static
struct
ICOM_VTABLE
(
IDirect3D
)
d3dvt
;
static
struct
ICOM_VTABLE
(
IDirect3D2
)
d3d2vt
;
static
struct
ICOM_VTABLE
(
IDirect3D2
)
d3d2vt
;
/* This is for mode-emulation */
static
void
pixel_convert_16_to_8
(
void
*
src
,
void
*
dst
,
DWORD
width
,
DWORD
height
,
LONG
pitch
,
IDirectDrawPaletteImpl
*
palette
)
;
static
void
palette_convert_16_to_8
(
LPPALETTEENTRY
palent
,
void
*
screen_palette
,
DWORD
start
,
DWORD
count
)
;
static
void
palette_convert_15_to_8
(
LPPALETTEENTRY
palent
,
void
*
screen_palette
,
DWORD
start
,
DWORD
count
)
;
static
void
pixel_convert_24_to_8
(
void
*
src
,
void
*
dst
,
DWORD
width
,
DWORD
height
,
LONG
pitch
,
IDirectDrawPaletteImpl
*
palette
)
;
static
void
pixel_convert_32_to_8
(
void
*
src
,
void
*
dst
,
DWORD
width
,
DWORD
height
,
LONG
pitch
,
IDirectDrawPaletteImpl
*
palette
)
;
static
void
palette_convert_24_to_8
(
LPPALETTEENTRY
palent
,
void
*
screen_palette
,
DWORD
start
,
DWORD
count
)
;
static
void
pixel_convert_32_to_16
(
void
*
src
,
void
*
dst
,
DWORD
width
,
DWORD
height
,
LONG
pitch
,
IDirectDrawPaletteImpl
*
palette
)
;
typedef
struct
{
unsigned
short
bpp
;
unsigned
short
depth
;
unsigned
int
rmask
;
unsigned
int
gmask
;
unsigned
int
bmask
;
}
ConvertMode
;
typedef
struct
{
void
(
*
pixel_convert
)(
void
*
src
,
void
*
dst
,
DWORD
width
,
DWORD
height
,
LONG
pitch
,
IDirectDrawPaletteImpl
*
palette
);
void
(
*
palette_convert
)(
LPPALETTEENTRY
palent
,
void
*
screen_palette
,
DWORD
start
,
DWORD
count
);
}
ConvertFuncs
;
typedef
struct
{
ConvertMode
screen
,
dest
;
ConvertFuncs
funcs
;
}
Convert
;
static
Convert
ModeEmulations
[]
=
{
{
{
32
,
24
,
0x00FF0000
,
0x0000FF00
,
0x000000FF
},
{
8
,
8
,
0x00
,
0x00
,
0x00
},
{
pixel_convert_32_to_8
,
palette_convert_24_to_8
}
},
{
{
32
,
24
,
0x00FF0000
,
0x0000FF00
,
0x000000FF
},
{
16
,
16
,
0xF800
,
0x07E0
,
0x001F
},
{
pixel_convert_32_to_16
,
NULL
}
},
{
{
24
,
24
,
0xFF0000
,
0x00FF00
,
0x0000FF
},
{
8
,
8
,
0x00
,
0x00
,
0x00
},
{
pixel_convert_24_to_8
,
palette_convert_24_to_8
}
},
{
{
16
,
16
,
0xF800
,
0x07E0
,
0x001F
},
{
8
,
8
,
0x00
,
0x00
,
0x00
},
{
pixel_convert_16_to_8
,
palette_convert_16_to_8
}
},
{
{
16
,
15
,
0x7C00
,
0x03E0
,
0x001F
},
{
8
,
8
,
0x00
,
0x00
,
0x00
},
{
pixel_convert_16_to_8
,
palette_convert_15_to_8
}
},
};
#ifdef HAVE_LIBXXF86VM
#ifdef HAVE_LIBXXF86VM
static
XF86VidModeModeInfo
*
orig_mode
=
NULL
;
static
XF86VidModeModeInfo
*
orig_mode
=
NULL
;
#endif
#endif
...
@@ -3271,18 +3307,22 @@ static void _common_IDirectDrawImpl_SetDisplayMode(IDirectDrawImpl* This) {
...
@@ -3271,18 +3307,22 @@ static void _common_IDirectDrawImpl_SetDisplayMode(IDirectDrawImpl* This) {
SetFocus
(
This
->
d
.
window
);
SetFocus
(
This
->
d
.
window
);
}
}
static
int
_common_depth_to_pixelformat
(
DWORD
depth
,
DDPIXELFORMAT
*
pixelformat
,
DDPIXELFORMAT
*
screen_pixelformat
,
int
*
pix_depth
)
{
static
int
_common_depth_to_pixelformat
(
DWORD
depth
,
DDPIXELFORMAT
*
pixelformat
,
DDPIXELFORMAT
*
screen_pixelformat
,
int
*
pix_depth
)
{
XVisualInfo
*
vi
;
XVisualInfo
*
vi
;
XPixmapFormatValues
*
pf
;
XPixmapFormatValues
*
pf
;
XVisualInfo
vt
;
XVisualInfo
vt
;
int
nvisuals
,
npixmap
,
i
;
int
nvisuals
,
npixmap
,
i
;
int
match
=
0
;
int
match
=
0
;
int
index
=
-
2
;
vi
=
TSXGetVisualInfo
(
display
,
VisualNoMask
,
&
vt
,
&
nvisuals
);
vi
=
TSXGetVisualInfo
(
display
,
VisualNoMask
,
&
vt
,
&
nvisuals
);
pf
=
XListPixmapFormats
(
display
,
&
npixmap
);
pf
=
XListPixmapFormats
(
display
,
&
npixmap
);
for
(
i
=
0
;
i
<
npixmap
;
i
++
)
{
for
(
i
=
0
;
i
<
npixmap
;
i
++
)
{
if
(
pf
[
i
].
bits_per_pixel
==
depth
)
{
if
(
pf
[
i
].
depth
==
depth
)
{
int
j
;
int
j
;
for
(
j
=
0
;
j
<
nvisuals
;
j
++
)
{
for
(
j
=
0
;
j
<
nvisuals
;
j
++
)
{
...
@@ -3309,29 +3349,26 @@ static int _common_depth_to_pixelformat(DWORD depth, DDPIXELFORMAT *pixelformat,
...
@@ -3309,29 +3349,26 @@ static int _common_depth_to_pixelformat(DWORD depth, DDPIXELFORMAT *pixelformat,
*
pix_depth
=
vi
[
j
].
depth
;
*
pix_depth
=
vi
[
j
].
depth
;
match
=
1
;
match
=
1
;
index
=
-
1
;
break
;
goto
clean_up_and_exit
;
}
}
}
}
if
(
j
==
nvisuals
)
ERR
(
"No visual corresponding to pixmap format !
\n
"
);
ERR
(
"No visual corresponding to pixmap format !
\n
"
);
}
}
}
}
if
((
match
==
0
)
&&
(
depth
==
8
))
{
if
(
match
==
0
)
{
pixelformat
->
dwSize
=
sizeof
(
*
pixelformat
);
/* We try now to find an emulated mode */
pixelformat
->
dwFlags
=
DDPF_PALETTEINDEXED8
;
int
c
;
pixelformat
->
dwFourCC
=
0
;
pixelformat
->
x
.
dwRGBBitCount
=
8
;
pixelformat
->
y
.
dwRBitMask
=
0
;
pixelformat
->
z
.
dwGBitMask
=
0
;
pixelformat
->
xx
.
dwBBitMask
=
0
;
pixelformat
->
xy
.
dwRGBAlphaBitMask
=
0
;
/* In that case, find a visual to emulate the 8 bpp format */
for
(
c
=
0
;
c
<
sizeof
(
ModeEmulations
)
/
sizeof
(
Convert
);
c
++
)
{
if
(
ModeEmulations
[
c
].
dest
.
depth
==
depth
)
{
/* Found an emulation function, now tries to find a matching visual / pixel format pair */
for
(
i
=
0
;
i
<
npixmap
;
i
++
)
{
for
(
i
=
0
;
i
<
npixmap
;
i
++
)
{
if
(
pf
[
i
].
bits_per_pixel
>=
depth
)
{
if
((
pf
[
i
].
depth
==
ModeEmulations
[
c
].
screen
.
depth
)
&&
(
pf
[
i
].
bits_per_pixel
==
ModeEmulations
[
c
].
screen
.
bpp
))
{
int
j
;
int
j
;
for
(
j
=
0
;
j
<
nvisuals
;
j
++
)
{
for
(
j
=
0
;
j
<
nvisuals
;
j
++
)
{
...
@@ -3345,25 +3382,45 @@ static int _common_depth_to_pixelformat(DWORD depth, DDPIXELFORMAT *pixelformat,
...
@@ -3345,25 +3382,45 @@ static int _common_depth_to_pixelformat(DWORD depth, DDPIXELFORMAT *pixelformat,
screen_pixelformat
->
xx
.
dwBBitMask
=
vi
[
j
].
blue_mask
;
screen_pixelformat
->
xx
.
dwBBitMask
=
vi
[
j
].
blue_mask
;
screen_pixelformat
->
xy
.
dwRGBAlphaBitMask
=
0
;
screen_pixelformat
->
xy
.
dwRGBAlphaBitMask
=
0
;
pixelformat
->
dwSize
=
sizeof
(
*
pixelformat
);
pixelformat
->
dwFourCC
=
0
;
if
(
depth
==
8
)
{
pixelformat
->
dwFlags
=
DDPF_PALETTEINDEXED8
;
pixelformat
->
x
.
dwRGBBitCount
=
8
;
pixelformat
->
y
.
dwRBitMask
=
0
;
pixelformat
->
z
.
dwGBitMask
=
0
;
pixelformat
->
xx
.
dwBBitMask
=
0
;
}
else
{
pixelformat
->
dwFlags
=
DDPF_RGB
;
pixelformat
->
x
.
dwRGBBitCount
=
ModeEmulations
[
c
].
dest
.
bpp
;
pixelformat
->
y
.
dwRBitMask
=
ModeEmulations
[
c
].
dest
.
rmask
;
pixelformat
->
z
.
dwGBitMask
=
ModeEmulations
[
c
].
dest
.
gmask
;
pixelformat
->
xx
.
dwBBitMask
=
ModeEmulations
[
c
].
dest
.
bmask
;
}
pixelformat
->
xy
.
dwRGBAlphaBitMask
=
0
;
if
(
pix_depth
!=
NULL
)
if
(
pix_depth
!=
NULL
)
*
pix_depth
=
vi
[
j
].
depth
;
*
pix_depth
=
vi
[
j
].
depth
;
match
=
2
;
match
=
2
;
index
=
c
;
break
;
goto
clean_up_and_exit
;
}
}
}
if
(
j
==
nvisuals
)
ERR
(
"No visual corresponding to pixmap format !
\n
"
);
ERR
(
"No visual corresponding to pixmap format !
\n
"
);
}
}
}
}
}
}
}
}
}
clean_up_and_exit:
TSXFree
(
vi
);
TSXFree
(
vi
);
TSXFree
(
pf
);
TSXFree
(
pf
);
return
match
;
return
index
;
}
}
#ifdef HAVE_LIBXXF86DGA
#ifdef HAVE_LIBXXF86DGA
...
@@ -3376,7 +3433,7 @@ static HRESULT WINAPI DGA_IDirectDrawImpl_SetDisplayMode(
...
@@ -3376,7 +3433,7 @@ static HRESULT WINAPI DGA_IDirectDrawImpl_SetDisplayMode(
TRACE
(
"(%p)->(%ld,%ld,%ld)
\n
"
,
This
,
width
,
height
,
depth
);
TRACE
(
"(%p)->(%ld,%ld,%ld)
\n
"
,
This
,
width
,
height
,
depth
);
/* We hope getting the asked for depth */
/* We hope getting the asked for depth */
if
(
_common_depth_to_pixelformat
(
depth
,
&
(
This
->
d
.
directdraw_pixelformat
),
&
(
This
->
d
.
screen_pixelformat
),
NULL
)
!=
1
)
{
if
(
_common_depth_to_pixelformat
(
depth
,
&
(
This
->
d
.
directdraw_pixelformat
),
&
(
This
->
d
.
screen_pixelformat
),
NULL
)
!=
-
1
)
{
/* I.e. no visual found or emulated */
/* I.e. no visual found or emulated */
ERR
(
"(w=%ld,h=%ld,d=%ld), unsupported depth!
\n
"
,
width
,
height
,
depth
);
ERR
(
"(w=%ld,h=%ld,d=%ld), unsupported depth!
\n
"
,
width
,
height
,
depth
);
return
DDERR_UNSUPPORTEDMODE
;
return
DDERR_UNSUPPORTEDMODE
;
...
@@ -3596,88 +3653,59 @@ static void palette_convert_24_to_8(LPPALETTEENTRY palent, void *screen_palette,
...
@@ -3596,88 +3653,59 @@ static void palette_convert_24_to_8(LPPALETTEENTRY palent, void *screen_palette,
((
unsigned
int
)
palent
[
i
].
peBlue
));
((
unsigned
int
)
palent
[
i
].
peBlue
));
}
}
/* *************************************
32 bpp to 16 bpp
************************************* */
static
void
pixel_convert_32_to_16
(
void
*
src
,
void
*
dst
,
DWORD
width
,
DWORD
height
,
LONG
pitch
,
IDirectDrawPaletteImpl
*
palette
)
{
unsigned
short
*
c_src
=
(
unsigned
short
*
)
src
;
unsigned
int
*
c_dst
=
(
unsigned
int
*
)
dst
;
int
y
;
for
(
y
=
height
;
y
--
;
)
{
unsigned
short
*
srclineend
=
c_src
+
width
;
while
(
c_src
<
srclineend
)
{
*
c_dst
++
=
(((
*
c_src
&
0xF800
)
<<
8
)
|
((
*
c_src
&
0x07E0
)
<<
5
)
|
((
*
c_src
&
0x001F
)
<<
3
));
c_src
++
;
}
c_src
+=
((
pitch
/
2
)
-
width
);
}
}
static
HRESULT
WINAPI
Xlib_IDirectDrawImpl_SetDisplayMode
(
static
HRESULT
WINAPI
Xlib_IDirectDrawImpl_SetDisplayMode
(
LPDIRECTDRAW
iface
,
DWORD
width
,
DWORD
height
,
DWORD
depth
LPDIRECTDRAW
iface
,
DWORD
width
,
DWORD
height
,
DWORD
depth
)
{
)
{
ICOM_THIS
(
IDirectDrawImpl
,
iface
);
ICOM_THIS
(
IDirectDrawImpl
,
iface
);
char
buf
[
200
];
char
buf
[
200
];
WND
*
tmpWnd
;
WND
*
tmpWnd
;
int
c
;
TRACE
(
"(%p)->SetDisplayMode(%ld,%ld,%ld)
\n
"
,
TRACE
(
"(%p)->SetDisplayMode(%ld,%ld,%ld)
\n
"
,
This
,
width
,
height
,
depth
);
This
,
width
,
height
,
depth
);
switch
(
_common_depth_to_pixelformat
(
depth
,
switch
(
(
c
=
_common_depth_to_pixelformat
(
depth
,
&
(
This
->
d
.
directdraw_pixelformat
),
&
(
This
->
d
.
directdraw_pixelformat
),
&
(
This
->
d
.
screen_pixelformat
),
&
(
This
->
d
.
screen_pixelformat
),
&
(
This
->
d
.
pixmap_depth
)))
{
&
(
This
->
d
.
pixmap_depth
)
)))
{
case
0
:
case
-
2
:
sprintf
(
buf
,
"SetDisplayMode(w=%ld,h=%ld,d=%ld), unsupported depth!"
,
width
,
height
,
depth
);
sprintf
(
buf
,
"SetDisplayMode(w=%ld,h=%ld,d=%ld), unsupported depth!"
,
width
,
height
,
depth
);
MessageBoxA
(
0
,
buf
,
"WINE DirectDraw"
,
MB_OK
|
MB_ICONSTOP
);
MessageBoxA
(
0
,
buf
,
"WINE DirectDraw"
,
MB_OK
|
MB_ICONSTOP
);
return
DDERR_UNSUPPORTEDMODE
;
return
DDERR_UNSUPPORTEDMODE
;
case
1
:
case
-
1
:
/* No convertion */
/* No convertion */
This
->
d
.
pixel_convert
=
NULL
;
This
->
d
.
pixel_convert
=
NULL
;
This
->
d
.
palette_convert
=
NULL
;
This
->
d
.
palette_convert
=
NULL
;
break
;
break
;
case
2
:
{
default:
int
found
=
0
;
WARN
(
"Warning : running in depth-convertion mode. Should run using a %ld depth for optimal performances.
\n
"
,
depth
);
WARN
(
"Warning : running in depth-convertion mode. Should run using a %ld depth for optimal performances.
\n
"
,
depth
);
/* Set the depth convertion routines */
/* Set the depth convertion routines */
switch
(
This
->
d
.
screen_pixelformat
.
x
.
dwRGBBitCount
)
{
This
->
d
.
pixel_convert
=
ModeEmulations
[
c
].
funcs
.
pixel_convert
;
case
16
:
This
->
d
.
palette_convert
=
ModeEmulations
[
c
].
funcs
.
palette_convert
;
if
((
This
->
d
.
screen_pixelformat
.
y
.
dwRBitMask
==
0xF800
)
&&
(
This
->
d
.
screen_pixelformat
.
z
.
dwGBitMask
==
0x07E0
)
&&
(
This
->
d
.
screen_pixelformat
.
xx
.
dwBBitMask
==
0x001F
))
{
/* 16 bpp */
found
=
1
;
This
->
d
.
pixel_convert
=
pixel_convert_16_to_8
;
This
->
d
.
palette_convert
=
palette_convert_16_to_8
;
}
else
if
((
This
->
d
.
screen_pixelformat
.
y
.
dwRBitMask
==
0x7C00
)
&&
(
This
->
d
.
screen_pixelformat
.
z
.
dwGBitMask
==
0x03E0
)
&&
(
This
->
d
.
screen_pixelformat
.
xx
.
dwBBitMask
==
0x001F
))
{
/* 15 bpp */
found
=
1
;
This
->
d
.
pixel_convert
=
pixel_convert_16_to_8
;
This
->
d
.
palette_convert
=
palette_convert_15_to_8
;
}
break
;
case
24
:
if
((
This
->
d
.
screen_pixelformat
.
y
.
dwRBitMask
==
0xFF0000
)
&&
(
This
->
d
.
screen_pixelformat
.
z
.
dwGBitMask
==
0x00FF00
)
&&
(
This
->
d
.
screen_pixelformat
.
xx
.
dwBBitMask
==
0x0000FF
))
{
/* 24 bpp */
found
=
1
;
This
->
d
.
pixel_convert
=
pixel_convert_24_to_8
;
This
->
d
.
palette_convert
=
palette_convert_24_to_8
;
}
break
;
case
32
:
if
((
This
->
d
.
screen_pixelformat
.
y
.
dwRBitMask
==
0xFF0000
)
&&
(
This
->
d
.
screen_pixelformat
.
z
.
dwGBitMask
==
0x00FF00
)
&&
(
This
->
d
.
screen_pixelformat
.
xx
.
dwBBitMask
==
0x0000FF
))
{
/* 24 bpp */
found
=
1
;
This
->
d
.
pixel_convert
=
pixel_convert_32_to_8
;
This
->
d
.
palette_convert
=
palette_convert_24_to_8
;
}
break
;
}
if
(
!
found
)
{
sprintf
(
buf
,
"SetDisplayMode(w=%ld,h=%ld,d=%ld), unsupported depth!"
,
width
,
height
,
depth
);
MessageBoxA
(
0
,
buf
,
"WINE DirectDraw"
,
MB_OK
|
MB_ICONSTOP
);
return
DDERR_UNSUPPORTEDMODE
;
}
}
break
;
}
}
This
->
d
.
width
=
width
;
This
->
d
.
width
=
width
;
...
@@ -4210,9 +4238,9 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
...
@@ -4210,9 +4238,9 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
XVisualInfo
*
vi
;
XVisualInfo
*
vi
;
XPixmapFormatValues
*
pf
;
XPixmapFormatValues
*
pf
;
XVisualInfo
vt
;
XVisualInfo
vt
;
int
nvisuals
,
npixmap
,
i
;
int
nvisuals
,
npixmap
,
i
,
emu
;
int
send_mode
;
int
has_mode
[]
=
{
0
,
0
,
0
,
0
}
;
int
has_
8bpp
=
0
;
int
has_
depth
[]
=
{
8
,
15
,
16
,
24
}
;
DDSURFACEDESC
ddsfd
;
DDSURFACEDESC
ddsfd
;
static
struct
{
static
struct
{
int
w
,
h
;
int
w
,
h
;
...
@@ -4240,11 +4268,28 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
...
@@ -4240,11 +4268,28 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
pf
=
XListPixmapFormats
(
display
,
&
npixmap
);
pf
=
XListPixmapFormats
(
display
,
&
npixmap
);
i
=
0
;
i
=
0
;
send_mode
=
0
;
emu
=
0
;
while
(
i
<
npixmap
)
{
while
((
i
<
npixmap
)
||
if
((
has_8bpp
==
0
)
&&
(
pf
[
i
].
depth
==
8
))
{
(
emu
!=
4
))
{
/* Special case of a 8bpp depth */
int
mode_index
;
has_8bpp
=
1
;
int
send_mode
=
0
;
int
j
;
if
(
i
<
npixmap
)
{
for
(
j
=
0
;
j
<
4
;
j
++
)
{
if
(
has_depth
[
j
]
==
pf
[
i
].
depth
)
{
mode_index
=
j
;
break
;
}
}
if
(
j
==
4
)
{
i
++
;
continue
;
}
if
(
has_mode
[
mode_index
]
==
0
)
{
if
(
mode_index
==
0
)
{
send_mode
=
1
;
send_mode
=
1
;
ddsfd
.
ddsCaps
.
dwCaps
=
DDSCAPS_PALETTE
;
ddsfd
.
ddsCaps
.
dwCaps
=
DDSCAPS_PALETTE
;
...
@@ -4256,9 +4301,9 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
...
@@ -4256,9 +4301,9 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
ddsfd
.
ddpfPixelFormat
.
z
.
dwGBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
z
.
dwGBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
xx
.
dwBBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
xx
.
dwBBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
xy
.
dwRGBAlphaBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
xy
.
dwRGBAlphaBitMask
=
0
;
}
else
if
(
pf
[
i
].
depth
>
8
)
{
int
j
;
has_mode
[
mode_index
]
=
1
;
}
else
{
/* All the 'true color' depths (15, 16 and 24)
/* All the 'true color' depths (15, 16 and 24)
First, find the corresponding visual to extract the bit masks */
First, find the corresponding visual to extract the bit masks */
for
(
j
=
0
;
j
<
nvisuals
;
j
++
)
{
for
(
j
=
0
;
j
<
nvisuals
;
j
++
)
{
...
@@ -4274,14 +4319,65 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
...
@@ -4274,14 +4319,65 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
ddsfd
.
ddpfPixelFormat
.
xy
.
dwRGBAlphaBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
xy
.
dwRGBAlphaBitMask
=
0
;
send_mode
=
1
;
send_mode
=
1
;
has_mode
[
mode_index
]
=
1
;
break
;
break
;
}
}
}
}
if
(
j
==
nvisuals
)
if
(
j
==
nvisuals
)
ERR
(
"Did not find visual corresponding the the pixmap format !
\n
"
);
ERR
(
"Did not find visual corresponding the the pixmap format !
\n
"
);
}
}
i
++
;
}
else
{
/* Now to emulated modes */
if
(
has_mode
[
emu
]
==
0
)
{
int
c
;
int
l
;
int
depth
=
has_depth
[
emu
];
for
(
c
=
0
;
(
c
<
sizeof
(
ModeEmulations
)
/
sizeof
(
Convert
))
&&
(
send_mode
==
0
);
c
++
)
{
if
(
ModeEmulations
[
c
].
dest
.
depth
==
depth
)
{
/* Found an emulation function, now tries to find a matching visual / pixel format pair */
for
(
l
=
0
;
(
l
<
npixmap
)
&&
(
send_mode
==
0
);
l
++
)
{
if
((
pf
[
l
].
depth
==
ModeEmulations
[
c
].
screen
.
depth
)
&&
(
pf
[
l
].
bits_per_pixel
==
ModeEmulations
[
c
].
screen
.
bpp
))
{
int
j
;
for
(
j
=
0
;
(
j
<
nvisuals
)
&&
(
send_mode
==
0
);
j
++
)
{
if
((
vi
[
j
].
depth
==
pf
[
l
].
depth
)
&&
(
vi
[
j
].
red_mask
==
ModeEmulations
[
c
].
screen
.
rmask
)
&&
(
vi
[
j
].
green_mask
==
ModeEmulations
[
c
].
screen
.
gmask
)
&&
(
vi
[
j
].
blue_mask
==
ModeEmulations
[
c
].
screen
.
bmask
))
{
ddsfd
.
ddpfPixelFormat
.
dwSize
=
sizeof
(
ddsfd
.
ddpfPixelFormat
);
ddsfd
.
ddpfPixelFormat
.
dwFourCC
=
0
;
if
(
depth
==
8
)
{
ddsfd
.
ddpfPixelFormat
.
dwFlags
=
DDPF_PALETTEINDEXED8
;
ddsfd
.
ddpfPixelFormat
.
x
.
dwRGBBitCount
=
8
;
ddsfd
.
ddpfPixelFormat
.
y
.
dwRBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
z
.
dwGBitMask
=
0
;
ddsfd
.
ddpfPixelFormat
.
xx
.
dwBBitMask
=
0
;
}
else
{
}
else
{
send_mode
=
0
;
ddsfd
.
ddpfPixelFormat
.
dwFlags
=
DDPF_RGB
;
ddsfd
.
ddpfPixelFormat
.
x
.
dwRGBBitCount
=
ModeEmulations
[
c
].
dest
.
bpp
;
ddsfd
.
ddpfPixelFormat
.
y
.
dwRBitMask
=
ModeEmulations
[
c
].
dest
.
rmask
;
ddsfd
.
ddpfPixelFormat
.
z
.
dwGBitMask
=
ModeEmulations
[
c
].
dest
.
gmask
;
ddsfd
.
ddpfPixelFormat
.
xx
.
dwBBitMask
=
ModeEmulations
[
c
].
dest
.
bmask
;
}
ddsfd
.
ddpfPixelFormat
.
xy
.
dwRGBAlphaBitMask
=
0
;
send_mode
=
1
;
}
if
(
send_mode
==
0
)
ERR
(
"No visual corresponding to pixmap format !
\n
"
);
}
}
}
}
}
}
emu
++
;
}
}
if
(
send_mode
)
{
if
(
send_mode
)
{
...
@@ -4315,13 +4411,6 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
...
@@ -4315,13 +4411,6 @@ static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes(
goto
exit_enum
;
goto
exit_enum
;
}
}
}
}
/* Hack to always enumerate a 8bpp depth */
i
++
;
if
((
i
==
npixmap
)
&&
(
has_8bpp
==
0
))
{
i
--
;
pf
[
i
].
depth
=
8
;
}
}
}
exit_enum:
exit_enum:
...
@@ -4878,7 +4967,8 @@ DDRAW_XSHM_Available(void)
...
@@ -4878,7 +4967,8 @@ DDRAW_XSHM_Available(void)
int
major
,
minor
;
int
major
,
minor
;
Bool
shpix
;
Bool
shpix
;
if
(
TSXShmQueryVersion
(
display
,
&
major
,
&
minor
,
&
shpix
))
if
((
TSXShmQueryVersion
(
display
,
&
major
,
&
minor
,
&
shpix
))
&&
(
Options
.
noXSHM
!=
1
))
return
1
;
return
1
;
else
else
return
0
;
return
0
;
...
...
include/options.h
View file @
2bce6fea
...
@@ -74,6 +74,7 @@ struct options
...
@@ -74,6 +74,7 @@ struct options
int
managed
;
/* Managed windows */
int
managed
;
/* Managed windows */
int
perfectGraphics
;
/* Favor correctness over speed for graphics */
int
perfectGraphics
;
/* Favor correctness over speed for graphics */
int
noDGA
;
/* Disable XFree86 DGA extensions */
int
noDGA
;
/* Disable XFree86 DGA extensions */
int
noXSHM
;
/* Disable use of XSHM extension */
char
*
configFileName
;
/* Command line config file */
char
*
configFileName
;
/* Command line config file */
int
screenDepth
;
int
screenDepth
;
};
};
...
...
misc/main.c
View file @
2bce6fea
...
@@ -102,6 +102,7 @@ struct options Options =
...
@@ -102,6 +102,7 @@ struct options Options =
FALSE
,
/* Managed windows */
FALSE
,
/* Managed windows */
FALSE
,
/* Perfect graphics */
FALSE
,
/* Perfect graphics */
FALSE
,
/* No DGA */
FALSE
,
/* No DGA */
FALSE
,
/* No XSHM */
NULL
,
/* Alternate config file name */
NULL
,
/* Alternate config file name */
0
/* screenDepth */
0
/* screenDepth */
};
};
...
@@ -130,6 +131,7 @@ static char szUsage[] =
...
@@ -130,6 +131,7 @@ static char szUsage[] =
" -mode mode Start Wine in a particular mode (standard or enhanced)
\n
"
" -mode mode Start Wine in a particular mode (standard or enhanced)
\n
"
" -name name Set the application name
\n
"
" -name name Set the application name
\n
"
" -nodga Disable XFree86 DGA extensions
\n
"
" -nodga Disable XFree86 DGA extensions
\n
"
" -noxshm Disable XSHM extension
\n
"
" -perfect Favor correctness over speed for graphical operations
\n
"
" -perfect Favor correctness over speed for graphical operations
\n
"
" -privatemap Use a private color map
\n
"
" -privatemap Use a private color map
\n
"
" -synchronous Turn on synchronous display mode
\n
"
" -synchronous Turn on synchronous display mode
\n
"
...
...
windows/x11drv/main.c
View file @
2bce6fea
...
@@ -70,6 +70,7 @@ static XrmOptionDescRec optionsTable[] =
...
@@ -70,6 +70,7 @@ static XrmOptionDescRec optionsTable[] =
{
"-winver"
,
".winver"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
},
{
"-winver"
,
".winver"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
},
{
"-config"
,
".config"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
},
{
"-config"
,
".config"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
},
{
"-nodga"
,
".nodga"
,
XrmoptionNoArg
,
(
caddr_t
)
"off"
},
{
"-nodga"
,
".nodga"
,
XrmoptionNoArg
,
(
caddr_t
)
"off"
},
{
"-noxshm"
,
".noxshm"
,
XrmoptionNoArg
,
(
caddr_t
)
"off"
},
{
"-console"
,
".console"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
},
{
"-console"
,
".console"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
},
{
"-dosver"
,
".dosver"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
}
{
"-dosver"
,
".dosver"
,
XrmoptionSepArg
,
(
caddr_t
)
NULL
}
};
};
...
@@ -288,6 +289,8 @@ void X11DRV_USER_ParseOptions(int *argc, char *argv[])
...
@@ -288,6 +289,8 @@ void X11DRV_USER_ParseOptions(int *argc, char *argv[])
Options
.
configFileName
=
xstrdup
((
char
*
)
value
.
addr
);
Options
.
configFileName
=
xstrdup
((
char
*
)
value
.
addr
);
if
(
X11DRV_USER_GetResource
(
db
,
".nodga"
,
&
value
))
if
(
X11DRV_USER_GetResource
(
db
,
".nodga"
,
&
value
))
Options
.
noDGA
=
TRUE
;
Options
.
noDGA
=
TRUE
;
if
(
X11DRV_USER_GetResource
(
db
,
".noxshm"
,
&
value
))
Options
.
noXSHM
=
TRUE
;
if
(
X11DRV_USER_GetResource
(
db
,
".console"
,
&
value
))
if
(
X11DRV_USER_GetResource
(
db
,
".console"
,
&
value
))
driver
.
driver_list
=
xstrdup
((
char
*
)
value
.
addr
);
driver
.
driver_list
=
xstrdup
((
char
*
)
value
.
addr
);
else
else
...
...
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