rsx: Fix invalid format checks for DMA sections which are typeless

This commit is contained in:
kd-11 2019-11-18 21:39:40 +03:00 committed by kd-11
commit 41c3180276

View file

@ -2247,37 +2247,40 @@ namespace rsx
dst_area = old_dst_area; dst_area = old_dst_area;
} }
const bool format_check = (src_is_render_target || is_format_convert); if (cached_dest && cached_dest->get_context() != texture_upload_context::dma)
if (!use_null_region && cached_dest && format_check)
{ {
bool src_is_depth; // NOTE: DMA sections are plain memory blocks with no format!
if (is_format_convert) if (src_is_render_target || is_format_convert)
{ {
src_is_depth = false; bool src_is_depth;
} if (is_format_convert)
else {
{ src_is_depth = false;
verify(HERE), src_is_render_target; }
src_is_depth = (typeless_info.src_is_typeless)? false : src_subres.is_depth; else
{
verify(HERE), src_is_render_target;
src_is_depth = (typeless_info.src_is_typeless) ? false : src_subres.is_depth;
}
if (cached_dest->is_depth_texture() != src_is_depth)
{
// Opt to cancel the destination. Can also use typeless convert
LOG_WARNING(RSX, "Format mismatch on blit destination block. Performance warning.");
// The invalidate call before creating a new target will remove this section
cached_dest = nullptr;
dest_texture = 0;
dst_area = old_dst_area;
}
} }
if (cached_dest->is_depth_texture() != src_is_depth) if (LIKELY(cached_dest))
{ {
// Opt to cancel the destination. Can also use typeless convert typeless_info.dst_gcm_format = cached_dest->get_gcm_format();
LOG_WARNING(RSX, "Format mismatch on blit destination block. Performance warning."); dst_is_depth_surface = cached_dest->is_depth_texture();
// The invalidate call before creating a new target will remove this section
cached_dest = nullptr;
dest_texture = 0;
dst_area = old_dst_area;
} }
} }
if (LIKELY(cached_dest))
{
typeless_info.dst_gcm_format = cached_dest->get_gcm_format();
dst_is_depth_surface = cached_dest->is_depth_texture();
}
} }
else else
{ {