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
7e3ecd68
Commit
7e3ecd68
authored
Aug 03, 2011
by
Henri Verbeet
Committed by
Alexandre Julliard
Aug 04, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Move rectangle validation from surface_cpu_blt() to wined3d_surface_blt().
This fixes some tests because these were getting skipped for the BltOverride() path.
parent
b166cb29
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
63 deletions
+49
-63
device.c
dlls/d3d9/device.c
+2
-0
visual.c
dlls/d3d9/tests/visual.c
+20
-20
surface.c
dlls/wined3d/surface.c
+27
-43
No files found.
dlls/d3d9/device.c
View file @
7e3ecd68
...
...
@@ -1023,6 +1023,8 @@ static HRESULT WINAPI IDirect3DDevice9Impl_StretchRect(IDirect3DDevice9Ex *iface
wined3d_mutex_lock
();
hr
=
wined3d_surface_blt
(
dst
->
wined3d_surface
,
pDestRect
,
src
->
wined3d_surface
,
pSourceRect
,
0
,
NULL
,
Filter
);
if
(
hr
==
WINEDDERR_INVALIDRECT
)
hr
=
D3DERR_INVALIDCALL
;
wined3d_mutex_unlock
();
return
hr
;
...
...
dlls/d3d9/tests/visual.c
View file @
7e3ecd68
...
...
@@ -2589,11 +2589,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_offscreen64
,
&
src_rect64_flipy
,
surf_offscreen_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_offscreen64
,
&
src_rect64
,
surf_offscreen_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* offscreenplain ==> rendertarget texture, same size */
...
...
@@ -2618,11 +2618,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_offscreen64
,
&
src_rect64_flipy
,
surf_tex_rt_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_offscreen64
,
&
src_rect64
,
surf_tex_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* offscreenplain ==> rendertarget surface, same size */
...
...
@@ -2641,11 +2641,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_offscreen64
,
&
src_rect64_flipy
,
surf_rt_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_offscreen64
,
&
src_rect64
,
surf_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* offscreenplain ==> texture, same size (should fail) */
...
...
@@ -2735,11 +2735,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex64
,
&
src_rect64_flipy
,
surf_tex_rt_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex64
,
&
src_rect64
,
surf_tex_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* texture ==> rendertarget surface, same size */
...
...
@@ -2758,11 +2758,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex64
,
&
src_rect64_flipy
,
surf_rt_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex64
,
&
src_rect64
,
surf_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* texture ==> texture, same size (should fail) */
...
...
@@ -2857,11 +2857,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex_rt64
,
&
src_rect64_flipy
,
surf_tex_rt_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex_rt64
,
&
src_rect64
,
surf_tex_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* rendertarget texture ==> rendertarget surface, same size */
...
...
@@ -2880,11 +2880,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex_rt64
,
&
src_rect64_flipy
,
surf_rt_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_tex_rt64
,
&
src_rect64
,
surf_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* rendertarget texture ==> texture, same size (should fail) */
...
...
@@ -2975,11 +2975,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_rt64
,
&
src_rect64_flipy
,
surf_tex_rt_dest64
,
&
dst_rect64
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_rt64
,
&
src_rect64
,
surf_tex_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* rendertarget surface ==> rendertarget surface, same size */
...
...
@@ -2998,11 +2998,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_rt64
,
&
src_rect64_flipy
,
surf_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
surf_rt64
,
&
src_rect64
,
surf_rt_dest64
,
&
dst_rect64_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* rendertarget surface ==> texture, same size (should fail) */
...
...
@@ -3071,11 +3071,11 @@ static void stretchrect_test(IDirect3DDevice9 *device)
/* Flipping in y-direction through src_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
backbuffer
,
&
src_rect_flipy
,
surf_tex_rt_dest640_480
,
&
dst_rect
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
/* Flipping in y-direction through dst_rect, no scaling (not allowed) */
hr
=
IDirect3DDevice9_StretchRect
(
device
,
backbuffer
,
&
src_rect
,
surf_tex_rt_dest640_480
,
&
dst_rect_flipy
,
0
);
todo_wine
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
ok
(
hr
==
D3DERR_INVALIDCALL
,
"IDirect3DDevice9_StretchRect failed with %08x
\n
"
,
hr
);
}
/* TODO: Test format conversions */
...
...
dlls/wined3d/surface.c
View file @
7e3ecd68
...
...
@@ -1308,10 +1308,37 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC
}
surface_get_rect
(
dst_surface
,
dst_rect_in
,
&
dst_rect
);
/* The destination rect can be out of bounds on the condition
* that a clipper is set for the surface. */
if
(
!
dst_surface
->
clipper
&&
(
dst_rect
.
left
>=
dst_rect
.
right
||
dst_rect
.
top
>=
dst_rect
.
bottom
||
dst_rect
.
left
>
dst_surface
->
resource
.
width
||
dst_rect
.
left
<
0
||
dst_rect
.
top
>
dst_surface
->
resource
.
height
||
dst_rect
.
top
<
0
||
dst_rect
.
right
>
dst_surface
->
resource
.
width
||
dst_rect
.
right
<
0
||
dst_rect
.
bottom
>
dst_surface
->
resource
.
height
||
dst_rect
.
bottom
<
0
))
{
WARN
(
"Application gave us bad destination rectangle for blit without a clipper set.
\n
"
);
return
WINEDDERR_INVALIDRECT
;
}
if
(
src_surface
)
{
surface_get_rect
(
src_surface
,
src_rect_in
,
&
src_rect
);
if
(
src_rect
.
left
>=
src_rect
.
right
||
src_rect
.
top
>=
src_rect
.
bottom
||
src_rect
.
left
>
src_surface
->
resource
.
width
||
src_rect
.
left
<
0
||
src_rect
.
top
>
src_surface
->
resource
.
height
||
src_rect
.
top
<
0
||
src_rect
.
right
>
src_surface
->
resource
.
width
||
src_rect
.
right
<
0
||
src_rect
.
bottom
>
src_surface
->
resource
.
height
||
src_rect
.
bottom
<
0
)
{
WARN
(
"Application gave us bad source rectangle for Blt.
\n
"
);
return
WINEDDERR_INVALIDRECT
;
}
}
else
{
memset
(
&
src_rect
,
0
,
sizeof
(
src_rect
));
}
if
(
!
device
->
d3d_initialized
)
{
...
...
@@ -6459,51 +6486,8 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
dst_surface
,
wine_dbgstr_rect
(
dst_rect
),
src_surface
,
wine_dbgstr_rect
(
src_rect
),
flags
,
fx
,
debug_d3dtexturefiltertype
(
filter
));
/* First check for the validity of source / destination rectangles.
* This was verified using a test application and by MSDN. */
if
(
src_surface
)
{
if
(
src_rect
->
right
<
src_rect
->
left
||
src_rect
->
bottom
<
src_rect
->
top
||
src_rect
->
left
>
src_surface
->
resource
.
width
||
src_rect
->
left
<
0
||
src_rect
->
top
>
src_surface
->
resource
.
height
||
src_rect
->
top
<
0
||
src_rect
->
right
>
src_surface
->
resource
.
width
||
src_rect
->
right
<
0
||
src_rect
->
bottom
>
src_surface
->
resource
.
height
||
src_rect
->
bottom
<
0
)
{
WARN
(
"Application gave us bad source rectangle for Blt.
\n
"
);
return
WINEDDERR_INVALIDRECT
;
}
if
(
!
src_rect
->
right
||
!
src_rect
->
bottom
||
src_rect
->
left
==
(
int
)
src_surface
->
resource
.
width
||
src_rect
->
top
==
(
int
)
src_surface
->
resource
.
height
)
{
TRACE
(
"Nothing to be done.
\n
"
);
return
WINED3D_OK
;
}
}
xsrc
=
*
src_rect
;
/* The destination rect can be out of bounds on the condition that a
* clipper is set for the surface. */
if
(
!
dst_surface
->
clipper
&&
(
dst_rect
->
right
<
dst_rect
->
left
||
dst_rect
->
bottom
<
dst_rect
->
top
||
dst_rect
->
left
>
dst_surface
->
resource
.
width
||
dst_rect
->
left
<
0
||
dst_rect
->
top
>
dst_surface
->
resource
.
height
||
dst_rect
->
top
<
0
||
dst_rect
->
right
>
dst_surface
->
resource
.
width
||
dst_rect
->
right
<
0
||
dst_rect
->
bottom
>
dst_surface
->
resource
.
height
||
dst_rect
->
bottom
<
0
))
{
WARN
(
"Application gave us bad destination rectangle for Blt without a clipper set.
\n
"
);
return
WINEDDERR_INVALIDRECT
;
}
if
(
dst_rect
->
right
<=
0
||
dst_rect
->
bottom
<=
0
||
dst_rect
->
left
>=
(
int
)
dst_surface
->
resource
.
width
||
dst_rect
->
top
>=
(
int
)
dst_surface
->
resource
.
height
)
{
TRACE
(
"Nothing to be done.
\n
"
);
return
WINED3D_OK
;
}
if
(
!
src_surface
)
{
RECT
full_rect
;
...
...
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