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
d21c26e4
Commit
d21c26e4
authored
Sep 10, 2013
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 10, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Get rid of surface_modify_location().
parent
b62915da
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
56 additions
and
57 deletions
+56
-57
arb_program_shader.c
dlls/wined3d/arb_program_shader.c
+3
-1
device.c
dlls/wined3d/device.c
+4
-1
drawprim.c
dlls/wined3d/drawprim.c
+1
-1
surface.c
dlls/wined3d/surface.c
+32
-44
swapchain.c
dlls/wined3d/swapchain.c
+15
-9
wined3d_private.h
dlls/wined3d/wined3d_private.h
+1
-1
No files found.
dlls/wined3d/arb_program_shader.c
View file @
d21c26e4
...
...
@@ -7495,7 +7495,9 @@ HRESULT arbfp_blit_surface(struct wined3d_device *device, DWORD filter,
context_release
(
context
);
surface_modify_location
(
dst_surface
,
dst_surface
->
draw_binding
,
TRUE
);
surface_validate_location
(
dst_surface
,
dst_surface
->
draw_binding
);
surface_invalidate_location
(
dst_surface
,
~
dst_surface
->
draw_binding
);
return
WINED3D_OK
;
}
...
...
dlls/wined3d/device.c
View file @
d21c26e4
...
...
@@ -642,7 +642,10 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
struct
wined3d_surface
*
rt
=
fb
->
render_targets
[
i
];
if
(
rt
)
surface_modify_location
(
rt
,
rt
->
draw_binding
,
TRUE
);
{
surface_validate_location
(
rt
,
rt
->
draw_binding
);
surface_invalidate_location
(
rt
,
~
rt
->
draw_binding
);
}
}
gl_info
->
gl_ops
.
gl
.
p_glColorMask
(
GL_TRUE
,
GL_TRUE
,
GL_TRUE
,
GL_TRUE
);
...
...
dlls/wined3d/drawprim.c
View file @
d21c26e4
...
...
@@ -608,7 +608,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co
if
(
target
)
{
surface_load_location
(
target
,
target
->
draw_binding
,
NULL
);
surface_
modify_location
(
target
,
target
->
draw_binding
,
TRUE
);
surface_
invalidate_location
(
target
,
~
target
->
draw_binding
);
}
}
}
...
...
dlls/wined3d/surface.c
View file @
d21c26e4
...
...
@@ -826,7 +826,7 @@ static void surface_realize_palette(struct wined3d_surface *surface)
TRACE
(
"Palette changed with surface that does not have an up to date system memory copy.
\n
"
);
surface_load_location
(
surface
,
SFLAG_INSYSMEM
,
NULL
);
}
surface_
modify_location
(
surface
,
SFLAG_INSYSMEM
,
TRUE
);
surface_
invalidate_location
(
surface
,
~
SFLAG_INSYSMEM
);
}
}
...
...
@@ -885,7 +885,8 @@ static void surface_map(struct wined3d_surface *surface, const RECT *rect, DWORD
{
TRACE
(
"WINED3D_MAP_DISCARD flag passed, marking SYSMEM as up to date.
\n
"
);
surface_prepare_system_memory
(
surface
);
surface_modify_location
(
surface
,
SFLAG_INSYSMEM
,
TRUE
);
surface_validate_location
(
surface
,
SFLAG_INSYSMEM
);
surface_invalidate_location
(
surface
,
~
SFLAG_INSYSMEM
);
}
else
{
...
...
@@ -1009,7 +1010,8 @@ static void surface_unmap(struct wined3d_surface *surface)
* date because only a subrectangle was read in Map(). */
if
(
!
fullsurface
)
{
surface_modify_location
(
surface
,
surface
->
draw_binding
,
TRUE
);
surface_validate_location
(
surface
,
surface
->
draw_binding
);
surface_invalidate_location
(
surface
,
~
surface
->
draw_binding
);
surface_evict_sysmem
(
surface
);
}
...
...
@@ -1488,7 +1490,8 @@ static BOOL surface_init_sysmem(struct wined3d_surface *surface)
memset
(
surface
->
resource
.
allocatedMemory
,
0
,
surface
->
resource
.
size
);
}
surface_modify_location
(
surface
,
SFLAG_INSYSMEM
,
TRUE
);
surface_validate_location
(
surface
,
SFLAG_INSYSMEM
);
surface_invalidate_location
(
surface
,
~
SFLAG_INSYSMEM
);
return
TRUE
;
}
...
...
@@ -2268,7 +2271,9 @@ HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const P
context_release
(
context
);
surface_modify_location
(
dst_surface
,
SFLAG_INTEXTURE
,
TRUE
);
surface_validate_location
(
dst_surface
,
SFLAG_INTEXTURE
);
surface_invalidate_location
(
dst_surface
,
~
SFLAG_INTEXTURE
);
return
WINED3D_OK
;
}
...
...
@@ -2466,7 +2471,9 @@ void surface_add_dirty_rect(struct wined3d_surface *surface, const struct wined3
/* No partial locking for textures yet. */
surface_load_location
(
surface
,
SFLAG_INSYSMEM
,
NULL
);
surface_modify_location
(
surface
,
SFLAG_INSYSMEM
,
TRUE
);
surface_validate_location
(
surface
,
SFLAG_INSYSMEM
);
surface_invalidate_location
(
surface
,
~
SFLAG_INSYSMEM
);
if
(
dirty_rect
)
{
surface
->
dirtyRect
.
left
=
min
(
surface
->
dirtyRect
.
left
,
dirty_rect
->
left
);
...
...
@@ -2516,10 +2523,7 @@ HRESULT surface_load(struct wined3d_surface *surface, BOOL srgb)
* the surface. Make sure we have it. */
surface_load_location
(
surface
,
SFLAG_INSYSMEM
,
NULL
);
/* Make sure the texture is reloaded because of the color key change,
* this kills performance though :( */
/* TODO: This is not necessarily needed with hw palettized texture support. */
surface_modify_location
(
surface
,
SFLAG_INSYSMEM
,
TRUE
);
surface_invalidate_location
(
surface
,
~
SFLAG_INSYSMEM
);
/* Switching color keying on / off may change the internal format. */
if
(
ck_changed
)
surface_force_reload
(
surface
);
...
...
@@ -2898,7 +2902,8 @@ HRESULT CDECL wined3d_surface_set_mem(struct wined3d_surface *surface, void *mem
surface
->
flags
|=
SFLAG_USERPTR
;
/* Now the surface memory is most up do date. Invalidate drawable and texture. */
surface_modify_location
(
surface
,
SFLAG_INSYSMEM
,
TRUE
);
surface_validate_location
(
surface
,
SFLAG_INSYSMEM
);
surface_invalidate_location
(
surface
,
~
SFLAG_INSYSMEM
);
/* For client textures OpenGL has to be notified. */
if
(
surface
->
flags
&
SFLAG_CLIENT
)
...
...
@@ -2924,7 +2929,8 @@ HRESULT CDECL wined3d_surface_set_mem(struct wined3d_surface *surface, void *mem
surface_prepare_system_memory
(
surface
);
}
surface_modify_location
(
surface
,
SFLAG_INSYSMEM
,
TRUE
);
surface_validate_location
(
surface
,
SFLAG_INSYSMEM
);
surface_invalidate_location
(
surface
,
~
SFLAG_INSYSMEM
);
}
surface
->
pitch
=
pitch
;
...
...
@@ -4503,10 +4509,10 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc
context_release
(
context
);
/* The texture is now most up to date - If the surface is a render target
and has a drawable, this
*
path is never entered
*/
surface_
modify_location
(
dst_surface
,
SFLAG_INTEXTURE
,
TRU
E
);
/* The texture is now most up to date - If the surface is a render target
*
and has a drawable, this path is never entered. */
surface_validate_location
(
dst_surface
,
SFLAG_INTEXTURE
);
surface_
invalidate_location
(
dst_surface
,
~
SFLAG_INTEXTUR
E
);
}
/* Uses the hardware to stretch and flip the image */
...
...
@@ -4776,10 +4782,10 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
context_release
(
context
);
/* The texture is now most up to date - If the surface is a render target
and has a drawable, this
*
path is never entered
*/
surface_
modify_location
(
dst_surface
,
SFLAG_INTEXTURE
,
TRU
E
);
/* The texture is now most up to date - If the surface is a render target
*
and has a drawable, this path is never entered. */
surface_validate_location
(
dst_surface
,
SFLAG_INTEXTURE
);
surface_
invalidate_location
(
dst_surface
,
~
SFLAG_INTEXTUR
E
);
}
/* Front buffer coordinates are always full screen coordinates, but our GL
...
...
@@ -5076,7 +5082,8 @@ static HRESULT surface_blt_special(struct wined3d_surface *dst_surface, const RE
src_surface
->
CKeyFlags
=
oldCKeyFlags
;
src_surface
->
src_blt_color_key
=
old_blt_key
;
surface_modify_location
(
dst_surface
,
dst_surface
->
draw_binding
,
TRUE
);
surface_validate_location
(
dst_surface
,
dst_surface
->
draw_binding
);
surface_invalidate_location
(
dst_surface
,
~
dst_surface
->
draw_binding
);
return
WINED3D_OK
;
}
...
...
@@ -5327,7 +5334,7 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co
surface
->
ds_current_size
.
cy
=
surface
->
resource
.
height
;
}
static
void
surface_validate_location
(
struct
wined3d_surface
*
surface
,
DWORD
location
)
void
surface_validate_location
(
struct
wined3d_surface
*
surface
,
DWORD
location
)
{
struct
wined3d_surface
*
overlay
;
...
...
@@ -5357,27 +5364,6 @@ void surface_invalidate_location(struct wined3d_surface *surface, DWORD location
ERR
(
"Surface %p does not have any up to date location.
\n
"
,
surface
);
}
void
surface_modify_location
(
struct
wined3d_surface
*
surface
,
DWORD
location
,
BOOL
persistent
)
{
TRACE
(
"surface %p, location %s, persistent %#x.
\n
"
,
surface
,
debug_surflocation
(
location
),
persistent
);
if
(
wined3d_settings
.
offscreen_rendering_mode
==
ORM_FBO
&&
surface_is_offscreen
(
surface
)
&&
!
(
surface
->
resource
.
usage
&
WINED3DUSAGE_DEPTHSTENCIL
)
&&
(
location
&
SFLAG_INDRAWABLE
))
ERR
(
"Trying to invalidate the SFLAG_INDRAWABLE location of an offscreen surface.
\n
"
);
if
(
persistent
)
{
surface_validate_location
(
surface
,
location
);
surface_invalidate_location
(
surface
,
~
location
);
}
else
{
surface_invalidate_location
(
surface
,
location
);
}
}
static
DWORD
resource_access_from_location
(
DWORD
location
)
{
switch
(
location
)
...
...
@@ -6811,7 +6797,9 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC
surface_blt_fbo
(
device
,
filter
,
src_surface
,
src_surface
->
draw_binding
,
&
src_rect
,
dst_surface
,
dst_surface
->
draw_binding
,
&
dst_rect
);
surface_modify_location
(
dst_surface
,
dst_surface
->
draw_binding
,
TRUE
);
surface_validate_location
(
dst_surface
,
dst_surface
->
draw_binding
);
surface_invalidate_location
(
dst_surface
,
~
dst_surface
->
draw_binding
);
return
WINED3D_OK
;
}
...
...
dlls/wined3d/swapchain.c
View file @
d21c26e4
...
...
@@ -602,32 +602,35 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
if
(
front
->
resource
.
size
==
back_buffer
->
resource
.
size
)
{
DWORD
fbflags
;
flip_surface
(
front
,
back_buffer
);
/* Tell the front buffer surface that is has been modified. However,
* the other locations were preserved during that, so keep the flags.
* This serves to update the emulated overlay, if any. */
fbflags
=
front
->
flags
;
surface_modify_location
(
front
,
SFLAG_INDRAWABLE
,
TRUE
);
front
->
flags
=
fbflags
;
surface_validate_location
(
front
,
SFLAG_INDRAWABLE
);
}
else
{
surface_modify_location
(
front
,
SFLAG_INDRAWABLE
,
TRUE
);
surface_modify_location
(
back_buffer
,
SFLAG_INDRAWABLE
,
TRUE
);
surface_validate_location
(
front
,
SFLAG_INDRAWABLE
);
surface_invalidate_location
(
front
,
~
SFLAG_INDRAWABLE
);
surface_validate_location
(
back_buffer
,
SFLAG_INDRAWABLE
);
surface_invalidate_location
(
back_buffer
,
~
SFLAG_INDRAWABLE
);
}
}
else
{
surface_modify_location
(
swapchain
->
front_buffer
,
SFLAG_INDRAWABLE
,
TRUE
);
surface_validate_location
(
swapchain
->
front_buffer
,
SFLAG_INDRAWABLE
);
surface_invalidate_location
(
swapchain
->
front_buffer
,
~
SFLAG_INDRAWABLE
);
/* If the swapeffect is DISCARD, the back buffer is undefined. That means the SYSMEM
* and INTEXTURE copies can keep their old content if they have any defined content.
* If the swapeffect is COPY, the content remains the same. If it is FLIP however,
* the texture / sysmem copy needs to be reloaded from the drawable
*/
if
(
swapchain
->
desc
.
swap_effect
==
WINED3D_SWAP_EFFECT_FLIP
)
surface_modify_location
(
back_buffer
,
back_buffer
->
draw_binding
,
TRUE
);
{
surface_validate_location
(
back_buffer
,
back_buffer
->
draw_binding
);
surface_invalidate_location
(
back_buffer
,
~
back_buffer
->
draw_binding
);
}
}
if
(
fb
->
depth_stencil
)
...
...
@@ -898,7 +901,10 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
surface_set_swapchain
(
swapchain
->
front_buffer
,
swapchain
);
if
(
!
(
device
->
wined3d
->
flags
&
WINED3D_NO3D
))
surface_modify_location
(
swapchain
->
front_buffer
,
SFLAG_INDRAWABLE
,
TRUE
);
{
surface_validate_location
(
swapchain
->
front_buffer
,
SFLAG_INDRAWABLE
);
surface_invalidate_location
(
swapchain
->
front_buffer
,
~
SFLAG_INDRAWABLE
);
}
/* MSDN says we're only allowed a single fullscreen swapchain per device,
* so we should really check to see if there is a fullscreen swapchain
...
...
dlls/wined3d/wined3d_private.h
View file @
d21c26e4
...
...
@@ -2261,7 +2261,6 @@ void surface_load_ds_location(struct wined3d_surface *surface,
void
surface_load_fb_texture
(
struct
wined3d_surface
*
surface
,
BOOL
srgb
)
DECLSPEC_HIDDEN
;
HRESULT
surface_load_location
(
struct
wined3d_surface
*
surface
,
DWORD
location
,
const
RECT
*
rect
)
DECLSPEC_HIDDEN
;
void
surface_modify_ds_location
(
struct
wined3d_surface
*
surface
,
DWORD
location
,
UINT
w
,
UINT
h
)
DECLSPEC_HIDDEN
;
void
surface_modify_location
(
struct
wined3d_surface
*
surface
,
DWORD
location
,
BOOL
persistent
)
DECLSPEC_HIDDEN
;
void
surface_prepare_rb
(
struct
wined3d_surface
*
surface
,
const
struct
wined3d_gl_info
*
gl_info
,
BOOL
multisample
)
DECLSPEC_HIDDEN
;
void
surface_prepare_texture
(
struct
wined3d_surface
*
surface
,
...
...
@@ -2276,6 +2275,7 @@ void surface_translate_drawable_coords(const struct wined3d_surface *surface, HW
void
surface_update_draw_binding
(
struct
wined3d_surface
*
surface
)
DECLSPEC_HIDDEN
;
HRESULT
surface_upload_from_surface
(
struct
wined3d_surface
*
dst_surface
,
const
POINT
*
dst_point
,
struct
wined3d_surface
*
src_surface
,
const
RECT
*
src_rect
)
DECLSPEC_HIDDEN
;
void
surface_validate_location
(
struct
wined3d_surface
*
surface
,
DWORD
location
)
DECLSPEC_HIDDEN
;
void
get_drawable_size_swapchain
(
const
struct
wined3d_context
*
context
,
UINT
*
width
,
UINT
*
height
)
DECLSPEC_HIDDEN
;
void
get_drawable_size_backbuffer
(
const
struct
wined3d_context
*
context
,
UINT
*
width
,
UINT
*
height
)
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