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
b8f25ef6
Commit
b8f25ef6
authored
Mar 27, 2009
by
Henri Verbeet
Committed by
Alexandre Julliard
Mar 27, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Create a separate function for setting format fixups.
parent
7874a6b7
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
121 additions
and
105 deletions
+121
-105
utils.c
dlls/wined3d/utils.c
+121
-105
No files found.
dlls/wined3d/utils.c
View file @
b8f25ef6
...
...
@@ -429,85 +429,40 @@ static BOOL check_fbo_compat(const WineD3D_GL_Info *gl_info, GLint internal_form
return
status
==
GL_FRAMEBUFFER_COMPLETE_EXT
;
}
BOOL
initPixelFormatsNoGL
(
WineD3D_GL_Info
*
gl_info
)
static
void
apply_format_fixups
(
WineD3D_GL_Info
*
gl_info
)
{
return
init_format_base_info
(
gl_info
);
}
BOOL
initPixelFormats
(
WineD3D_GL_Info
*
gl_info
)
{
unsigned
int
src
;
int
dst
;
int
idx
;
if
(
!
init_format_base_info
(
gl_info
))
return
FALSE
;
/* If a format depends on some extensions, remove them from the table above and initialize them
* after this loop
*/
for
(
src
=
0
;
src
<
sizeof
(
gl_formats_template
)
/
sizeof
(
gl_formats_template
[
0
]);
src
++
)
{
struct
GlPixelFormatDesc
*
desc
;
dst
=
getFmtIdx
(
gl_formats_template
[
src
].
fmt
);
desc
=
&
gl_info
->
gl_formats
[
dst
];
desc
->
glInternal
=
gl_formats_template
[
src
].
glInternal
;
desc
->
glGammaInternal
=
gl_formats_template
[
src
].
glGammaInternal
;
desc
->
glFormat
=
gl_formats_template
[
src
].
glFormat
;
desc
->
glType
=
gl_formats_template
[
src
].
glType
;
desc
->
color_fixup
=
COLOR_FIXUP_IDENTITY
;
desc
->
Flags
|=
gl_formats_template
[
src
].
Flags
;
desc
->
heightscale
=
1
.
0
;
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
&&
gl_formats_template
[
src
].
rtInternal
)
{
/* Check if the default internal format is supported as a frame buffer target, otherwise
* fall back to the render target internal.
*
* Try to stick to the standard format if possible, this limits precision differences
*/
if
(
!
check_fbo_compat
(
gl_info
,
gl_formats_template
[
src
].
glInternal
))
{
TRACE
(
"Internal format of %s not supported as FBO target, using render target internal instead
\n
"
,
debug_d3dformat
(
gl_formats_template
[
src
].
fmt
));
gl_info
->
gl_formats
[
dst
].
rtInternal
=
gl_formats_template
[
src
].
rtInternal
;
}
else
{
TRACE
(
"Format %s is supported as fbo target
\n
"
,
debug_d3dformat
(
gl_formats_template
[
src
].
fmt
));
gl_info
->
gl_formats
[
dst
].
rtInternal
=
gl_formats_template
[
src
].
glInternal
;
}
}
else
{
gl_info
->
gl_formats
[
dst
].
rtInternal
=
gl_formats_template
[
src
].
glInternal
;
}
}
dst
=
getFmtIdx
(
WINED3DFMT_R16_FLOAT
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R16_FLOAT
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_W
);
/* When ARB_texture_rg is supported we only require 16-bit for R16F instead of 64-bit RGBA16F */
if
(
GL_SUPPORT
(
ARB_TEXTURE_RG
))
if
(
GL_SUPPORT
(
ARB_TEXTURE_RG
))
{
gl_info
->
gl_formats
[
dst
].
glInternal
=
GL_R16F
;
gl_info
->
gl_formats
[
dst
].
glGammaInternal
=
GL_R16F
;
gl_info
->
gl_formats
[
idx
].
glInternal
=
GL_R16F
;
gl_info
->
gl_formats
[
idx
].
glGammaInternal
=
GL_R16F
;
}
dst
=
getFmtIdx
(
WINED3DFMT_R32_FLOAT
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R32_FLOAT
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_W
);
/* When ARB_texture_rg is supported we only require 32-bit for R32F instead of 128-bit RGBA32F */
if
(
GL_SUPPORT
(
ARB_TEXTURE_RG
))
if
(
GL_SUPPORT
(
ARB_TEXTURE_RG
))
{
gl_info
->
gl_formats
[
dst
].
glInternal
=
GL_R32F
;
gl_info
->
gl_formats
[
dst
].
glGammaInternal
=
GL_R32F
;
gl_info
->
gl_formats
[
idx
].
glInternal
=
GL_R32F
;
gl_info
->
gl_formats
[
idx
].
glGammaInternal
=
GL_R32F
;
}
dst
=
getFmtIdx
(
WINED3DFMT_R16G16_UNORM
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R16G16_UNORM
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_W
);
dst
=
getFmtIdx
(
WINED3DFMT_R16G16_FLOAT
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R16G16_FLOAT
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_W
);
dst
=
getFmtIdx
(
WINED3DFMT_R32G32_FLOAT
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R32G32_FLOAT
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_W
);
/* V8U8 is supported natively by GL_ATI_envmap_bumpmap and GL_NV_texture_shader.
...
...
@@ -521,37 +476,40 @@ BOOL initPixelFormats(WineD3D_GL_Info *gl_info)
*/
if
(
!
GL_SUPPORT
(
NV_TEXTURE_SHADER
))
{
dst
=
getFmtIdx
(
WINED3DFMT_R8G8_SNORM
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R8G8_SNORM
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
1
,
CHANNEL_SOURCE_X
,
1
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
);
dst
=
getFmtIdx
(
WINED3DFMT_R16G16_SNORM
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R16G16_SNORM
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
1
,
CHANNEL_SOURCE_X
,
1
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
);
}
else
{
dst
=
getFmtIdx
(
WINED3DFMT_R8G8_SNORM
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R8G8_SNORM
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
);
dst
=
getFmtIdx
(
WINED3DFMT_R16G16_SNORM
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R16G16_SNORM
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
);
}
if
(
!
GL_SUPPORT
(
NV_TEXTURE_SHADER
))
{
if
(
!
GL_SUPPORT
(
NV_TEXTURE_SHADER
))
{
/* If GL_NV_texture_shader is not supported, those formats are converted, incompatibly
* with each other
*/
dst
=
getFmtIdx
(
WINED3DFMT_L6V5U5
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_L6V5U5
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
1
,
CHANNEL_SOURCE_X
,
1
,
CHANNEL_SOURCE_Z
,
0
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_ONE
);
dst
=
getFmtIdx
(
WINED3DFMT_X8L8V8U8
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_X8L8V8U8
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
1
,
CHANNEL_SOURCE_X
,
1
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_Z
,
0
,
CHANNEL_SOURCE_W
);
dst
=
getFmtIdx
(
WINED3DFMT_R8G8B8A8_SNORM
);
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
idx
=
getFmtIdx
(
WINED3DFMT_R8G8B8A8_SNORM
);
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
1
,
CHANNEL_SOURCE_X
,
1
,
CHANNEL_SOURCE_Y
,
1
,
CHANNEL_SOURCE_Z
,
1
,
CHANNEL_SOURCE_W
);
}
else
{
}
else
{
/* If GL_NV_texture_shader is supported, WINED3DFMT_L6V5U5 and WINED3DFMT_X8L8V8U8
* are converted at surface loading time, but they do not need any modification in
* the shader, thus they are compatible with all WINED3DFMT_UNKNOWN group formats.
...
...
@@ -559,39 +517,97 @@ BOOL initPixelFormats(WineD3D_GL_Info *gl_info)
*/
}
if
(
GL_SUPPORT
(
EXT_TEXTURE_COMPRESSION_RGTC
))
{
dst
=
getFmtIdx
(
WINED3DFMT_ATI2N
);
gl_info
->
gl_formats
[
dst
].
glInternal
=
GL_COMPRESSED_RED_GREEN_RGTC2_EXT
;
gl_info
->
gl_formats
[
dst
].
glGammaInternal
=
GL_COMPRESSED_RED_GREEN_RGTC2_EXT
;
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
if
(
GL_SUPPORT
(
EXT_TEXTURE_COMPRESSION_RGTC
))
{
idx
=
getFmtIdx
(
WINED3DFMT_ATI2N
);
gl_info
->
gl_formats
[
idx
].
glInternal
=
GL_COMPRESSED_RED_GREEN_RGTC2_EXT
;
gl_info
->
gl_formats
[
idx
].
glGammaInternal
=
GL_COMPRESSED_RED_GREEN_RGTC2_EXT
;
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_Y
,
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
);
}
else
if
(
GL_SUPPORT
(
ATI_TEXTURE_COMPRESSION_3DC
))
{
dst
=
getFmtIdx
(
WINED3DFMT_ATI2N
);
gl_info
->
gl_formats
[
dst
].
glInternal
=
GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI
;
gl_info
->
gl_formats
[
dst
].
glGammaInternal
=
GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI
;
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_color_fixup_desc
(
}
else
if
(
GL_SUPPORT
(
ATI_TEXTURE_COMPRESSION_3DC
))
{
idx
=
getFmtIdx
(
WINED3DFMT_ATI2N
);
gl_info
->
gl_formats
[
idx
].
glInternal
=
GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI
;
gl_info
->
gl_formats
[
idx
].
glGammaInternal
=
GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI
;
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_color_fixup_desc
(
0
,
CHANNEL_SOURCE_X
,
0
,
CHANNEL_SOURCE_W
,
0
,
CHANNEL_SOURCE_ONE
,
0
,
CHANNEL_SOURCE_ONE
);
}
if
(
!
GL_SUPPORT
(
APPLE_YCBCR_422
))
{
dst
=
getFmtIdx
(
WINED3DFMT_YUY2
);
gl_info
->
gl_formats
[
dst
].
glInternal
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
dst
].
glGammaInternal
=
GL_LUMINANCE_ALPHA
;
/* not srgb */
gl_info
->
gl_formats
[
dst
].
glFormat
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
dst
].
glType
=
GL_UNSIGNED_BYTE
;
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_yuv_fixup_desc
(
YUV_FIXUP_YUY2
);
if
(
!
GL_SUPPORT
(
APPLE_YCBCR_422
))
{
idx
=
getFmtIdx
(
WINED3DFMT_YUY2
);
gl_info
->
gl_formats
[
idx
].
glInternal
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
idx
].
glGammaInternal
=
GL_LUMINANCE_ALPHA
;
/* not srgb */
gl_info
->
gl_formats
[
idx
].
glFormat
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
idx
].
glType
=
GL_UNSIGNED_BYTE
;
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_yuv_fixup_desc
(
YUV_FIXUP_YUY2
);
idx
=
getFmtIdx
(
WINED3DFMT_UYVY
);
gl_info
->
gl_formats
[
idx
].
glInternal
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
idx
].
glGammaInternal
=
GL_LUMINANCE_ALPHA
;
/* not srgb */
gl_info
->
gl_formats
[
idx
].
glFormat
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
idx
].
glType
=
GL_UNSIGNED_BYTE
;
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_yuv_fixup_desc
(
YUV_FIXUP_UYVY
);
}
idx
=
getFmtIdx
(
WINED3DFMT_YV12
);
gl_info
->
gl_formats
[
idx
].
heightscale
=
1
.
5
;
gl_info
->
gl_formats
[
idx
].
color_fixup
=
create_yuv_fixup_desc
(
YUV_FIXUP_YV12
);
}
BOOL
initPixelFormatsNoGL
(
WineD3D_GL_Info
*
gl_info
)
{
return
init_format_base_info
(
gl_info
);
}
BOOL
initPixelFormats
(
WineD3D_GL_Info
*
gl_info
)
{
unsigned
int
src
;
dst
=
getFmtIdx
(
WINED3DFMT_UYVY
);
gl_info
->
gl_formats
[
dst
].
glInternal
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
dst
].
glGammaInternal
=
GL_LUMINANCE_ALPHA
;
/* not srgb */
gl_info
->
gl_formats
[
dst
].
glFormat
=
GL_LUMINANCE_ALPHA
;
gl_info
->
gl_formats
[
dst
].
glType
=
GL_UNSIGNED_BYTE
;
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_yuv_fixup_desc
(
YUV_FIXUP_UYVY
);
if
(
!
init_format_base_info
(
gl_info
))
return
FALSE
;
/* If a format depends on some extensions, remove them from the table above and initialize them
* after this loop */
for
(
src
=
0
;
src
<
sizeof
(
gl_formats_template
)
/
sizeof
(
gl_formats_template
[
0
]);
++
src
)
{
struct
GlPixelFormatDesc
*
desc
;
int
dst
=
getFmtIdx
(
gl_formats_template
[
src
].
fmt
);
desc
=
&
gl_info
->
gl_formats
[
dst
];
desc
->
glInternal
=
gl_formats_template
[
src
].
glInternal
;
desc
->
glGammaInternal
=
gl_formats_template
[
src
].
glGammaInternal
;
desc
->
glFormat
=
gl_formats_template
[
src
].
glFormat
;
desc
->
glType
=
gl_formats_template
[
src
].
glType
;
desc
->
color_fixup
=
COLOR_FIXUP_IDENTITY
;
desc
->
Flags
|=
gl_formats_template
[
src
].
Flags
;
desc
->
heightscale
=
1
.
0
;
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
&&
gl_formats_template
[
src
].
rtInternal
)
{
/* Check if the default internal format is supported as a frame buffer target, otherwise
* fall back to the render target internal.
*
* Try to stick to the standard format if possible, this limits precision differences */
if
(
!
check_fbo_compat
(
gl_info
,
gl_formats_template
[
src
].
glInternal
))
{
TRACE
(
"Internal format of %s not supported as FBO target, using render target internal instead
\n
"
,
debug_d3dformat
(
gl_formats_template
[
src
].
fmt
));
gl_info
->
gl_formats
[
dst
].
rtInternal
=
gl_formats_template
[
src
].
rtInternal
;
}
else
{
TRACE
(
"Format %s is supported as fbo target
\n
"
,
debug_d3dformat
(
gl_formats_template
[
src
].
fmt
));
gl_info
->
gl_formats
[
dst
].
rtInternal
=
gl_formats_template
[
src
].
glInternal
;
}
}
else
{
gl_info
->
gl_formats
[
dst
].
rtInternal
=
gl_formats_template
[
src
].
glInternal
;
}
}
dst
=
getFmtIdx
(
WINED3DFMT_YV12
);
gl_info
->
gl_formats
[
dst
].
heightscale
=
1
.
5
;
gl_info
->
gl_formats
[
dst
].
color_fixup
=
create_yuv_fixup_desc
(
YUV_FIXUP_YV12
);
apply_format_fixups
(
gl_info
);
return
TRUE
;
}
...
...
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