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
d3387cf7
Commit
d3387cf7
authored
Aug 20, 2014
by
Henri Verbeet
Committed by
Alexandre Julliard
Aug 20, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Keep a reference to the backbuffer textures instead of the surfaces in the swapchain.
parent
ec87407e
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
31 additions
and
21 deletions
+31
-21
context.c
dlls/wined3d/context.c
+1
-1
device.c
dlls/wined3d/device.c
+8
-4
surface.c
dlls/wined3d/surface.c
+4
-3
swapchain.c
dlls/wined3d/swapchain.c
+17
-12
wined3d_private.h
dlls/wined3d/wined3d_private.h
+1
-1
No files found.
dlls/wined3d/context.c
View file @
d3387cf7
...
...
@@ -3102,7 +3102,7 @@ struct wined3d_context *context_acquire(const struct wined3d_device *device, str
{
struct
wined3d_swapchain
*
swapchain
=
device
->
swapchains
[
0
];
if
(
swapchain
->
back_buffers
)
target
=
s
wapchain
->
back_buffers
[
0
]
;
target
=
s
urface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
0
],
0
))
;
else
target
=
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
front_buffer
,
0
));
}
...
...
dlls/wined3d/device.c
View file @
d3387cf7
...
...
@@ -854,7 +854,8 @@ static void device_init_swapchain_state(struct wined3d_device *device, struct wi
wined3d_device_set_render_target
(
device
,
i
,
NULL
,
FALSE
);
}
if
(
swapchain
->
back_buffers
&&
swapchain
->
back_buffers
[
0
])
wined3d_device_set_render_target
(
device
,
0
,
swapchain
->
back_buffers
[
0
],
TRUE
);
wined3d_device_set_render_target
(
device
,
0
,
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
0
],
0
)),
TRUE
);
}
wined3d_device_set_depth_stencil
(
device
,
ds_enable
?
device
->
auto_depth_stencil
:
NULL
);
...
...
@@ -4170,7 +4171,8 @@ static HRESULT create_primary_opengl_context(struct wined3d_device *device, stru
return
E_OUTOFMEMORY
;
}
target
=
swapchain
->
back_buffers
?
swapchain
->
back_buffers
[
0
]
target
=
swapchain
->
back_buffers
?
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
0
],
0
))
:
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
front_buffer
,
0
));
if
(
!
(
context
=
context_create
(
swapchain
,
target
,
swapchain
->
ds_format
)))
{
...
...
@@ -4233,7 +4235,8 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
wined3d_device_set_render_target
(
device
,
i
,
NULL
,
FALSE
);
}
if
(
swapchain
->
back_buffers
&&
swapchain
->
back_buffers
[
0
])
wined3d_device_set_render_target
(
device
,
0
,
swapchain
->
back_buffers
[
0
],
FALSE
);
wined3d_device_set_render_target
(
device
,
0
,
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
0
],
0
)),
FALSE
);
}
wined3d_device_set_depth_stencil
(
device
,
NULL
);
...
...
@@ -4411,7 +4414,8 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
for
(
i
=
0
;
i
<
swapchain
->
desc
.
backbuffer_count
;
++
i
)
{
if
(
FAILED
(
hr
=
wined3d_surface_update_desc
(
swapchain
->
back_buffers
[
i
],
swapchain
->
desc
.
backbuffer_width
,
if
(
FAILED
(
hr
=
wined3d_surface_update_desc
(
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
i
],
0
)),
swapchain
->
desc
.
backbuffer_width
,
swapchain
->
desc
.
backbuffer_height
,
swapchain
->
desc
.
backbuffer_format
,
swapchain
->
desc
.
multisample_type
,
swapchain
->
desc
.
multisample_quality
,
NULL
,
0
)))
return
hr
;
...
...
dlls/wined3d/surface.c
View file @
d3387cf7
...
...
@@ -1985,7 +1985,7 @@ GLenum surface_get_gl_buffer(const struct wined3d_surface *surface)
return
GL_NONE
;
}
if
(
swapchain
->
back_buffers
&&
swapchain
->
back_buffers
[
0
]
==
surface
)
if
(
swapchain
->
back_buffers
&&
swapchain
->
back_buffers
[
0
]
==
surface
->
container
)
{
if
(
swapchain
->
render_to_fbo
)
{
...
...
@@ -3676,7 +3676,8 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
wined3d_gl_min_mip_filter
(
minMipLookup
,
filter
,
WINED3D_TEXF_NONE
));
checkGLcall
(
"glTexParameteri"
);
if
(
!
src_surface
->
container
->
swapchain
||
src_surface
==
src_surface
->
container
->
swapchain
->
back_buffers
[
0
])
if
(
!
src_surface
->
container
->
swapchain
||
src_surface
->
container
==
src_surface
->
container
->
swapchain
->
back_buffers
[
0
])
{
src
=
backup
?
backup
:
src_surface
->
container
->
texture_rgb
.
name
;
}
...
...
@@ -5832,7 +5833,7 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC
* applications can't blit directly to the frontbuffer. */
if
(
dst_swapchain
&&
dst_swapchain
->
back_buffers
&&
dst_surface
->
container
==
dst_swapchain
->
front_buffer
&&
src_surface
==
dst_swapchain
->
back_buffers
[
0
])
&&
src_surface
->
container
==
dst_swapchain
->
back_buffers
[
0
])
{
enum
wined3d_swap_effect
swap_effect
=
dst_swapchain
->
desc
.
swap_effect
;
...
...
dlls/wined3d/swapchain.c
View file @
d3387cf7
...
...
@@ -52,8 +52,8 @@ static void swapchain_cleanup(struct wined3d_swapchain *swapchain)
while
(
i
--
)
{
wined3d_texture_set_swapchain
(
swapchain
->
back_buffers
[
i
]
->
container
,
NULL
);
if
(
wined3d_
surfac
e_decref
(
swapchain
->
back_buffers
[
i
]))
wined3d_texture_set_swapchain
(
swapchain
->
back_buffers
[
i
],
NULL
);
if
(
wined3d_
textur
e_decref
(
swapchain
->
back_buffers
[
i
]))
WARN
(
"Something's still holding back buffer %u (%p).
\n
"
,
i
,
swapchain
->
back_buffers
[
i
]);
}
HeapFree
(
GetProcessHeap
(),
0
,
swapchain
->
back_buffers
);
...
...
@@ -198,7 +198,7 @@ struct wined3d_surface * CDECL wined3d_swapchain_get_back_buffer(const struct wi
TRACE
(
"Returning back buffer %p.
\n
"
,
swapchain
->
back_buffers
[
back_buffer_idx
]);
return
s
wapchain
->
back_buffers
[
back_buffer_idx
]
;
return
s
urface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
back_buffer_idx
],
0
))
;
}
HRESULT
CDECL
wined3d_swapchain_get_raster_status
(
const
struct
wined3d_swapchain
*
swapchain
,
...
...
@@ -282,7 +282,8 @@ HRESULT CDECL wined3d_swapchain_get_gamma_ramp(const struct wined3d_swapchain *s
static
void
swapchain_blit
(
const
struct
wined3d_swapchain
*
swapchain
,
struct
wined3d_context
*
context
,
const
RECT
*
src_rect
,
const
RECT
*
dst_rect
)
{
struct
wined3d_surface
*
backbuffer
=
swapchain
->
back_buffers
[
0
];
struct
wined3d_surface
*
backbuffer
=
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
0
],
0
));
UINT
src_w
=
src_rect
->
right
-
src_rect
->
left
;
UINT
src_h
=
src_rect
->
bottom
-
src_rect
->
top
;
GLenum
gl_filter
;
...
...
@@ -345,7 +346,7 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
float
tex_right
=
src_rect
->
right
;
float
tex_bottom
=
src_rect
->
bottom
;
context2
=
context_acquire
(
device
,
swapchain
->
back_buffers
[
0
]
);
context2
=
context_acquire
(
device
,
backbuffer
);
context_apply_blit_state
(
context2
,
device
);
if
(
backbuffer
->
flags
&
SFLAG_NORMCOORD
)
...
...
@@ -418,7 +419,8 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
static
void
swapchain_gl_present
(
struct
wined3d_swapchain
*
swapchain
,
const
RECT
*
src_rect_in
,
const
RECT
*
dst_rect_in
,
const
RGNDATA
*
dirty_region
,
DWORD
flags
)
{
struct
wined3d_surface
*
back_buffer
=
swapchain
->
back_buffers
[
0
];
struct
wined3d_surface
*
back_buffer
=
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
0
],
0
));
const
struct
wined3d_fb_state
*
fb
=
&
swapchain
->
device
->
fb
;
const
struct
wined3d_gl_info
*
gl_info
;
struct
wined3d_context
*
context
;
...
...
@@ -670,7 +672,7 @@ static void swapchain_gdi_present(struct wined3d_swapchain *swapchain, const REC
struct
wined3d_surface
*
front
,
*
back
;
front
=
surface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
front_buffer
,
0
));
back
=
s
wapchain
->
back_buffers
[
0
]
;
back
=
s
urface_from_resource
(
wined3d_texture_get_sub_resource
(
swapchain
->
back_buffers
[
0
],
0
))
;
/* Flip the DC. */
{
...
...
@@ -961,15 +963,18 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
surface_desc
.
usage
|=
WINED3DUSAGE_RENDERTARGET
;
for
(
i
=
0
;
i
<
swapchain
->
desc
.
backbuffer_count
;
++
i
)
{
struct
wined3d_surface
*
back_buffer
;
TRACE
(
"Creating back buffer %u.
\n
"
,
i
);
if
(
FAILED
(
hr
=
device
->
device_parent
->
ops
->
create_swapchain_surface
(
device
->
device_parent
,
parent
,
&
surface_desc
,
&
swapchain
->
back_buffers
[
i
]
)))
parent
,
&
surface_desc
,
&
back_buffer
)))
{
WARN
(
"Failed to create back buffer %u, hr %#x.
\n
"
,
i
,
hr
);
swapchain
->
desc
.
backbuffer_count
=
i
;
goto
err
;
}
wined3d_texture_set_swapchain
(
swapchain
->
back_buffers
[
i
]
->
container
,
swapchain
);
swapchain
->
back_buffers
[
i
]
=
back_buffer
->
container
;
wined3d_texture_set_swapchain
(
swapchain
->
back_buffers
[
i
],
swapchain
);
}
}
...
...
@@ -1010,8 +1015,8 @@ err:
{
if
(
swapchain
->
back_buffers
[
i
])
{
wined3d_texture_set_swapchain
(
swapchain
->
back_buffers
[
i
]
->
container
,
NULL
);
wined3d_
surfac
e_decref
(
swapchain
->
back_buffers
[
i
]);
wined3d_texture_set_swapchain
(
swapchain
->
back_buffers
[
i
],
NULL
);
wined3d_
textur
e_decref
(
swapchain
->
back_buffers
[
i
]);
}
}
HeapFree
(
GetProcessHeap
(),
0
,
swapchain
->
back_buffers
);
...
...
@@ -1155,6 +1160,6 @@ void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain)
for
(
i
=
0
;
i
<
swapchain
->
desc
.
backbuffer_count
;
++
i
)
{
wined3d_resource_update_draw_binding
(
&
swapchain
->
back_buffers
[
i
]
->
container
->
resource
);
wined3d_resource_update_draw_binding
(
&
swapchain
->
back_buffers
[
i
]
->
resource
);
}
}
dlls/wined3d/wined3d_private.h
View file @
d3387cf7
...
...
@@ -2621,7 +2621,7 @@ struct wined3d_swapchain
const
struct
wined3d_swapchain_ops
*
swapchain_ops
;
struct
wined3d_device
*
device
;
struct
wined3d_
surfac
e
**
back_buffers
;
struct
wined3d_
textur
e
**
back_buffers
;
struct
wined3d_texture
*
front_buffer
;
struct
wined3d_swapchain_desc
desc
;
struct
wined3d_display_mode
original_mode
;
...
...
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