mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-08 07:51:28 +12:00
rsx: Fix for unnormalized texture access
This commit is contained in:
parent
300a36d3d6
commit
4ca98e53a6
1 changed files with 11 additions and 14 deletions
|
@ -1261,6 +1261,13 @@ namespace rsx
|
||||||
tex_pitch = is_compressed_format? (tex_size / tex_height) : tex_pitch; //NOTE: Compressed textures dont have a real pitch (tex_size = (w*h)/6)
|
tex_pitch = is_compressed_format? (tex_size / tex_height) : tex_pitch; //NOTE: Compressed textures dont have a real pitch (tex_size = (w*h)/6)
|
||||||
if (tex_pitch == 0) tex_pitch = tex_width * get_format_block_size_in_bytes(format);
|
if (tex_pitch == 0) tex_pitch = tex_width * get_format_block_size_in_bytes(format);
|
||||||
|
|
||||||
|
const bool unnormalized = (tex.format() & CELL_GCM_TEXTURE_UN) != 0;
|
||||||
|
f32 scale_x = (unnormalized) ? (1.f / tex_width) : 1.f;
|
||||||
|
f32 scale_y = (unnormalized) ? (1.f / tex_height) : 1.f;
|
||||||
|
|
||||||
|
if (extended_dimension == rsx::texture_dimension_extended::texture_dimension_1d)
|
||||||
|
scale_y = 0.f;
|
||||||
|
|
||||||
if (!is_compressed_format)
|
if (!is_compressed_format)
|
||||||
{
|
{
|
||||||
/* Check if we are re-sampling a subresource of an RTV/DSV texture, bound or otherwise
|
/* Check if we are re-sampling a subresource of an RTV/DSV texture, bound or otherwise
|
||||||
|
@ -1288,16 +1295,9 @@ namespace rsx
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const bool unnormalized = (tex.format() & CELL_GCM_TEXTURE_UN) != 0;
|
|
||||||
f32 scale_x = (unnormalized)? (1.f / tex_width) : 1.f;
|
|
||||||
f32 scale_y = (unnormalized)? (1.f / tex_height) : 1.f;
|
|
||||||
u16 internal_height = rsx::apply_resolution_scale(rsc.h, true);
|
u16 internal_height = rsx::apply_resolution_scale(rsc.h, true);
|
||||||
|
|
||||||
if (extended_dimension == rsx::texture_dimension_extended::texture_dimension_1d)
|
if (extended_dimension == rsx::texture_dimension_extended::texture_dimension_1d)
|
||||||
{
|
|
||||||
internal_height = 1;
|
internal_height = 1;
|
||||||
scale_y = 0.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rsc.is_bound || !g_cfg.video.strict_rendering_mode)
|
if (!rsc.is_bound || !g_cfg.video.strict_rendering_mode)
|
||||||
{
|
{
|
||||||
|
@ -1332,12 +1332,10 @@ namespace rsx
|
||||||
auto cached_texture = find_texture_from_dimensions(texaddr, tex_width, tex_height, depth);
|
auto cached_texture = find_texture_from_dimensions(texaddr, tex_width, tex_height, depth);
|
||||||
if (cached_texture)
|
if (cached_texture)
|
||||||
{
|
{
|
||||||
f32 scale_y = 1.f;
|
if (cached_texture->get_image_type() == rsx::texture_dimension_extended::texture_dimension_1d)
|
||||||
if (extended_dimension == rsx::texture_dimension_extended::texture_dimension_1d ||
|
|
||||||
cached_texture->get_image_type() == rsx::texture_dimension_extended::texture_dimension_1d)
|
|
||||||
scale_y = 0.f;
|
scale_y = 0.f;
|
||||||
|
|
||||||
return{ cached_texture->get_raw_view(), cached_texture->get_context(), cached_texture->is_depth_texture(), 1.f, scale_y, cached_texture->get_image_type() };
|
return{ cached_texture->get_raw_view(), cached_texture->get_context(), cached_texture->is_depth_texture(), scale_x, scale_y, cached_texture->get_image_type() };
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!blit_engine_incompatibility_warning_raised && g_cfg.video.use_gpu_texture_scaling) || is_hw_blit_engine_compatible(format))
|
if ((!blit_engine_incompatibility_warning_raised && g_cfg.video.use_gpu_texture_scaling) || is_hw_blit_engine_compatible(format))
|
||||||
|
@ -1380,9 +1378,8 @@ namespace rsx
|
||||||
}
|
}
|
||||||
|
|
||||||
auto src_image = surface->get_raw_texture();
|
auto src_image = surface->get_raw_texture();
|
||||||
f32 scale_y = (extended_dimension == rsx::texture_dimension_extended::texture_dimension_1d) ? 0.f : 1.f;
|
|
||||||
return{ src_image, surface->get_section_base(), format, offset_x, offset_y, tex_width, tex_height, texture_upload_context::blit_engine_dst,
|
return{ src_image, surface->get_section_base(), format, offset_x, offset_y, tex_width, tex_height, texture_upload_context::blit_engine_dst,
|
||||||
surface->is_depth_texture(), 1.f, scale_y, rsx::texture_dimension_extended::texture_dimension_2d };
|
surface->is_depth_texture(), scale_x, scale_y, rsx::texture_dimension_extended::texture_dimension_2d };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1402,7 +1399,7 @@ namespace rsx
|
||||||
m_texture_memory_in_use += (tex_pitch * tex_height);
|
m_texture_memory_in_use += (tex_pitch * tex_height);
|
||||||
return{ upload_image_from_cpu(cmd, texaddr, tex_width, tex_height, depth, tex.get_exact_mipmap_count(), tex_pitch, format,
|
return{ upload_image_from_cpu(cmd, texaddr, tex_width, tex_height, depth, tex.get_exact_mipmap_count(), tex_pitch, format,
|
||||||
texture_upload_context::shader_read, subresources_layout, extended_dimension, is_swizzled, remap_vector)->get_raw_view(),
|
texture_upload_context::shader_read, subresources_layout, extended_dimension, is_swizzled, remap_vector)->get_raw_view(),
|
||||||
texture_upload_context::shader_read, false, 1.f, 1.f, extended_dimension };
|
texture_upload_context::shader_read, false, scale_x, scale_y, extended_dimension };
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename surface_store_type, typename blitter_type, typename ...Args>
|
template <typename surface_store_type, typename blitter_type, typename ...Args>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue