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
519a3a91
Commit
519a3a91
authored
Apr 05, 2011
by
Henri Verbeet
Committed by
Alexandre Julliard
Apr 06, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Add depth fills to the blitter interface.
parent
99bfd817
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
90 additions
and
44 deletions
+90
-44
arb_program_shader.c
dlls/wined3d/arb_program_shader.c
+10
-1
surface.c
dlls/wined3d/surface.c
+78
-43
wined3d_private.h
dlls/wined3d/wined3d_private.h
+2
-0
No files found.
dlls/wined3d/arb_program_shader.c
View file @
519a3a91
...
...
@@ -7253,11 +7253,20 @@ static HRESULT arbfp_blit_color_fill(IWineD3DDeviceImpl *device, IWineD3DSurface
return
WINED3DERR_INVALIDCALL
;
}
/* Do not call while under the GL lock. */
static
HRESULT
arbfp_blit_depth_fill
(
IWineD3DDeviceImpl
*
device
,
IWineD3DSurfaceImpl
*
surface
,
const
RECT
*
rect
,
float
depth
)
{
FIXME
(
"Depth filling not implemented by arbfp_blit.
\n
"
);
return
WINED3DERR_INVALIDCALL
;
}
const
struct
blit_shader
arbfp_blit
=
{
arbfp_blit_alloc
,
arbfp_blit_free
,
arbfp_blit_set
,
arbfp_blit_unset
,
arbfp_blit_supported
,
arbfp_blit_color_fill
arbfp_blit_color_fill
,
arbfp_blit_depth_fill
,
};
dlls/wined3d/surface.c
View file @
519a3a91
...
...
@@ -3897,10 +3897,19 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *dst_surface,
/* Do not call while under the GL lock. */
static
HRESULT
wined3d_surface_depth_fill
(
IWineD3DSurfaceImpl
*
surface
,
const
RECT
*
rect
,
float
depth
)
{
const
RECT
draw_rect
=
{
0
,
0
,
surface
->
resource
.
width
,
surface
->
resource
.
height
};
const
struct
wined3d_resource
*
resource
=
&
surface
->
resource
;
IWineD3DDeviceImpl
*
device
=
resource
->
device
;
const
struct
blit_shader
*
blitter
;
blitter
=
wined3d_select_blitter
(
&
device
->
adapter
->
gl_info
,
WINED3D_BLIT_OP_DEPTH_FILL
,
NULL
,
0
,
0
,
NULL
,
rect
,
resource
->
usage
,
resource
->
pool
,
resource
->
format
);
if
(
!
blitter
)
{
FIXME
(
"No blitter is capable of performing the requested depth fill operation.
\n
"
);
return
WINED3DERR_INVALIDCALL
;
}
return
device_clear_render_targets
(
surface
->
resource
.
device
,
0
,
NULL
,
surface
,
!!
rect
,
rect
,
&
draw_rect
,
WINED3DCLEAR_ZBUFFER
,
0
,
depth
,
0
);
return
blitter
->
depth_fill
(
device
,
surface
,
rect
,
depth
);
}
/* Do not call while under the GL lock. */
...
...
@@ -3929,13 +3938,16 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_Blt(IWineD3DSurface *iface, const RECT
if
(
flags
&
WINEDDBLT_DEPTHFILL
)
{
float
depth
;
RECT
rect
;
TRACE
(
"Depth fill.
\n
"
);
surface_get_rect
(
This
,
DestRect
,
&
rect
);
if
(
!
surface_convert_depth_to_float
(
This
,
DDBltFx
->
u5
.
dwFillDepth
,
&
depth
))
return
WINED3DERR_INVALIDCALL
;
if
(
SUCCEEDED
(
wined3d_surface_depth_fill
(
This
,
DestR
ect
,
depth
)))
if
(
SUCCEEDED
(
wined3d_surface_depth_fill
(
This
,
&
r
ect
,
depth
)))
return
WINED3D_OK
;
}
else
...
...
@@ -4862,51 +4874,54 @@ static BOOL ffp_blit_supported(const struct wined3d_gl_info *gl_info, enum wined
{
enum
complex_fixup
src_fixup
;
if
(
blit_op
==
WINED3D_BLIT_OP_COLOR_FILL
)
switch
(
blit_op
)
{
if
(
!
(
dst_usage
&
WINED3DUSAGE_RENDERTARGET
))
{
TRACE
(
"Color fill not supported
\n
"
);
return
FALSE
;
}
case
WINED3D_BLIT_OP_COLOR_BLIT
:
src_fixup
=
get_complex_fixup
(
src_format
->
color_fixup
);
if
(
TRACE_ON
(
d3d_surface
)
&&
TRACE_ON
(
d3d
))
{
TRACE
(
"Checking support for fixup:
\n
"
);
dump_color_fixup_desc
(
src_format
->
color_fixup
);
}
return
TRUE
;
}
if
(
!
is_identity_fixup
(
dst_format
->
color_fixup
))
{
TRACE
(
"Destination fixups are not supported
\n
"
);
return
FALSE
;
}
src_fixup
=
get_complex_fixup
(
src_format
->
color_fixup
);
if
(
TRACE_ON
(
d3d_surface
)
&&
TRACE_ON
(
d3d
))
{
TRACE
(
"Checking support for fixup:
\n
"
);
dump_color_fixup_desc
(
src_format
->
color_fixup
);
}
if
(
src_fixup
==
COMPLEX_FIXUP_P8
&&
gl_info
->
supported
[
EXT_PALETTED_TEXTURE
])
{
TRACE
(
"P8 fixup supported
\n
"
);
return
TRUE
;
}
if
(
blit_op
!=
WINED3D_BLIT_OP_COLOR_BLIT
)
{
TRACE
(
"Unsupported blit_op=%d
\n
"
,
blit_op
);
return
FALSE
;
}
/* We only support identity conversions. */
if
(
is_identity_fixup
(
src_format
->
color_fixup
))
{
TRACE
(
"[OK]
\n
"
);
return
TRUE
;
}
if
(
!
is_identity_fixup
(
dst_format
->
color_fixup
))
{
TRACE
(
"Destination fixups are not supported
\n
"
);
return
FALSE
;
}
TRACE
(
"[FAILED]
\n
"
);
return
FALSE
;
if
(
src_fixup
==
COMPLEX_FIXUP_P8
&&
gl_info
->
supported
[
EXT_PALETTED_TEXTURE
])
{
TRACE
(
"P8 fixup supported
\n
"
);
return
TRUE
;
}
case
WINED3D_BLIT_OP_COLOR_FILL
:
if
(
!
(
dst_usage
&
WINED3DUSAGE_RENDERTARGET
))
{
TRACE
(
"Color fill not supported
\n
"
);
return
FALSE
;
}
/* We only support identity conversions. */
if
(
is_identity_fixup
(
src_format
->
color_fixup
))
{
TRACE
(
"[OK]
\n
"
);
return
TRUE
;
}
return
TRUE
;
TRACE
(
"[FAILED]
\n
"
);
return
FALSE
;
case
WINED3D_BLIT_OP_DEPTH_FILL
:
return
TRUE
;
default:
TRACE
(
"Unsupported blit_op=%d
\n
"
,
blit_op
);
return
FALSE
;
}
}
/* Do not call while under the GL lock. */
...
...
@@ -4919,13 +4934,24 @@ static HRESULT ffp_blit_color_fill(IWineD3DDeviceImpl *device, IWineD3DSurfaceIm
1
,
dst_rect
,
&
draw_rect
,
WINED3DCLEAR_TARGET
,
color
,
0
.
0
f
,
0
);
}
/* Do not call while under the GL lock. */
static
HRESULT
ffp_blit_depth_fill
(
IWineD3DDeviceImpl
*
device
,
IWineD3DSurfaceImpl
*
surface
,
const
RECT
*
rect
,
float
depth
)
{
const
RECT
draw_rect
=
{
0
,
0
,
surface
->
resource
.
width
,
surface
->
resource
.
height
};
return
device_clear_render_targets
(
device
,
0
,
NULL
,
surface
,
1
,
rect
,
&
draw_rect
,
WINED3DCLEAR_ZBUFFER
,
0
,
depth
,
0
);
}
const
struct
blit_shader
ffp_blit
=
{
ffp_blit_alloc
,
ffp_blit_free
,
ffp_blit_set
,
ffp_blit_unset
,
ffp_blit_supported
,
ffp_blit_color_fill
ffp_blit_color_fill
,
ffp_blit_depth_fill
,
};
static
HRESULT
cpu_blit_alloc
(
IWineD3DDeviceImpl
*
device
)
...
...
@@ -4974,13 +5000,22 @@ static HRESULT cpu_blit_color_fill(IWineD3DDeviceImpl *device, IWineD3DSurfaceIm
NULL
,
NULL
,
WINEDDBLT_COLORFILL
,
&
BltFx
,
WINED3DTEXF_POINT
);
}
/* Do not call while under the GL lock. */
static
HRESULT
cpu_blit_depth_fill
(
IWineD3DDeviceImpl
*
device
,
IWineD3DSurfaceImpl
*
surface
,
const
RECT
*
rect
,
float
depth
)
{
FIXME
(
"Depth filling not implemented by cpu_blit.
\n
"
);
return
WINED3DERR_INVALIDCALL
;
}
const
struct
blit_shader
cpu_blit
=
{
cpu_blit_alloc
,
cpu_blit_free
,
cpu_blit_set
,
cpu_blit_unset
,
cpu_blit_supported
,
cpu_blit_color_fill
cpu_blit_color_fill
,
cpu_blit_depth_fill
,
};
static
BOOL
fbo_blit_supported
(
const
struct
wined3d_gl_info
*
gl_info
,
enum
wined3d_blit_op
blit_op
,
...
...
dlls/wined3d/wined3d_private.h
View file @
519a3a91
...
...
@@ -1170,6 +1170,7 @@ enum wined3d_blit_op
{
WINED3D_BLIT_OP_COLOR_BLIT
,
WINED3D_BLIT_OP_COLOR_FILL
,
WINED3D_BLIT_OP_DEPTH_FILL
,
};
/* Shaders for color conversions in blits. Do not do blit operations while
...
...
@@ -1185,6 +1186,7 @@ struct blit_shader
const
RECT
*
dst_rect
,
DWORD
dst_usage
,
WINED3DPOOL
dst_pool
,
const
struct
wined3d_format
*
dst_format
);
HRESULT
(
*
color_fill
)(
IWineD3DDeviceImpl
*
device
,
IWineD3DSurfaceImpl
*
dst_surface
,
const
RECT
*
dst_rect
,
const
WINED3DCOLORVALUE
*
color
);
HRESULT
(
*
depth_fill
)(
IWineD3DDeviceImpl
*
device
,
IWineD3DSurfaceImpl
*
surface
,
const
RECT
*
rect
,
float
depth
);
};
extern
const
struct
blit_shader
ffp_blit
DECLSPEC_HIDDEN
;
...
...
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