summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_opengl/gl_compute_pipeline.cpp3
-rw-r--r--src/video_core/renderer_opengl/gl_graphics_pipeline.cpp3
-rw-r--r--src/video_core/renderer_vulkan/pipeline_helper.h3
-rw-r--r--src/video_core/texture_cache/texture_cache.h16
-rw-r--r--src/video_core/texture_cache/texture_cache_base.h9
5 files changed, 12 insertions, 22 deletions
diff --git a/src/video_core/renderer_opengl/gl_compute_pipeline.cpp b/src/video_core/renderer_opengl/gl_compute_pipeline.cpp
index 12093c3c4..02853b078 100644
--- a/src/video_core/renderer_opengl/gl_compute_pipeline.cpp
+++ b/src/video_core/renderer_opengl/gl_compute_pipeline.cpp
@@ -186,8 +186,7 @@ void ComputePipeline::Configure() {
186 for (u32 index = 0; index < desc.count; ++index) { 186 for (u32 index = 0; index < desc.count; ++index) {
187 ImageView& image_view{texture_cache.GetImageView((views_it++)->id)}; 187 ImageView& image_view{texture_cache.GetImageView((views_it++)->id)};
188 textures[texture_binding] = image_view.Handle(desc.type); 188 textures[texture_binding] = image_view.Handle(desc.type);
189 if (True(texture_cache.GetImage(image_view.image_id).flags & 189 if (texture_cache.IsRescaling(image_view)) {
190 VideoCommon::ImageFlagBits::Rescaled)) {
191 scaling_mask |= 1u << texture_binding; 190 scaling_mask |= 1u << texture_binding;
192 } 191 }
193 ++texture_binding; 192 ++texture_binding;
diff --git a/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp b/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp
index 01aa2897a..c3d549a6e 100644
--- a/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp
+++ b/src/video_core/renderer_opengl/gl_graphics_pipeline.cpp
@@ -472,8 +472,7 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) {
472 for (u32 index = 0; index < desc.count; ++index) { 472 for (u32 index = 0; index < desc.count; ++index) {
473 ImageView& image_view{texture_cache.GetImageView((views_it++)->id)}; 473 ImageView& image_view{texture_cache.GetImageView((views_it++)->id)};
474 textures[texture_binding] = image_view.Handle(desc.type); 474 textures[texture_binding] = image_view.Handle(desc.type);
475 if (True(texture_cache.GetImage(image_view.image_id).flags & 475 if (texture_cache.IsRescaling(image_view)) {
476 VideoCommon::ImageFlagBits::Rescaled)) {
477 scaling_mask |= 1u << stage_texture_binding; 476 scaling_mask |= 1u << stage_texture_binding;
478 } 477 }
479 ++texture_binding; 478 ++texture_binding;
diff --git a/src/video_core/renderer_vulkan/pipeline_helper.h b/src/video_core/renderer_vulkan/pipeline_helper.h
index bf18b34d1..bce4220c6 100644
--- a/src/video_core/renderer_vulkan/pipeline_helper.h
+++ b/src/video_core/renderer_vulkan/pipeline_helper.h
@@ -168,10 +168,9 @@ inline void PushImageDescriptors(TextureCache& texture_cache,
168 const VideoCommon::ImageViewId image_view_id{(views++)->id}; 168 const VideoCommon::ImageViewId image_view_id{(views++)->id};
169 const VkSampler sampler{*(samplers++)}; 169 const VkSampler sampler{*(samplers++)};
170 ImageView& image_view{texture_cache.GetImageView(image_view_id)}; 170 ImageView& image_view{texture_cache.GetImageView(image_view_id)};
171 const Image& image{texture_cache.GetImage(image_view.image_id)};
172 const VkImageView vk_image_view{image_view.Handle(desc.type)}; 171 const VkImageView vk_image_view{image_view.Handle(desc.type)};
173 update_descriptor_queue.AddSampledImage(vk_image_view, sampler); 172 update_descriptor_queue.AddSampledImage(vk_image_view, sampler);
174 rescaling.PushTexture(True(image.flags & VideoCommon::ImageFlagBits::Rescaled)); 173 rescaling.PushTexture(texture_cache.IsRescaling(image_view));
175 } 174 }
176 } 175 }
177 for (const auto& desc : info.image_descriptors) { 176 for (const auto& desc : info.image_descriptors) {
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 4dbded635..0e70c4db2 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -120,16 +120,6 @@ typename P::ImageView& TextureCache<P>::GetImageView(ImageViewId id) noexcept {
120} 120}
121 121
122template <class P> 122template <class P>
123const typename P::Image& TextureCache<P>::GetImage(ImageId id) const noexcept {
124 return slot_images[id];
125}
126
127template <class P>
128typename P::Image& TextureCache<P>::GetImage(ImageId id) noexcept {
129 return slot_images[id];
130}
131
132template <class P>
133void TextureCache<P>::MarkModification(ImageId id) noexcept { 123void TextureCache<P>::MarkModification(ImageId id) noexcept {
134 MarkModification(slot_images[id]); 124 MarkModification(slot_images[id]);
135} 125}
@@ -635,6 +625,12 @@ bool TextureCache<P>::IsRescaling() const noexcept {
635} 625}
636 626
637template <class P> 627template <class P>
628bool TextureCache<P>::IsRescaling(const ImageViewBase& image_view) const noexcept {
629 const ImageBase& image = slot_images[image_view.image_id];
630 return True(image.flags & ImageFlagBits::Rescaled);
631}
632
633template <class P>
638bool TextureCache<P>::IsRegionGpuModified(VAddr addr, size_t size) { 634bool TextureCache<P>::IsRegionGpuModified(VAddr addr, size_t size) {
639 bool is_modified = false; 635 bool is_modified = false;
640 ForEachImageInRegion(addr, size, [&is_modified](ImageId, ImageBase& image) { 636 ForEachImageInRegion(addr, size, [&is_modified](ImageId, ImageBase& image) {
diff --git a/src/video_core/texture_cache/texture_cache_base.h b/src/video_core/texture_cache/texture_cache_base.h
index b6cc09682..8b417b611 100644
--- a/src/video_core/texture_cache/texture_cache_base.h
+++ b/src/video_core/texture_cache/texture_cache_base.h
@@ -21,6 +21,7 @@
21#include "video_core/texture_cache/descriptor_table.h" 21#include "video_core/texture_cache/descriptor_table.h"
22#include "video_core/texture_cache/image_base.h" 22#include "video_core/texture_cache/image_base.h"
23#include "video_core/texture_cache/image_info.h" 23#include "video_core/texture_cache/image_info.h"
24#include "video_core/texture_cache/image_view_base.h"
24#include "video_core/texture_cache/image_view_info.h" 25#include "video_core/texture_cache/image_view_info.h"
25#include "video_core/texture_cache/render_targets.h" 26#include "video_core/texture_cache/render_targets.h"
26#include "video_core/texture_cache/slot_vector.h" 27#include "video_core/texture_cache/slot_vector.h"
@@ -100,12 +101,6 @@ public:
100 /// Return a reference to the given image view id 101 /// Return a reference to the given image view id
101 [[nodiscard]] ImageView& GetImageView(ImageViewId id) noexcept; 102 [[nodiscard]] ImageView& GetImageView(ImageViewId id) noexcept;
102 103
103 /// Return a constant reference to the given image id
104 [[nodiscard]] const Image& GetImage(ImageId id) const noexcept;
105
106 /// Return a reference to the given image id
107 [[nodiscard]] Image& GetImage(ImageId id) noexcept;
108
109 /// Mark an image as modified from the GPU 104 /// Mark an image as modified from the GPU
110 void MarkModification(ImageId id) noexcept; 105 void MarkModification(ImageId id) noexcept;
111 106
@@ -181,6 +176,8 @@ public:
181 176
182 [[nodiscard]] bool IsRescaling() const noexcept; 177 [[nodiscard]] bool IsRescaling() const noexcept;
183 178
179 [[nodiscard]] bool IsRescaling(const ImageViewBase& image_view) const noexcept;
180
184 [[nodiscard]] bool BlackListImage(ImageId image_id); 181 [[nodiscard]] bool BlackListImage(ImageId image_id);
185 182
186 std::mutex mutex; 183 std::mutex mutex;