diff options
| author | 2021-10-12 00:35:01 -0400 | |
|---|---|---|
| committer | 2021-11-16 22:11:31 +0100 | |
| commit | abd07e41582b6d8f7efdedb936cdd7a7fddf9912 (patch) | |
| tree | 4b1b3c2a676abc935517b669566068270029b6d3 /src/video_core/renderer_vulkan | |
| parent | texture_cache: Fix image resolves when src/dst are not both scaled (diff) | |
| download | yuzu-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.cpp | 19 |
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; |