rsx: fix 3D aspect ratio

This commit is contained in:
Megamouse
2025-09-12 03:22:17 +02:00
parent a2a3ce1d7a
commit 6106e8f79f
4 changed files with 19 additions and 7 deletions
+3 -3
View File
@@ -187,9 +187,9 @@ void GLGSRender::flip(const rsx::display_flip_info_t& info)
if (!buffer_pitch)
buffer_pitch = buffer_width * avconfig.get_bpp();
const u32 video_frame_height = (avconfig.stereo_mode == stereo_render_mode_options::disabled ? avconfig.resolution_y : ((avconfig.resolution_y - 30) / 2));
buffer_width = std::min(buffer_width, avconfig.resolution_x);
buffer_height = std::min(buffer_height, video_frame_height);
const size2u video_frame_size = avconfig.video_frame_size();
buffer_width = std::min(buffer_width, video_frame_size.width);
buffer_height = std::min(buffer_height, video_frame_size.height);
}
else
{
+3 -3
View File
@@ -457,9 +457,9 @@ void VKGSRender::flip(const rsx::display_flip_info_t& info)
if (!buffer_pitch)
buffer_pitch = buffer_width * avconfig.get_bpp();
const u32 video_frame_height = (avconfig.stereo_mode == stereo_render_mode_options::disabled ? avconfig.resolution_y : ((avconfig.resolution_y - 30) / 2));
buffer_width = std::min(buffer_width, avconfig.resolution_x);
buffer_height = std::min(buffer_height, video_frame_height);
const size2u video_frame_size = avconfig.video_frame_size();
buffer_width = std::min(buffer_width, video_frame_size.width);
buffer_height = std::min(buffer_height, video_frame_size.height);
}
else
{
+11 -1
View File
@@ -187,6 +187,16 @@ namespace rsx
}
}
size2u avconf::video_frame_size() const
{
if (state && stereo_mode != stereo_render_mode_options::disabled)
{
return size2u{ resolution_x, (resolution_y - 30) / 2 };
}
return size2u{ resolution_x, resolution_y };
}
size2u avconf::aspect_convert_dimensions(const size2u& image_dimensions) const
{
if (image_dimensions.width == 0 || image_dimensions.height == 0)
@@ -210,7 +220,7 @@ namespace rsx
// Fit the input image into the virtual display 'window'
const auto source_aspect = 1. * image_dimensions.width / image_dimensions.height;
const auto virtual_output = size2u{ resolution_x, resolution_y };
const auto virtual_output = video_frame_size();
const auto area1 = convert_aspect_ratio_impl(virtual_output, source_aspect);
// Fit the virtual display into the physical display
+2
View File
@@ -172,6 +172,8 @@ namespace rsx
u8 get_bpp() const;
double get_aspect_ratio() const;
size2u video_frame_size() const;
areau aspect_convert_region(const size2u& image_dimensions, const size2u& output_dimensions) const;
size2u aspect_convert_dimensions(const size2u& image_dimensions) const;
};