summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp13
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.h12
2 files changed, 24 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 9ea4b6653..e378a5679 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -251,7 +251,7 @@ RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra
251 buffer_cache(*this, maxwell3d, kepler_compute, gpu_memory, cpu_memory_, buffer_cache_runtime), 251 buffer_cache(*this, maxwell3d, kepler_compute, gpu_memory, cpu_memory_, buffer_cache_runtime),
252 pipeline_cache(*this, gpu, maxwell3d, kepler_compute, gpu_memory, device, scheduler, 252 pipeline_cache(*this, gpu, maxwell3d, kepler_compute, gpu_memory, device, scheduler,
253 descriptor_pool, update_descriptor_queue), 253 descriptor_pool, update_descriptor_queue),
254 query_cache{*this, maxwell3d, gpu_memory, device, scheduler}, 254 query_cache{*this, maxwell3d, gpu_memory, device, scheduler}, accelerate_dma{buffer_cache},
255 fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache, device, scheduler), 255 fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache, device, scheduler),
256 wfi_event(device.GetLogical().CreateEvent()), async_shaders(emu_window_) { 256 wfi_event(device.GetLogical().CreateEvent()), async_shaders(emu_window_) {
257 scheduler.SetQueryCache(query_cache); 257 scheduler.SetQueryCache(query_cache);
@@ -660,6 +660,10 @@ bool RasterizerVulkan::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surf
660 return true; 660 return true;
661} 661}
662 662
663Tegra::Engines::AccelerateDMAInterface& RasterizerVulkan::AccessAccelerateDMA() {
664 return accelerate_dma;
665}
666
663bool RasterizerVulkan::AccelerateDisplay(const Tegra::FramebufferConfig& config, 667bool RasterizerVulkan::AccelerateDisplay(const Tegra::FramebufferConfig& config,
664 VAddr framebuffer_addr, u32 pixel_stride) { 668 VAddr framebuffer_addr, u32 pixel_stride) {
665 if (!framebuffer_addr) { 669 if (!framebuffer_addr) {
@@ -698,6 +702,13 @@ void RasterizerVulkan::FlushWork() {
698 draw_counter = 0; 702 draw_counter = 0;
699} 703}
700 704
705AccelerateDMA::AccelerateDMA(BufferCache& buffer_cache_) : buffer_cache{buffer_cache_} {}
706
707bool AccelerateDMA::BufferCopy(GPUVAddr src_address, GPUVAddr dest_address, u64 amount) {
708 std::scoped_lock lock{buffer_cache.mutex};
709 return buffer_cache.DMACopy(src_address, dest_address, amount);
710}
711
701void RasterizerVulkan::SetupShaderDescriptors( 712void RasterizerVulkan::SetupShaderDescriptors(
702 const std::array<Shader*, Maxwell::MaxShaderProgram>& shaders, bool is_indexed) { 713 const std::array<Shader*, Maxwell::MaxShaderProgram>& shaders, bool is_indexed) {
703 image_view_indices.clear(); 714 image_view_indices.clear();
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h
index 5450ccfb5..cb562518d 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.h
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.h
@@ -49,6 +49,16 @@ struct VKScreenInfo;
49 49
50class StateTracker; 50class StateTracker;
51 51
52class AccelerateDMA : public Tegra::Engines::AccelerateDMAInterface {
53public:
54 explicit AccelerateDMA(BufferCache& buffer_cache);
55
56 bool BufferCopy(GPUVAddr start_address, GPUVAddr end_address, u64 amount) override;
57
58 private:
59 BufferCache& buffer_cache;
60};
61
52class RasterizerVulkan final : public VideoCore::RasterizerAccelerated { 62class RasterizerVulkan final : public VideoCore::RasterizerAccelerated {
53public: 63public:
54 explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, 64 explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
@@ -86,6 +96,7 @@ public:
86 bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, 96 bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src,
87 const Tegra::Engines::Fermi2D::Surface& dst, 97 const Tegra::Engines::Fermi2D::Surface& dst,
88 const Tegra::Engines::Fermi2D::Config& copy_config) override; 98 const Tegra::Engines::Fermi2D::Config& copy_config) override;
99 Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override;
89 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, 100 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr,
90 u32 pixel_stride) override; 101 u32 pixel_stride) override;
91 102
@@ -186,6 +197,7 @@ private:
186 BufferCache buffer_cache; 197 BufferCache buffer_cache;
187 VKPipelineCache pipeline_cache; 198 VKPipelineCache pipeline_cache;
188 VKQueryCache query_cache; 199 VKQueryCache query_cache;
200 AccelerateDMA accelerate_dma;
189 VKFenceManager fence_manager; 201 VKFenceManager fence_manager;
190 202
191 vk::Event wfi_event; 203 vk::Event wfi_event;