wined3d: Use a single wined3d_texture_is_full_rect() function.
Signed-off-by: Paul Gofman <pgofman@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
079caeaa8d
commit
a389f32967
|
@ -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;
|
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 */
|
/* See also float_16_to_32() in wined3d_private.h */
|
||||||
static inline unsigned short float_32_to_16(const float *in)
|
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");
|
TRACE("Not doing download because the source format needs conversion.\n");
|
||||||
else if (!(src_texture->flags & WINED3D_TEXTURE_DOWNLOADABLE))
|
else if (!(src_texture->flags & WINED3D_TEXTURE_DOWNLOADABLE))
|
||||||
TRACE("Not doing download because texture is not downloadable.\n");
|
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");
|
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");
|
TRACE("Not doing download because of partial download (dst).\n");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -48,19 +48,6 @@ struct wined3d_rect_f
|
||||||
float b;
|
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)
|
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]
|
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
|
* in fact harmful if we're being called by surface_load_location() with
|
||||||
* the purpose of loading the destination surface.) */
|
* the purpose of loading the destination surface.) */
|
||||||
wined3d_texture_load_location(src_texture, src_sub_resource_idx, context, src_location);
|
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);
|
wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, dst_location);
|
||||||
else
|
else
|
||||||
wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, dst_location);
|
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
|
/* Make sure the locations are up-to-date. Loading the destination
|
||||||
* surface isn't required if the entire surface is overwritten. */
|
* surface isn't required if the entire surface is overwritten. */
|
||||||
wined3d_texture_load_location(src_texture, src_sub_resource_idx, context, src_location);
|
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);
|
wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, dst_location);
|
||||||
else
|
else
|
||||||
wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, dst_location);
|
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)
|
if (!location)
|
||||||
location = dst_texture->flags & WINED3D_TEXTURE_IS_SRGB
|
location = dst_texture->flags & WINED3D_TEXTURE_IS_SRGB
|
||||||
? WINED3D_LOCATION_TEXTURE_SRGB : WINED3D_LOCATION_TEXTURE_RGB;
|
? 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))
|
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));
|
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))
|
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");
|
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,
|
if (!wined3d_texture_prepare_location(dst_texture,
|
||||||
dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB))
|
dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB))
|
||||||
|
|
|
@ -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));
|
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,
|
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,
|
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,
|
unsigned int src_sub_resource_idx, const struct wined3d_box *src_box, DWORD flags,
|
||||||
|
|
Loading…
Reference in New Issue