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
0932567f
Commit
0932567f
authored
Sep 30, 2014
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 30, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Use a lookup table in d3dfmt_get_conv().
parent
a8ab5694
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
102 deletions
+52
-102
surface.c
dlls/wined3d/surface.c
+52
-102
No files found.
dlls/wined3d/surface.c
View file @
0932567f
...
...
@@ -1591,115 +1591,65 @@ static HRESULT d3dfmt_get_conv(const struct wined3d_surface *surface, BOOL need_
BOOL
colorkey_active
=
need_alpha_ck
&&
(
surface
->
container
->
color_key_flags
&
WINEDDSD_CKSRCBLT
);
const
struct
wined3d_device
*
device
=
surface
->
resource
.
device
;
const
struct
wined3d_gl_info
*
gl_info
=
&
device
->
adapter
->
gl_info
;
BOOL
blit_supported
=
FALSE
;
unsigned
int
i
;
static
const
struct
{
enum
wined3d_format_id
src_format
;
enum
wined3d_conversion_type
conversion_type
;
GLint
gl_internal
;
GLint
gl_format
;
GLint
gl_type
;
unsigned
int
conv_byte_count
;
}
color_key_info
[]
=
{
{
WINED3DFMT_B5G6R5_UNORM
,
WINED3D_CT_CK_565
,
GL_RGB5_A1
,
GL_RGBA
,
GL_UNSIGNED_SHORT_5_5_5_1
,
2
},
{
WINED3DFMT_B5G5R5X1_UNORM
,
WINED3D_CT_CK_5551
,
GL_RGB5_A1
,
GL_BGRA
,
GL_UNSIGNED_SHORT_1_5_5_5_REV
,
2
},
{
WINED3DFMT_B8G8R8_UNORM
,
WINED3D_CT_CK_RGB24
,
GL_RGBA8
,
GL_RGBA
,
GL_UNSIGNED_INT_8_8_8_8
,
4
},
{
WINED3DFMT_B8G8R8X8_UNORM
,
WINED3D_CT_RGB32_888
,
GL_RGBA8
,
GL_RGBA
,
GL_UNSIGNED_INT_8_8_8_8
,
4
},
{
WINED3DFMT_B8G8R8A8_UNORM
,
WINED3D_CT_CK_ARGB32
,
GL_RGBA8
,
GL_BGRA
,
GL_UNSIGNED_INT_8_8_8_8_REV
,
4
},
};
/* Copy the default values from the surface. Below we might perform fixups */
/* TODO: get rid of color keying desc fixups by using e.g. a table. */
*
format
=
*
surface
->
resource
.
format
;
*
conversion_type
=
WINED3D_CT_NONE
;
/* Ok, now look if we have to do any conversion */
switch
(
surface
->
resource
.
format
->
id
)
if
(
colorkey_active
)
{
case
WINED3DFMT_P8_UINT
:
/* Below the call to blit_supported is disabled for Wine 1.2
* because the function isn't operating correctly yet. At the
* moment 8-bit blits are handled in software and if certain GL
* extensions are around, surface conversion is performed at
* upload time. The blit_supported call recognizes it as a
* destination fixup. This type of upload 'fixup' and 8-bit to
* 8-bit blits need to be handled by the blit_shader.
* TODO: get rid of this #if 0. */
#if 0
blit_supported = device->blitter->blit_supported(&device->adapter->gl_info, WINED3D_BLIT_OP_COLOR_BLIT,
&rect, surface->resource.usage, surface->resource.pool, surface->resource.format,
&rect, surface->resource.usage, surface->resource.pool, surface->resource.format);
#endif
blit_supported
=
gl_info
->
supported
[
ARB_FRAGMENT_PROGRAM
];
/* Use conversion when the blit_shader backend supports it. It only supports this in case of
* texturing. Further also use conversion in case of color keying.
* Paletted textures can be emulated using shaders but only do that for 2D purposes e.g. situations
* in which the main render target uses p8. Some games like GTA Vice City use P8 for texturing which
* conflicts with this.
*/
if
(
!
((
blit_supported
&&
surface
->
container
->
swapchain
&&
surface
->
container
==
surface
->
container
->
swapchain
->
front_buffer
))
||
colorkey_active
||
!
use_texturing
)
{
format
->
glFormat
=
GL_RGBA
;
format
->
glInternal
=
GL_RGBA
;
format
->
glType
=
GL_UNSIGNED_BYTE
;
format
->
conv_byte_count
=
4
;
*
conversion_type
=
WINED3D_CT_PALETTED
;
}
break
;
case
WINED3DFMT_B2G3R3_UNORM
:
/* **********************
GL_UNSIGNED_BYTE_3_3_2
********************** */
if
(
colorkey_active
)
{
/* This texture format will never be used.. So do not care about color keying
up until the point in time it will be needed :-) */
FIXME
(
" ColorKeying not supported in the RGB 332 format !
\n
"
);
}
break
;
case
WINED3DFMT_B5G6R5_UNORM
:
if
(
colorkey_active
)
{
*
conversion_type
=
WINED3D_CT_CK_565
;
format
->
glFormat
=
GL_RGBA
;
format
->
glInternal
=
GL_RGB5_A1
;
format
->
glType
=
GL_UNSIGNED_SHORT_5_5_5_1
;
format
->
conv_byte_count
=
2
;
}
break
;
case
WINED3DFMT_B5G5R5X1_UNORM
:
if
(
colorkey_active
)
{
*
conversion_type
=
WINED3D_CT_CK_5551
;
format
->
glFormat
=
GL_BGRA
;
format
->
glInternal
=
GL_RGB5_A1
;
format
->
glType
=
GL_UNSIGNED_SHORT_1_5_5_5_REV
;
format
->
conv_byte_count
=
2
;
}
break
;
case
WINED3DFMT_B8G8R8_UNORM
:
if
(
colorkey_active
)
{
*
conversion_type
=
WINED3D_CT_CK_RGB24
;
format
->
glFormat
=
GL_RGBA
;
format
->
glInternal
=
GL_RGBA8
;
format
->
glType
=
GL_UNSIGNED_INT_8_8_8_8
;
format
->
conv_byte_count
=
4
;
}
break
;
case
WINED3DFMT_B8G8R8X8_UNORM
:
if
(
colorkey_active
)
{
*
conversion_type
=
WINED3D_CT_RGB32_888
;
format
->
glFormat
=
GL_RGBA
;
format
->
glInternal
=
GL_RGBA8
;
format
->
glType
=
GL_UNSIGNED_INT_8_8_8_8
;
format
->
conv_byte_count
=
4
;
}
break
;
case
WINED3DFMT_B8G8R8A8_UNORM
:
if
(
colorkey_active
)
{
*
conversion_type
=
WINED3D_CT_CK_ARGB32
;
format
->
conv_byte_count
=
4
;
}
for
(
i
=
0
;
i
<
sizeof
(
color_key_info
)
/
sizeof
(
*
color_key_info
);
++
i
)
{
if
(
color_key_info
[
i
].
src_format
!=
surface
->
resource
.
format
->
id
)
continue
;
*
conversion_type
=
color_key_info
[
i
].
conversion_type
;
format
->
glInternal
=
color_key_info
[
i
].
gl_internal
;
format
->
glFormat
=
color_key_info
[
i
].
gl_format
;
format
->
glType
=
color_key_info
[
i
].
gl_type
;
format
->
conv_byte_count
=
color_key_info
[
i
].
conv_byte_count
;
break
;
}
}
default:
break
;
if
(
surface
->
resource
.
format
->
id
==
WINED3DFMT_P8_UINT
)
{
/* FIXME: This should check if the blitter backend can do P8
* conversion, instead of checking for ARB_fragment_program. */
if
(
!
((
gl_info
->
supported
[
ARB_FRAGMENT_PROGRAM
]
&&
surface
->
container
->
swapchain
&&
surface
->
container
==
surface
->
container
->
swapchain
->
front_buffer
))
||
colorkey_active
||
!
use_texturing
)
{
*
conversion_type
=
WINED3D_CT_PALETTED
;
format
->
glInternal
=
GL_RGBA
;
format
->
glFormat
=
GL_RGBA
;
format
->
glType
=
GL_UNSIGNED_BYTE
;
format
->
conv_byte_count
=
4
;
}
}
else
if
(
surface
->
resource
.
format
->
id
==
WINED3DFMT_B2G3R3_UNORM
&&
colorkey_active
)
{
/* This texture format will never be used... So do not care about
* color-keying up until the point in time it will be needed. */
FIXME
(
"Color-keying not supported with WINED3DFMT_B2G3R3_UNORM.
\n
"
);
}
if
(
*
conversion_type
!=
WINED3D_CT_NONE
)
...
...
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