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
a7316e19
Commit
a7316e19
authored
Mar 01, 2016
by
Stefan Dösinger
Committed by
Alexandre Julliard
Mar 02, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Get rid of wined3d_surface_ops.surface_unmap().
Signed-off-by:
Henri Verbeet
<
hverbeet@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
29c27b9b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
60 additions
and
75 deletions
+60
-75
surface.c
dlls/wined3d/surface.c
+36
-65
swapchain.c
dlls/wined3d/swapchain.c
+23
-7
wined3d_private.h
dlls/wined3d/wined3d_private.h
+1
-3
No files found.
dlls/wined3d/surface.c
View file @
a7316e19
...
...
@@ -672,55 +672,6 @@ static HRESULT surface_private_setup(struct wined3d_surface *surface)
return
WINED3D_OK
;
}
static
void
surface_unmap
(
struct
wined3d_surface
*
surface
)
{
struct
wined3d_device
*
device
=
surface
->
resource
.
device
;
const
struct
wined3d_gl_info
*
gl_info
;
struct
wined3d_context
*
context
;
struct
wined3d_texture
*
texture
;
TRACE
(
"surface %p.
\n
"
,
surface
);
switch
(
surface
->
resource
.
map_binding
)
{
case
WINED3D_LOCATION_SYSMEM
:
case
WINED3D_LOCATION_USER_MEMORY
:
case
WINED3D_LOCATION_DIB
:
break
;
case
WINED3D_LOCATION_BUFFER
:
context
=
context_acquire
(
device
,
NULL
);
gl_info
=
context
->
gl_info
;
GL_EXTCALL
(
glBindBuffer
(
GL_PIXEL_UNPACK_BUFFER
,
surface
->
pbo
));
GL_EXTCALL
(
glUnmapBuffer
(
GL_PIXEL_UNPACK_BUFFER
));
GL_EXTCALL
(
glBindBuffer
(
GL_PIXEL_UNPACK_BUFFER
,
0
));
checkGLcall
(
"glUnmapBuffer"
);
context_release
(
context
);
break
;
default:
ERR
(
"Unexpected map binding %s.
\n
"
,
wined3d_debug_location
(
surface
->
resource
.
map_binding
));
}
if
(
surface
->
locations
&
(
WINED3D_LOCATION_DRAWABLE
|
WINED3D_LOCATION_TEXTURE_RGB
))
{
TRACE
(
"Not dirtified, nothing to do.
\n
"
);
return
;
}
texture
=
surface
->
container
;
if
(
texture
->
swapchain
&&
texture
->
swapchain
->
front_buffer
==
texture
)
{
context
=
context_acquire
(
device
,
surface
);
surface_load_location
(
surface
,
context
,
texture
->
resource
.
draw_binding
);
context_release
(
context
);
memset
(
&
texture
->
swapchain
->
front_buffer_update
,
0
,
sizeof
(
texture
->
swapchain
->
front_buffer_update
));
}
else
if
(
texture
->
resource
.
format_flags
&
(
WINED3DFMT_FLAG_DEPTH
|
WINED3DFMT_FLAG_STENCIL
))
FIXME
(
"Depth / stencil buffer locking is not implemented.
\n
"
);
}
static
BOOL
surface_is_full_rect
(
const
struct
wined3d_surface
*
surface
,
const
RECT
*
r
)
{
if
((
r
->
left
&&
r
->
right
)
||
abs
(
r
->
right
-
r
->
left
)
!=
surface
->
resource
.
width
)
...
...
@@ -1215,7 +1166,6 @@ static const struct wined3d_resource_ops surface_resource_ops =
static
const
struct
wined3d_surface_ops
surface_ops
=
{
surface_private_setup
,
surface_unmap
,
};
/*****************************************************************************
...
...
@@ -1259,23 +1209,9 @@ static HRESULT gdi_surface_private_setup(struct wined3d_surface *surface)
return
WINED3D_OK
;
}
static
void
gdi_surface_unmap
(
struct
wined3d_surface
*
surface
)
{
struct
wined3d_texture
*
texture
=
surface
->
container
;
TRACE
(
"surface %p.
\n
"
,
surface
);
/* Tell the swapchain to update the screen. */
if
(
texture
->
swapchain
&&
texture
==
texture
->
swapchain
->
front_buffer
)
x11_copy_to_screen
(
texture
->
swapchain
,
&
texture
->
swapchain
->
front_buffer_update
);
memset
(
&
texture
->
swapchain
->
front_buffer_update
,
0
,
sizeof
(
texture
->
swapchain
->
front_buffer_update
));
}
static
const
struct
wined3d_surface_ops
gdi_surface_ops
=
{
gdi_surface_private_setup
,
gdi_surface_unmap
,
};
/* This call just downloads data, the caller is responsible for binding the
...
...
@@ -2239,6 +2175,11 @@ do { \
HRESULT
wined3d_surface_unmap
(
struct
wined3d_surface
*
surface
)
{
struct
wined3d_device
*
device
=
surface
->
resource
.
device
;
const
struct
wined3d_gl_info
*
gl_info
;
struct
wined3d_context
*
context
;
struct
wined3d_texture
*
texture
;
TRACE
(
"surface %p.
\n
"
,
surface
);
if
(
!
surface
->
resource
.
map_count
)
...
...
@@ -2248,7 +2189,37 @@ HRESULT wined3d_surface_unmap(struct wined3d_surface *surface)
}
--
surface
->
resource
.
map_count
;
surface
->
surface_ops
->
surface_unmap
(
surface
);
switch
(
surface
->
resource
.
map_binding
)
{
case
WINED3D_LOCATION_SYSMEM
:
case
WINED3D_LOCATION_USER_MEMORY
:
case
WINED3D_LOCATION_DIB
:
break
;
case
WINED3D_LOCATION_BUFFER
:
context
=
context_acquire
(
device
,
NULL
);
gl_info
=
context
->
gl_info
;
GL_EXTCALL
(
glBindBuffer
(
GL_PIXEL_UNPACK_BUFFER
,
surface
->
pbo
));
GL_EXTCALL
(
glUnmapBuffer
(
GL_PIXEL_UNPACK_BUFFER
));
GL_EXTCALL
(
glBindBuffer
(
GL_PIXEL_UNPACK_BUFFER
,
0
));
checkGLcall
(
"glUnmapBuffer"
);
context_release
(
context
);
break
;
default:
ERR
(
"Unexpected map binding %s.
\n
"
,
wined3d_debug_location
(
surface
->
resource
.
map_binding
));
break
;
}
if
(
!
(
surface
->
locations
&
(
WINED3D_LOCATION_DRAWABLE
|
WINED3D_LOCATION_TEXTURE_RGB
)))
{
texture
=
surface
->
container
;
if
(
texture
->
swapchain
&&
texture
->
swapchain
->
front_buffer
==
texture
)
texture
->
swapchain
->
swapchain_ops
->
swapchain_frontbuffer_updated
(
texture
->
swapchain
);
else
if
(
texture
->
resource
.
format_flags
&
(
WINED3DFMT_FLAG_DEPTH
|
WINED3DFMT_FLAG_STENCIL
))
FIXME
(
"Depth / stencil buffer locking is not implemented.
\n
"
);
}
return
WINED3D_OK
;
}
...
...
dlls/wined3d/swapchain.c
View file @
a7316e19
...
...
@@ -647,13 +647,25 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
context_release
(
context
);
}
static
void
swapchain_gl_frontbuffer_updated
(
struct
wined3d_swapchain
*
swapchain
)
{
struct
wined3d_surface
*
surface
;
struct
wined3d_context
*
context
;
surface
=
surface_from_resource
(
swapchain
->
front_buffer
->
sub_resources
[
0
].
resource
);
context
=
context_acquire
(
swapchain
->
device
,
surface
);
surface_load_location
(
surface
,
context
,
surface
->
container
->
resource
.
draw_binding
);
context_release
(
context
);
SetRectEmpty
(
&
swapchain
->
front_buffer_update
);
}
static
const
struct
wined3d_swapchain_ops
swapchain_gl_ops
=
{
swapchain_gl_present
,
swapchain_gl_frontbuffer_updated
,
};
/* Helper function that blits the front buffer contents to the target window. */
void
x11_copy_to_screen
(
const
struct
wined3d_swapchain
*
swapchain
,
const
RECT
*
rect
)
static
void
swapchain_gdi_frontbuffer_updated
(
struct
wined3d_swapchain
*
swapchain
)
{
struct
wined3d_surface
*
front
;
POINT
offset
=
{
0
,
0
};
...
...
@@ -661,7 +673,7 @@ void x11_copy_to_screen(const struct wined3d_swapchain *swapchain, const RECT *r
RECT
draw_rect
;
HWND
window
;
TRACE
(
"swapchain %p
, rect %s.
\n
"
,
swapchain
,
wine_dbgstr_rect
(
rect
)
);
TRACE
(
"swapchain %p
.
\n
"
,
swapchain
);
front
=
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
front_buffer
,
0
));
if
(
swapchain
->
palette
)
...
...
@@ -689,14 +701,14 @@ void x11_copy_to_screen(const struct wined3d_swapchain *swapchain, const RECT *r
draw_rect
.
right
=
front
->
resource
.
width
;
draw_rect
.
top
=
0
;
draw_rect
.
bottom
=
front
->
resource
.
height
;
if
(
rect
)
IntersectRect
(
&
draw_rect
,
&
draw_rect
,
rect
);
IntersectRect
(
&
draw_rect
,
&
draw_rect
,
&
swapchain
->
front_buffer_update
);
BitBlt
(
dst_dc
,
draw_rect
.
left
-
offset
.
x
,
draw_rect
.
top
-
offset
.
y
,
draw_rect
.
right
-
draw_rect
.
left
,
draw_rect
.
bottom
-
draw_rect
.
top
,
src_dc
,
draw_rect
.
left
,
draw_rect
.
top
,
SRCCOPY
);
ReleaseDC
(
window
,
dst_dc
);
SetRectEmpty
(
&
swapchain
->
front_buffer_update
);
}
static
void
swapchain_gdi_present
(
struct
wined3d_swapchain
*
swapchain
,
const
RECT
*
src_rect_in
,
...
...
@@ -755,12 +767,16 @@ static void swapchain_gdi_present(struct wined3d_swapchain *swapchain, const REC
}
}
x11_copy_to_screen
(
swapchain
,
NULL
);
SetRect
(
&
swapchain
->
front_buffer_update
,
0
,
0
,
swapchain
->
front_buffer
->
resource
.
width
,
swapchain
->
front_buffer
->
resource
.
height
);
swapchain_gdi_frontbuffer_updated
(
swapchain
);
}
static
const
struct
wined3d_swapchain_ops
swapchain_gdi_ops
=
{
swapchain_gdi_present
,
swapchain_gdi_frontbuffer_updated
,
};
static
void
swapchain_update_render_to_fbo
(
struct
wined3d_swapchain
*
swapchain
)
...
...
dlls/wined3d/wined3d_private.h
View file @
a7316e19
...
...
@@ -2500,7 +2500,6 @@ struct fbo_entry
struct
wined3d_surface_ops
{
HRESULT
(
*
surface_private_setup
)(
struct
wined3d_surface
*
surface
);
void
(
*
surface_unmap
)(
struct
wined3d_surface
*
surface
);
};
struct
wined3d_surface
...
...
@@ -2916,6 +2915,7 @@ struct wined3d_swapchain_ops
{
void
(
*
swapchain_present
)(
struct
wined3d_swapchain
*
swapchain
,
const
RECT
*
src_rect
,
const
RECT
*
dst_rect
,
const
RGNDATA
*
dirty_region
,
DWORD
flags
);
void
(
*
swapchain_frontbuffer_updated
)(
struct
wined3d_swapchain
*
swaphchain
);
};
struct
wined3d_swapchain
...
...
@@ -2948,8 +2948,6 @@ struct wined3d_swapchain
HWND
backup_wnd
;
};
void
x11_copy_to_screen
(
const
struct
wined3d_swapchain
*
swapchain
,
const
RECT
*
rect
)
DECLSPEC_HIDDEN
;
void
wined3d_swapchain_activate
(
struct
wined3d_swapchain
*
swapchain
,
BOOL
activate
)
DECLSPEC_HIDDEN
;
struct
wined3d_context
*
swapchain_get_context
(
struct
wined3d_swapchain
*
swapchain
)
DECLSPEC_HIDDEN
;
void
swapchain_destroy_contexts
(
struct
wined3d_swapchain
*
swapchain
)
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