diff options
| author | 2021-07-12 12:49:11 -0400 | |
|---|---|---|
| committer | 2021-07-12 12:49:11 -0400 | |
| commit | 776f391ff6cb37e63241d3513a140662c5a69f08 (patch) | |
| tree | 9cf19af1b1826261a27a75a744c6415271dadd2d /src/video_core/renderer_vulkan | |
| parent | Merge pull request #6577 from ReinUsesLisp/precommit (diff) | |
| parent | accelerateDMA: Fixes and feedback. (diff) | |
| download | yuzu-776f391ff6cb37e63241d3513a140662c5a69f08.tar.gz yuzu-776f391ff6cb37e63241d3513a140662c5a69f08.tar.xz yuzu-776f391ff6cb37e63241d3513a140662c5a69f08.zip | |
Merge pull request #6597 from FernandoS27/accelerate-dma
DMAEngine: Introduce Accelerate DMA.
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 13 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.h | 13 |
2 files changed, 25 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 | ||
| 663 | Tegra::Engines::AccelerateDMAInterface& RasterizerVulkan::AccessAccelerateDMA() { | ||
| 664 | return accelerate_dma; | ||
| 665 | } | ||
| 666 | |||
| 663 | bool RasterizerVulkan::AccelerateDisplay(const Tegra::FramebufferConfig& config, | 667 | bool 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 | ||
| 705 | AccelerateDMA::AccelerateDMA(BufferCache& buffer_cache_) : buffer_cache{buffer_cache_} {} | ||
| 706 | |||
| 707 | bool 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 | |||
| 701 | void RasterizerVulkan::SetupShaderDescriptors( | 712 | void 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..3a78de258 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <boost/container/static_vector.hpp> | 13 | #include <boost/container/static_vector.hpp> |
| 14 | 14 | ||
| 15 | #include "common/common_types.h" | 15 | #include "common/common_types.h" |
| 16 | #include "video_core/engines/maxwell_dma.h" | ||
| 16 | #include "video_core/rasterizer_accelerated.h" | 17 | #include "video_core/rasterizer_accelerated.h" |
| 17 | #include "video_core/rasterizer_interface.h" | 18 | #include "video_core/rasterizer_interface.h" |
| 18 | #include "video_core/renderer_vulkan/blit_image.h" | 19 | #include "video_core/renderer_vulkan/blit_image.h" |
| @@ -49,6 +50,16 @@ struct VKScreenInfo; | |||
| 49 | 50 | ||
| 50 | class StateTracker; | 51 | class StateTracker; |
| 51 | 52 | ||
| 53 | class AccelerateDMA : public Tegra::Engines::AccelerateDMAInterface { | ||
| 54 | public: | ||
| 55 | explicit AccelerateDMA(BufferCache& buffer_cache); | ||
| 56 | |||
| 57 | bool BufferCopy(GPUVAddr start_address, GPUVAddr end_address, u64 amount) override; | ||
| 58 | |||
| 59 | private: | ||
| 60 | BufferCache& buffer_cache; | ||
| 61 | }; | ||
| 62 | |||
| 52 | class RasterizerVulkan final : public VideoCore::RasterizerAccelerated { | 63 | class RasterizerVulkan final : public VideoCore::RasterizerAccelerated { |
| 53 | public: | 64 | public: |
| 54 | explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, | 65 | explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, |
| @@ -86,6 +97,7 @@ public: | |||
| 86 | bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, | 97 | bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, |
| 87 | const Tegra::Engines::Fermi2D::Surface& dst, | 98 | const Tegra::Engines::Fermi2D::Surface& dst, |
| 88 | const Tegra::Engines::Fermi2D::Config& copy_config) override; | 99 | const Tegra::Engines::Fermi2D::Config& copy_config) override; |
| 100 | Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; | ||
| 89 | bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, | 101 | bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, |
| 90 | u32 pixel_stride) override; | 102 | u32 pixel_stride) override; |
| 91 | 103 | ||
| @@ -186,6 +198,7 @@ private: | |||
| 186 | BufferCache buffer_cache; | 198 | BufferCache buffer_cache; |
| 187 | VKPipelineCache pipeline_cache; | 199 | VKPipelineCache pipeline_cache; |
| 188 | VKQueryCache query_cache; | 200 | VKQueryCache query_cache; |
| 201 | AccelerateDMA accelerate_dma; | ||
| 189 | VKFenceManager fence_manager; | 202 | VKFenceManager fence_manager; |
| 190 | 203 | ||
| 191 | vk::Event wfi_event; | 204 | vk::Event wfi_event; |