summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar ameerj2021-10-12 00:35:01 -0400
committerGravatar Fernando Sahmkow2021-11-16 22:11:31 +0100
commitabd07e41582b6d8f7efdedb936cdd7a7fddf9912 (patch)
tree4b1b3c2a676abc935517b669566068270029b6d3 /src/video_core/renderer_vulkan
parenttexture_cache: Fix image resolves when src/dst are not both scaled (diff)
downloadyuzu-abd07e41582b6d8f7efdedb936cdd7a7fddf9912.tar.gz
yuzu-abd07e41582b6d8f7efdedb936cdd7a7fddf9912.tar.xz
yuzu-abd07e41582b6d8f7efdedb936cdd7a7fddf9912.zip
video_core: Refactor resolution scale function
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.cpp19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
index 65506f75e..caefce5fc 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
@@ -607,16 +607,13 @@ void BlitScale(VKScheduler& scheduler, VkImage src_image, VkImage dst_image, con
607 scheduler.RequestOutsideRenderPassOperationContext(); 607 scheduler.RequestOutsideRenderPassOperationContext();
608 scheduler.Record([dst_image, src_image, extent, resources, aspect_mask, resolution, type, 608 scheduler.Record([dst_image, src_image, extent, resources, aspect_mask, resolution, type,
609 scaling, vk_filter](vk::CommandBuffer cmdbuf) { 609 scaling, vk_filter](vk::CommandBuffer cmdbuf) {
610 const auto scale_up = [&](u32 value) {
611 return std::max<u32>((value * resolution.up_scale) >> resolution.down_shift, 1U);
612 };
613 const VkOffset2D src_size{ 610 const VkOffset2D src_size{
614 .x = static_cast<s32>(scaling ? extent.width : scale_up(extent.width)), 611 .x = static_cast<s32>(scaling ? extent.width : resolution.ScaleUp(extent.width)),
615 .y = static_cast<s32>(scaling ? extent.height : scale_up(extent.height)), 612 .y = static_cast<s32>(scaling ? extent.height : resolution.ScaleUp(extent.height)),
616 }; 613 };
617 const VkOffset2D dst_size{ 614 const VkOffset2D dst_size{
618 .x = static_cast<s32>(scaling ? scale_up(extent.width) : extent.width), 615 .x = static_cast<s32>(scaling ? resolution.ScaleUp(extent.width) : extent.width),
619 .y = static_cast<s32>(scaling ? scale_up(extent.height) : extent.height), 616 .y = static_cast<s32>(scaling ? resolution.ScaleUp(extent.height) : extent.height),
620 }; 617 };
621 boost::container::small_vector<VkImageBlit, 4> regions; 618 boost::container::small_vector<VkImageBlit, 4> regions;
622 regions.reserve(resources.levels); 619 regions.reserve(resources.levels);
@@ -1144,13 +1141,9 @@ bool Image::ScaleUp() {
1144 return false; 1141 return false;
1145 } 1142 }
1146 if (!scaled_image) { 1143 if (!scaled_image) {
1147 const u32 up = resolution.up_scale;
1148 const u32 down = resolution.down_shift;
1149 const auto scale = [&](u32 value) { return std::max<u32>((value * up) >> down, 1U); };
1150
1151 const bool is_2d = info.type == ImageType::e2D; 1144 const bool is_2d = info.type == ImageType::e2D;
1152 const u32 scaled_width = scale(info.size.width); 1145 const u32 scaled_width = resolution.ScaleUp(info.size.width);
1153 const u32 scaled_height = is_2d ? scale(info.size.height) : info.size.height; 1146 const u32 scaled_height = is_2d ? resolution.ScaleUp(info.size.height) : info.size.height;
1154 auto scaled_info = info; 1147 auto scaled_info = info;
1155 scaled_info.size.width = scaled_width; 1148 scaled_info.size.width = scaled_width;
1156 scaled_info.size.height = scaled_height; 1149 scaled_info.size.height = scaled_height;