summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_rasterizer.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2020-02-21 00:35:53 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2020-02-28 21:56:43 +0100
commit1bd95a314f07732319a71fca2aba81d400ca4c83 (patch)
treed524ce30dbcf56e26d3b0d93c07aa1715e372779 /src/video_core/renderer_vulkan/vk_rasterizer.cpp
parentgl_rasterizer: Remove num vertex buffers magic number (diff)
downloadyuzu-1bd95a314f07732319a71fca2aba81d400ca4c83.tar
yuzu-1bd95a314f07732319a71fca2aba81d400ca4c83.tar.gz
yuzu-1bd95a314f07732319a71fca2aba81d400ca4c83.tar.bz2
yuzu-1bd95a314f07732319a71fca2aba81d400ca4c83.tar.lz
yuzu-1bd95a314f07732319a71fca2aba81d400ca4c83.tar.xz
yuzu-1bd95a314f07732319a71fca2aba81d400ca4c83.tar.zst
yuzu-1bd95a314f07732319a71fca2aba81d400ca4c83.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index b1be41a21..41cbf4134 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -36,6 +36,7 @@
#include "video_core/renderer_vulkan/vk_sampler_cache.h"
#include "video_core/renderer_vulkan/vk_scheduler.h"
#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h"
+#include "video_core/renderer_vulkan/vk_state_tracker.h"
#include "video_core/renderer_vulkan/vk_texture_cache.h"
#include "video_core/renderer_vulkan/vk_update_descriptor.h"
@@ -277,10 +278,11 @@ void RasterizerVulkan::DrawParameters::Draw(vk::CommandBuffer cmdbuf,
RasterizerVulkan::RasterizerVulkan(Core::System& system, Core::Frontend::EmuWindow& renderer,
VKScreenInfo& screen_info, const VKDevice& device,
VKResourceManager& resource_manager,
- VKMemoryManager& memory_manager, VKScheduler& scheduler)
+ VKMemoryManager& memory_manager, StateTracker& state_tracker,
+ VKScheduler& scheduler)
: RasterizerAccelerated{system.Memory()}, system{system}, render_window{renderer},
screen_info{screen_info}, device{device}, resource_manager{resource_manager},
- memory_manager{memory_manager}, scheduler{scheduler},
+ memory_manager{memory_manager}, state_tracker{state_tracker}, scheduler{scheduler},
staging_pool(device, memory_manager, scheduler), descriptor_pool(device),
update_descriptor_queue(device, scheduler),
quad_array_pass(device, scheduler, descriptor_pool, staging_pool, update_descriptor_queue),
@@ -545,6 +547,10 @@ bool RasterizerVulkan::AccelerateDisplay(const Tegra::FramebufferConfig& config,
return true;
}
+void RasterizerVulkan::SetupDirtyFlags() {
+ state_tracker.Initialize();
+}
+
void RasterizerVulkan::FlushWork() {
static constexpr u32 DRAWS_TO_DISPATCH = 4096;
@@ -568,7 +574,9 @@ void RasterizerVulkan::FlushWork() {
RasterizerVulkan::Texceptions RasterizerVulkan::UpdateAttachments() {
MICROPROFILE_SCOPE(Vulkan_RenderTargets);
- constexpr bool update_rendertargets = true;
+ auto& dirty = system.GPU().Maxwell3D().dirty.flags;
+ const bool update_rendertargets = dirty[VideoCommon::Dirty::RenderTargets];
+ dirty[VideoCommon::Dirty::RenderTargets] = false;
texture_cache.GuardRenderTargets(true);
@@ -971,6 +979,9 @@ void RasterizerVulkan::SetupImage(const Tegra::Texture::TICEntry& tic, const Ima
}
void RasterizerVulkan::UpdateViewportsState(Tegra::Engines::Maxwell3D& gpu) {
+ if (!state_tracker.TouchViewports()) {
+ return;
+ }
const auto& regs = gpu.regs;
const std::array viewports{
GetViewportState(device, regs, 0), GetViewportState(device, regs, 1),