diff options
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 | 12 |
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 | ||
| 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..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 | ||
| 50 | class StateTracker; | 50 | class StateTracker; |
| 51 | 51 | ||
| 52 | class AccelerateDMA : public Tegra::Engines::AccelerateDMAInterface { | ||
| 53 | public: | ||
| 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 | |||
| 52 | class RasterizerVulkan final : public VideoCore::RasterizerAccelerated { | 62 | class RasterizerVulkan final : public VideoCore::RasterizerAccelerated { |
| 53 | public: | 63 | public: |
| 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; |