mirror of
https://github.com/citra-emu/citra.git
synced 2024-11-22 12:30:06 +00:00
vk_renderpass_cache: Bring back renderpass flushing
This commit is contained in:
parent
66c5f59627
commit
fd38e33fb2
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
|
constexpr u32 MIN_DRAWS_TO_FLUSH = 20;
|
||||||
|
|
||||||
using VideoCore::PixelFormat;
|
using VideoCore::PixelFormat;
|
||||||
using VideoCore::SurfaceType;
|
using VideoCore::SurfaceType;
|
||||||
|
|
||||||
@ -46,6 +48,7 @@ void RenderpassCache::BeginRendering(const Framebuffer* framebuffer,
|
|||||||
|
|
||||||
void RenderpassCache::BeginRendering(const RenderPass& new_pass) {
|
void RenderpassCache::BeginRendering(const RenderPass& new_pass) {
|
||||||
if (pass == new_pass) [[likely]] {
|
if (pass == new_pass) [[likely]] {
|
||||||
|
num_draws++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,6 +114,13 @@ void RenderpassCache::EndRendering() {
|
|||||||
vk::DependencyFlagBits::eByRegion, 0, nullptr, 0, nullptr,
|
vk::DependencyFlagBits::eByRegion, 0, nullptr, 0, nullptr,
|
||||||
num_barriers, barriers.data());
|
num_barriers, barriers.data());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// The Mali guide recommends flushing at the end of each major renderpass
|
||||||
|
// Testing has shown this has a significant effect on rendering performance
|
||||||
|
if (num_draws > MIN_DRAWS_TO_FLUSH && instance.ShouldFlush()) {
|
||||||
|
scheduler.Flush();
|
||||||
|
num_draws = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vk::RenderPass RenderpassCache::GetRenderpass(VideoCore::PixelFormat color,
|
vk::RenderPass RenderpassCache::GetRenderpass(VideoCore::PixelFormat color,
|
||||||
|
@ -68,6 +68,7 @@ private:
|
|||||||
std::array<vk::Image, 2> images;
|
std::array<vk::Image, 2> images;
|
||||||
std::array<vk::ImageAspectFlags, 2> aspects;
|
std::array<vk::ImageAspectFlags, 2> aspects;
|
||||||
RenderPass pass{};
|
RenderPass pass{};
|
||||||
|
u32 num_draws{};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Vulkan
|
} // namespace Vulkan
|
||||||
|
Loading…
Reference in New Issue
Block a user