summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ameerj2021-11-21 01:41:38 -0500
committerGravatar ameerj2021-12-05 15:39:00 -0500
commit35d94dcb2b54913f608163fe1c73f8a3ef326fb3 (patch)
tree524860aedb2ecee5dbeb0b46adafa3dda99ac68b /src
parentblit_image: Refactor ConvertPipeline functions (diff)
downloadyuzu-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.cpp20
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.h6
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
1332bool Image::IsRescaled() const noexcept {
1333 return True(flags & ImageFlagBits::Rescaled);
1334}
1335
1332bool Image::ScaleUp(bool ignore) { 1336bool 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) {
1469ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewInfo& info, 1473ImageView::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
1615bool ImageView::IsRescaled() const noexcept {
1616 if (!src_image) {
1617 return false;
1618 }
1619 return src_image->IsRescaled();
1620}
1621
1610vk::ImageView ImageView::MakeView(VkFormat vk_format, VkImageAspectFlags aspect_mask) { 1622vk::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
216private: 220private:
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;