diff options
| author | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-11-21 01:41:38 -0500 | 
|---|---|---|
| committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-12-05 15:39:00 -0500 | 
| commit | 35d94dcb2b54913f608163fe1c73f8a3ef326fb3 (patch) | |
| tree | 524860aedb2ecee5dbeb0b46adafa3dda99ac68b /src/video_core | |
| parent | 4a13f9eecd49735591613a17c4bfb2d691fbeddc (diff) | |
vk_texture_cache: Add a function to ImageView to check if src image is rescaled
Diffstat (limited to 'src/video_core')
| -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) {          return *buffers[level];      }      const auto new_size = Common::NextPow2(needed_size); -    VkBufferUsageFlags flags = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | -                               VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | -                               VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT; +    static constexpr VkBufferUsageFlags flags = +        VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | +        VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;      buffers[level] = device.GetLogical().CreateBuffer({          .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,          .pNext = nullptr, @@ -1329,6 +1329,10 @@ void Image::DownloadMemory(const StagingBufferRef& map, std::span<const BufferIm      }  } +bool Image::IsRescaled() const noexcept { +    return True(flags & ImageFlagBits::Rescaled); +} +  bool Image::ScaleUp(bool ignore) {      if (True(flags & ImageFlagBits::Rescaled)) {          return false; @@ -1469,7 +1473,8 @@ bool Image::BlitScaleHelper(bool scale_up) {  ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info,                       ImageId image_id_, Image& image)      : VideoCommon::ImageViewBase{info, image.info, image_id_}, device{&runtime.device}, -      image_handle{image.Handle()}, samples{ConvertSampleCount(image.info.num_samples)} { +      src_image{&image}, image_handle{image.Handle()}, +      samples(ConvertSampleCount(image.info.num_samples)) {      using Shader::TextureType;      const VkImageAspectFlags aspect_mask = ImageViewAspectMask(info); @@ -1607,6 +1612,13 @@ VkImageView ImageView::StorageView(Shader::TextureType texture_type,      return *view;  } +bool ImageView::IsRescaled() const noexcept { +    if (!src_image) { +        return false; +    } +    return src_image->IsRescaled(); +} +  vk::ImageView ImageView::MakeView(VkFormat vk_format, VkImageAspectFlags aspect_mask) {      return device->GetLogical().CreateImageView({          .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:          return std::exchange(initialized, true);      } +    bool IsRescaled() const noexcept; +      bool ScaleUp(bool ignore = false);      bool ScaleDown(bool ignore = false); @@ -213,6 +215,8 @@ public:          return buffer_size;      } +    [[nodiscard]] bool IsRescaled() const noexcept; +  private:      struct StorageViews {          std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> signeds; @@ -222,6 +226,8 @@ private:      [[nodiscard]] vk::ImageView MakeView(VkFormat vk_format, VkImageAspectFlags aspect_mask);      const Device* device = nullptr; +    const Image* src_image{}; +      std::array<vk::ImageView, Shader::NUM_TEXTURE_TYPES> image_views;      std::unique_ptr<StorageViews> storage_views;      vk::ImageView depth_view; | 
