From: Paul Gofman pgofman@codeweavers.com
Signed-off-by: Paul Gofman pgofman@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com --- This supersedes patch 185895.
dlls/wined3d/surface.c | 17 ++--------------- dlls/wined3d/texture.c | 21 ++++----------------- dlls/wined3d/wined3d_private.h | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 32 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index d8bf9ce04e6..bdcbdf5a2a7 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -44,19 +44,6 @@ static void get_color_masks(const struct wined3d_format *format, DWORD *masks) masks[2] = ((1u << format->blue_size) - 1) << format->blue_offset; }
-static BOOL texture2d_is_full_rect(const struct wined3d_texture *texture, unsigned int level, const RECT *r) -{ - unsigned int t; - - t = wined3d_texture_get_level_width(texture, level); - if ((r->left && r->right) || abs(r->right - r->left) != t) - return FALSE; - t = wined3d_texture_get_level_height(texture, level); - if ((r->top && r->bottom) || abs(r->bottom - r->top) != t) - return FALSE; - return TRUE; -} - /* See also float_16_to_32() in wined3d_private.h */ static inline unsigned short float_32_to_16(const float *in) { @@ -1664,9 +1651,9 @@ HRESULT texture2d_blt(struct wined3d_texture *dst_texture, unsigned int dst_sub_ TRACE("Not doing download because the source format needs conversion.\n"); else if (!(src_texture->flags & WINED3D_TEXTURE_DOWNLOADABLE)) TRACE("Not doing download because texture is not downloadable.\n"); - else if (!texture2d_is_full_rect(src_texture, src_sub_resource_idx % src_texture->level_count, &src_rect)) + else if (!wined3d_texture_is_full_rect(src_texture, src_sub_resource_idx % src_texture->level_count, &src_rect)) TRACE("Not doing download because of partial download (src).\n"); - else if (!texture2d_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, &dst_rect)) + else if (!wined3d_texture_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, &dst_rect)) TRACE("Not doing download because of partial download (dst).\n"); else { diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index e8a92acab9c..bef2c4ec303 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -48,19 +48,6 @@ struct wined3d_rect_f float b; };
-static bool texture2d_is_full_rect(const struct wined3d_texture *texture, unsigned int level, const RECT *r) -{ - unsigned int t; - - t = wined3d_texture_get_level_width(texture, level); - if ((r->left && r->right) || abs(r->right - r->left) != t) - return false; - t = wined3d_texture_get_level_height(texture, level); - if ((r->top && r->bottom) || abs(r->bottom - r->top) != t) - return false; - return true; -} - static BOOL wined3d_texture_use_pbo(const struct wined3d_texture *texture, const struct wined3d_gl_info *gl_info) { if (!gl_info->supported[ARB_PIXEL_BUFFER_OBJECT] @@ -366,7 +353,7 @@ static void texture2d_blt_fbo(struct wined3d_device *device, struct wined3d_cont * in fact harmful if we're being called by surface_load_location() with * the purpose of loading the destination surface.) */ wined3d_texture_load_location(src_texture, src_sub_resource_idx, context, src_location); - if (!texture2d_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, dst_rect)) + if (!wined3d_texture_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, dst_rect)) wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, dst_location); else wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, dst_location); @@ -498,7 +485,7 @@ static void texture2d_depth_blt_fbo(const struct wined3d_device *device, struct /* Make sure the locations are up-to-date. Loading the destination * surface isn't required if the entire surface is overwritten. */ wined3d_texture_load_location(src_texture, src_sub_resource_idx, context, src_location); - if (!texture2d_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, dst_rect)) + if (!wined3d_texture_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, dst_rect)) wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, dst_location); else wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, dst_location); @@ -6019,7 +6006,7 @@ static DWORD raw_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_blit if (!location) location = dst_texture->flags & WINED3D_TEXTURE_IS_SRGB ? WINED3D_LOCATION_TEXTURE_SRGB : WINED3D_LOCATION_TEXTURE_RGB; - if (texture2d_is_full_rect(dst_texture, dst_level, dst_rect)) + if (wined3d_texture_is_full_rect(dst_texture, dst_level, dst_rect)) { if (!wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, location)) ERR("Failed to prepare the destination sub-resource into %s.\n", wined3d_debug_location(location)); @@ -6491,7 +6478,7 @@ static DWORD vk_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_blit_ if (!wined3d_texture_load_location(src_texture, src_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB)) ERR("Failed to load the source sub-resource.\n");
- if (texture2d_is_full_rect(dst_texture, dst_level, dst_rect)) + if (wined3d_texture_is_full_rect(dst_texture, dst_level, dst_rect)) { if (!wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB)) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index ae78a60f2ab..49379b3ca5d 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4169,6 +4169,20 @@ static inline void wined3d_texture_get_level_box(const struct wined3d_texture *t 0, wined3d_texture_get_level_depth(texture, level)); }
+static inline bool wined3d_texture_is_full_rect(const struct wined3d_texture *texture, + unsigned int level, const RECT *r) +{ + unsigned int t; + + t = wined3d_texture_get_level_width(texture, level); + if ((r->left && r->right) || abs(r->right - r->left) != t) + return false; + t = wined3d_texture_get_level_height(texture, level); + if ((r->top && r->bottom) || abs(r->bottom - r->top) != t) + return false; + return true; +} + HRESULT texture2d_blt(struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx, const struct wined3d_box *dst_box, struct wined3d_texture *src_texture, unsigned int src_sub_resource_idx, const struct wined3d_box *src_box, DWORD flags,