diff options
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 13 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 13 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index a4ed8f68f..82c84127a 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -171,7 +171,7 @@ RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra | |||
| 171 | buffer_cache_runtime(device), | 171 | buffer_cache_runtime(device), |
| 172 | buffer_cache(*this, maxwell3d, kepler_compute, gpu_memory, cpu_memory_, buffer_cache_runtime), | 172 | buffer_cache(*this, maxwell3d, kepler_compute, gpu_memory, cpu_memory_, buffer_cache_runtime), |
| 173 | shader_cache(*this, emu_window_, gpu, maxwell3d, kepler_compute, gpu_memory, device), | 173 | shader_cache(*this, emu_window_, gpu, maxwell3d, kepler_compute, gpu_memory, device), |
| 174 | query_cache(*this, maxwell3d, gpu_memory), | 174 | query_cache(*this, maxwell3d, gpu_memory), accelerate_dma(buffer_cache), |
| 175 | fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache), | 175 | fence_manager(*this, gpu, texture_cache, buffer_cache, query_cache), |
| 176 | async_shaders(emu_window_) { | 176 | async_shaders(emu_window_) { |
| 177 | if (device.UseAsynchronousShaders()) { | 177 | if (device.UseAsynchronousShaders()) { |
| @@ -701,6 +701,10 @@ bool RasterizerOpenGL::AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surf | |||
| 701 | return true; | 701 | return true; |
| 702 | } | 702 | } |
| 703 | 703 | ||
| 704 | Tegra::Engines::AccelerateDMAInterface& RasterizerOpenGL::AccessAccelerateDMA() { | ||
| 705 | return accelerate_dma; | ||
| 706 | } | ||
| 707 | |||
| 704 | bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, | 708 | bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, |
| 705 | VAddr framebuffer_addr, u32 pixel_stride) { | 709 | VAddr framebuffer_addr, u32 pixel_stride) { |
| 706 | if (framebuffer_addr == 0) { | 710 | if (framebuffer_addr == 0) { |
| @@ -1396,4 +1400,11 @@ void RasterizerOpenGL::EndTransformFeedback() { | |||
| 1396 | glEndTransformFeedback(); | 1400 | glEndTransformFeedback(); |
| 1397 | } | 1401 | } |
| 1398 | 1402 | ||
| 1403 | AccelerateDMA::AccelerateDMA(BufferCache& buffer_cache_) : buffer_cache{buffer_cache_} {} | ||
| 1404 | |||
| 1405 | bool AccelerateDMA::BufferCopy(GPUVAddr src_address, GPUVAddr dest_address, u64 amount) { | ||
| 1406 | std::scoped_lock lock{buffer_cache.mutex}; | ||
| 1407 | return buffer_cache.DMACopy(src_address, dest_address, amount); | ||
| 1408 | } | ||
| 1409 | |||
| 1399 | } // namespace OpenGL | 1410 | } // namespace OpenGL |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index d8df71962..ccee9ba33 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include "common/common_types.h" | 19 | #include "common/common_types.h" |
| 20 | #include "video_core/engines/const_buffer_info.h" | 20 | #include "video_core/engines/const_buffer_info.h" |
| 21 | #include "video_core/engines/maxwell_3d.h" | 21 | #include "video_core/engines/maxwell_3d.h" |
| 22 | #include "video_core/engines/maxwell_dma.h" | ||
| 22 | #include "video_core/rasterizer_accelerated.h" | 23 | #include "video_core/rasterizer_accelerated.h" |
| 23 | #include "video_core/rasterizer_interface.h" | 24 | #include "video_core/rasterizer_interface.h" |
| 24 | #include "video_core/renderer_opengl/gl_buffer_cache.h" | 25 | #include "video_core/renderer_opengl/gl_buffer_cache.h" |
| @@ -58,6 +59,16 @@ struct BindlessSSBO { | |||
| 58 | }; | 59 | }; |
| 59 | static_assert(sizeof(BindlessSSBO) * CHAR_BIT == 128); | 60 | static_assert(sizeof(BindlessSSBO) * CHAR_BIT == 128); |
| 60 | 61 | ||
| 62 | class AccelerateDMA : public Tegra::Engines::AccelerateDMAInterface { | ||
| 63 | public: | ||
| 64 | explicit AccelerateDMA(BufferCache& buffer_cache); | ||
| 65 | |||
| 66 | bool BufferCopy(GPUVAddr src_address, GPUVAddr dest_address, u64 amount) override; | ||
| 67 | |||
| 68 | private: | ||
| 69 | BufferCache& buffer_cache; | ||
| 70 | }; | ||
| 71 | |||
| 61 | class RasterizerOpenGL : public VideoCore::RasterizerAccelerated { | 72 | class RasterizerOpenGL : public VideoCore::RasterizerAccelerated { |
| 62 | public: | 73 | public: |
| 63 | explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, | 74 | explicit RasterizerOpenGL(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, |
| @@ -94,6 +105,7 @@ public: | |||
| 94 | bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, | 105 | bool AccelerateSurfaceCopy(const Tegra::Engines::Fermi2D::Surface& src, |
| 95 | const Tegra::Engines::Fermi2D::Surface& dst, | 106 | const Tegra::Engines::Fermi2D::Surface& dst, |
| 96 | const Tegra::Engines::Fermi2D::Config& copy_config) override; | 107 | const Tegra::Engines::Fermi2D::Config& copy_config) override; |
| 108 | Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; | ||
| 97 | bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, | 109 | bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, |
| 98 | u32 pixel_stride) override; | 110 | u32 pixel_stride) override; |
| 99 | void LoadDiskResources(u64 title_id, std::stop_token stop_loading, | 111 | void LoadDiskResources(u64 title_id, std::stop_token stop_loading, |
| @@ -234,6 +246,7 @@ private: | |||
| 234 | BufferCache buffer_cache; | 246 | BufferCache buffer_cache; |
| 235 | ShaderCacheOpenGL shader_cache; | 247 | ShaderCacheOpenGL shader_cache; |
| 236 | QueryCache query_cache; | 248 | QueryCache query_cache; |
| 249 | AccelerateDMA accelerate_dma; | ||
| 237 | FenceManagerOpenGL fence_manager; | 250 | FenceManagerOpenGL fence_manager; |
| 238 | 251 | ||
| 239 | VideoCommon::Shader::AsyncShaders async_shaders; | 252 | VideoCommon::Shader::AsyncShaders async_shaders; |