mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-27 09:12:46 +01:00
texture_cache: Add getter to query if image view is rescaled
This commit is contained in:
parent
526e47f148
commit
c7a1cbad44
5 changed files with 12 additions and 22 deletions
|
@ -186,8 +186,7 @@ void ComputePipeline::Configure() {
|
||||||
for (u32 index = 0; index < desc.count; ++index) {
|
for (u32 index = 0; index < desc.count; ++index) {
|
||||||
ImageView& image_view{texture_cache.GetImageView((views_it++)->id)};
|
ImageView& image_view{texture_cache.GetImageView((views_it++)->id)};
|
||||||
textures[texture_binding] = image_view.Handle(desc.type);
|
textures[texture_binding] = image_view.Handle(desc.type);
|
||||||
if (True(texture_cache.GetImage(image_view.image_id).flags &
|
if (texture_cache.IsRescaling(image_view)) {
|
||||||
VideoCommon::ImageFlagBits::Rescaled)) {
|
|
||||||
scaling_mask |= 1u << texture_binding;
|
scaling_mask |= 1u << texture_binding;
|
||||||
}
|
}
|
||||||
++texture_binding;
|
++texture_binding;
|
||||||
|
|
|
@ -472,8 +472,7 @@ void GraphicsPipeline::ConfigureImpl(bool is_indexed) {
|
||||||
for (u32 index = 0; index < desc.count; ++index) {
|
for (u32 index = 0; index < desc.count; ++index) {
|
||||||
ImageView& image_view{texture_cache.GetImageView((views_it++)->id)};
|
ImageView& image_view{texture_cache.GetImageView((views_it++)->id)};
|
||||||
textures[texture_binding] = image_view.Handle(desc.type);
|
textures[texture_binding] = image_view.Handle(desc.type);
|
||||||
if (True(texture_cache.GetImage(image_view.image_id).flags &
|
if (texture_cache.IsRescaling(image_view)) {
|
||||||
VideoCommon::ImageFlagBits::Rescaled)) {
|
|
||||||
scaling_mask |= 1u << stage_texture_binding;
|
scaling_mask |= 1u << stage_texture_binding;
|
||||||
}
|
}
|
||||||
++texture_binding;
|
++texture_binding;
|
||||||
|
|
|
@ -168,10 +168,9 @@ inline void PushImageDescriptors(TextureCache& texture_cache,
|
||||||
const VideoCommon::ImageViewId image_view_id{(views++)->id};
|
const VideoCommon::ImageViewId image_view_id{(views++)->id};
|
||||||
const VkSampler sampler{*(samplers++)};
|
const VkSampler sampler{*(samplers++)};
|
||||||
ImageView& image_view{texture_cache.GetImageView(image_view_id)};
|
ImageView& image_view{texture_cache.GetImageView(image_view_id)};
|
||||||
const Image& image{texture_cache.GetImage(image_view.image_id)};
|
|
||||||
const VkImageView vk_image_view{image_view.Handle(desc.type)};
|
const VkImageView vk_image_view{image_view.Handle(desc.type)};
|
||||||
update_descriptor_queue.AddSampledImage(vk_image_view, sampler);
|
update_descriptor_queue.AddSampledImage(vk_image_view, sampler);
|
||||||
rescaling.PushTexture(True(image.flags & VideoCommon::ImageFlagBits::Rescaled));
|
rescaling.PushTexture(texture_cache.IsRescaling(image_view));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const auto& desc : info.image_descriptors) {
|
for (const auto& desc : info.image_descriptors) {
|
||||||
|
|
|
@ -119,16 +119,6 @@ typename P::ImageView& TextureCache<P>::GetImageView(ImageViewId id) noexcept {
|
||||||
return slot_image_views[id];
|
return slot_image_views[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class P>
|
|
||||||
const typename P::Image& TextureCache<P>::GetImage(ImageId id) const noexcept {
|
|
||||||
return slot_images[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class P>
|
|
||||||
typename P::Image& TextureCache<P>::GetImage(ImageId id) noexcept {
|
|
||||||
return slot_images[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class P>
|
template <class P>
|
||||||
void TextureCache<P>::MarkModification(ImageId id) noexcept {
|
void TextureCache<P>::MarkModification(ImageId id) noexcept {
|
||||||
MarkModification(slot_images[id]);
|
MarkModification(slot_images[id]);
|
||||||
|
@ -634,6 +624,12 @@ bool TextureCache<P>::IsRescaling() const noexcept {
|
||||||
return is_rescaling;
|
return is_rescaling;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class P>
|
||||||
|
bool TextureCache<P>::IsRescaling(const ImageViewBase& image_view) const noexcept {
|
||||||
|
const ImageBase& image = slot_images[image_view.image_id];
|
||||||
|
return True(image.flags & ImageFlagBits::Rescaled);
|
||||||
|
}
|
||||||
|
|
||||||
template <class P>
|
template <class P>
|
||||||
bool TextureCache<P>::IsRegionGpuModified(VAddr addr, size_t size) {
|
bool TextureCache<P>::IsRegionGpuModified(VAddr addr, size_t size) {
|
||||||
bool is_modified = false;
|
bool is_modified = false;
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "video_core/texture_cache/descriptor_table.h"
|
#include "video_core/texture_cache/descriptor_table.h"
|
||||||
#include "video_core/texture_cache/image_base.h"
|
#include "video_core/texture_cache/image_base.h"
|
||||||
#include "video_core/texture_cache/image_info.h"
|
#include "video_core/texture_cache/image_info.h"
|
||||||
|
#include "video_core/texture_cache/image_view_base.h"
|
||||||
#include "video_core/texture_cache/image_view_info.h"
|
#include "video_core/texture_cache/image_view_info.h"
|
||||||
#include "video_core/texture_cache/render_targets.h"
|
#include "video_core/texture_cache/render_targets.h"
|
||||||
#include "video_core/texture_cache/slot_vector.h"
|
#include "video_core/texture_cache/slot_vector.h"
|
||||||
|
@ -100,12 +101,6 @@ public:
|
||||||
/// Return a reference to the given image view id
|
/// Return a reference to the given image view id
|
||||||
[[nodiscard]] ImageView& GetImageView(ImageViewId id) noexcept;
|
[[nodiscard]] ImageView& GetImageView(ImageViewId id) noexcept;
|
||||||
|
|
||||||
/// Return a constant reference to the given image id
|
|
||||||
[[nodiscard]] const Image& GetImage(ImageId id) const noexcept;
|
|
||||||
|
|
||||||
/// Return a reference to the given image id
|
|
||||||
[[nodiscard]] Image& GetImage(ImageId id) noexcept;
|
|
||||||
|
|
||||||
/// Mark an image as modified from the GPU
|
/// Mark an image as modified from the GPU
|
||||||
void MarkModification(ImageId id) noexcept;
|
void MarkModification(ImageId id) noexcept;
|
||||||
|
|
||||||
|
@ -181,6 +176,8 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] bool IsRescaling() const noexcept;
|
[[nodiscard]] bool IsRescaling() const noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]] bool IsRescaling(const ImageViewBase& image_view) const noexcept;
|
||||||
|
|
||||||
[[nodiscard]] bool BlackListImage(ImageId image_id);
|
[[nodiscard]] bool BlackListImage(ImageId image_id);
|
||||||
|
|
||||||
std::mutex mutex;
|
std::mutex mutex;
|
||||||
|
|
Loading…
Reference in a new issue