diff options
| author | 2021-11-21 01:41:38 -0500 | |
|---|---|---|
| committer | 2021-12-05 15:39:00 -0500 | |
| commit | 35d94dcb2b54913f608163fe1c73f8a3ef326fb3 (patch) | |
| tree | 524860aedb2ecee5dbeb0b46adafa3dda99ac68b /src | |
| parent | blit_image: Refactor ConvertPipeline functions (diff) | |
| download | yuzu-35d94dcb2b54913f608163fe1c73f8a3ef326fb3.tar.gz yuzu-35d94dcb2b54913f608163fe1c73f8a3ef326fb3.tar.xz yuzu-35d94dcb2b54913f608163fe1c73f8a3ef326fb3.zip | |
vk_texture_cache: Add a function to ImageView to check if src image is rescaled
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_texture_cache.cpp | 20 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_texture_cache.h | 6 |
2 files changed, 22 insertions, 4 deletions
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 51246d46f..c5ddaf576 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp | |||
| @@ -797,9 +797,9 @@ VkBuffer TextureCacheRuntime::GetTemporaryBuffer(size_t needed_size) { | |||
| 797 | return *buffers[level]; | 797 | return *buffers[level]; |
| 798 | } | 798 | } |
| 799 | const auto new_size = Common::NextPow2(needed_size); | 799 | const auto new_size = Common::NextPow2(needed_size); |
| 800 | VkBufferUsageFlags flags = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | | 800 | static constexpr VkBufferUsageFlags flags = |
| 801 | VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | | 801 | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | |
| 802 | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT; | 802 | VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT; |
| 803 | buffers[level] = device.GetLogical().CreateBuffer({ | 803 | buffers[level] = device.GetLogical().CreateBuffer({ |
| 804 | .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, | 804 | .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, |
| 805 | .pNext = nullptr, | 805 | .pNext = nullptr, |
| @@ -1329,6 +1329,10 @@ void Image::DownloadMemory(const StagingBufferRef& map, std::span<const BufferIm | |||
| 1329 | } | 1329 | } |
| 1330 | } | 1330 | } |
| 1331 | 1331 | ||
| 1332 | bool Image::IsRescaled() const noexcept { | ||
| 1333 | return True(flags & ImageFlagBits::Rescaled); | ||
| 1334 | } | ||
| 1335 | |||
| 1332 | bool Image::ScaleUp(bool ignore) { | 1336 | bool Image::ScaleUp(bool ignore) { |
| 1333 | if (True(flags & ImageFlagBits::Rescaled)) { | 1337 | if (True(flags & ImageFlagBits::Rescaled)) { |
| 1334 | return false; | 1338 | return false; |
| @@ -1469,7 +1473,8 @@ bool Image::BlitScaleHelper(bool scale_up) { | |||
| 1469 | ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info, | 1473 | ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info, |
| 1470 | ImageId image_id_, Image& image) | 1474 | ImageId image_id_, Image& image) |
| 1471 | : VideoCommon::ImageViewBase{info, image.info, image_id_}, device{&runtime.device}, | 1475 | : VideoCommon::ImageViewBase{info, image.info, image_id_}, device{&runtime.device}, |
| 1472 | image_handle{image.Handle()}, samples{ConvertSampleCount(image.info.num_samples)} { | 1476 | src_image{&image}, image_handle{image.Handle()}, |
| 1477 | samples(ConvertSampleCount(image.info.num_samples)) { | ||
| 1473 | using Shader::TextureType; | 1478 | using Shader::TextureType; |
| 1474 | 1479 | ||
| 1475 | const VkImageAspectFlags aspect_mask = ImageViewAspectMask(info); | 1480 | const VkImageAspectFlags aspect_mask = ImageViewAspectMask(info); |
| @@ -1607,6 +1612,13 @@ VkImageView ImageView::StorageView(Shader::TextureType texture_type, | |||
| 1607 | return *view; | 1612 | return *view; |
| 1608 | } | 1613 | } |
| 1609 | 1614 | ||
| 1615 | bool ImageView::IsRescaled() const noexcept { | ||
| 1616 | if (!src_image) { | ||
| 1617 | return false; | ||
| 1618 | } | ||
| 1619 | return src_image->IsRescaled(); | ||
| 1620 | } | ||
| 1621 | |||
| 1610 | vk::ImageView ImageView::MakeView(VkFormat vk_format, VkImageAspectFlags aspect_mask) { | 1622 | vk::ImageView ImageView::MakeView(VkFormat vk_format, VkImageAspectFlags aspect_mask) { |
| 1611 | return device->GetLogical().CreateImageView({ | 1623 | return device->GetLogical().CreateImageView({ |
| 1612 | .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, | 1624 | .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, |
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.h b/src/video_core/renderer_vulkan/vk_texture_cache.h index 753e3e8a1..e80978842 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.h +++ b/src/video_core/renderer_vulkan/vk_texture_cache.h | |||
| @@ -139,6 +139,8 @@ public: | |||
| 139 | return std::exchange(initialized, true); | 139 | return std::exchange(initialized, true); |
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | bool IsRescaled() const noexcept; | ||
| 143 | |||
| 142 | bool ScaleUp(bool ignore = false); | 144 | bool ScaleUp(bool ignore = false); |
| 143 | 145 | ||
| 144 | bool ScaleDown(bool ignore = false); | 146 | bool ScaleDown(bool ignore = false); |
| @@ -213,6 +215,8 @@ public: | |||
| 213 | return buffer_size; | 215 | return buffer_size; |
| 214 | } | 216 | } |
| 215 | 217 | ||
| 218 | [[nodiscard]] bool IsRescaled() const noexcept; | ||
| 219 | |||
| 216 | private: | 220 | private: |
| 217 | struct StorageViews { | 221 | struct StorageViews { |
| 218 | std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> signeds; | 222 | std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> signeds; |
| @@ -222,6 +226,8 @@ private: | |||
| 222 | [[nodiscard]] vk::ImageView MakeView(VkFormat vk_format, VkImageAspectFlags aspect_mask); | 226 | [[nodiscard]] vk::ImageView MakeView(VkFormat vk_format, VkImageAspectFlags aspect_mask); |
| 223 | 227 | ||
| 224 | const Device* device = nullptr; | 228 | const Device* device = nullptr; |
| 229 | const Image* src_image{}; | ||
| 230 | |||
| 225 | std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> image_views; | 231 | std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> image_views; |
| 226 | std::unique_ptr<StorageViews> storage_views; | 232 | std::unique_ptr<StorageViews> storage_views; |
| 227 | vk::ImageView depth_view; | 233 | vk::ImageView depth_view; |