diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 8 | ||||
| -rw-r--r-- | src/video_core/gpu.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/gpu.h | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_base.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_base.h | 14 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.h | 2 | ||||
| -rw-r--r-- | src/video_core/video_core.cpp | 25 | ||||
| -rw-r--r-- | src/video_core/video_core.h | 20 |
10 files changed, 50 insertions, 50 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 0e205ed72..a235b543e 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp | |||
| @@ -19,8 +19,8 @@ namespace Engines { | |||
| 19 | /// First register id that is actually a Macro call. | 19 | /// First register id that is actually a Macro call. |
| 20 | constexpr u32 MacroRegistersStart = 0xE00; | 20 | constexpr u32 MacroRegistersStart = 0xE00; |
| 21 | 21 | ||
| 22 | Maxwell3D::Maxwell3D(MemoryManager& memory_manager) | 22 | Maxwell3D::Maxwell3D(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager) |
| 23 | : memory_manager(memory_manager), macro_interpreter(*this) {} | 23 | : memory_manager(memory_manager), rasterizer{rasterizer}, macro_interpreter(*this) {} |
| 24 | 24 | ||
| 25 | void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32> parameters) { | 25 | void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32> parameters) { |
| 26 | auto macro_code = uploaded_macros.find(method); | 26 | auto macro_code = uploaded_macros.find(method); |
| @@ -130,7 +130,7 @@ void Maxwell3D::WriteReg(u32 method, u32 value, u32 remaining_params) { | |||
| 130 | break; | 130 | break; |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | VideoCore::g_renderer->Rasterizer()->NotifyMaxwellRegisterChanged(method); | 133 | rasterizer.NotifyMaxwellRegisterChanged(method); |
| 134 | 134 | ||
| 135 | if (debug_context) { | 135 | if (debug_context) { |
| 136 | debug_context->OnEvent(Tegra::DebugContext::Event::MaxwellCommandProcessed, nullptr); | 136 | debug_context->OnEvent(Tegra::DebugContext::Event::MaxwellCommandProcessed, nullptr); |
| @@ -218,7 +218,7 @@ void Maxwell3D::DrawArrays() { | |||
| 218 | } | 218 | } |
| 219 | 219 | ||
| 220 | const bool is_indexed{regs.index_array.count && !regs.vertex_buffer.count}; | 220 | const bool is_indexed{regs.index_array.count && !regs.vertex_buffer.count}; |
| 221 | VideoCore::g_renderer->Rasterizer()->AccelerateDrawBatch(is_indexed); | 221 | rasterizer.AccelerateDrawBatch(is_indexed); |
| 222 | 222 | ||
| 223 | // TODO(bunnei): Below, we reset vertex count so that we can use these registers to determine if | 223 | // TODO(bunnei): Below, we reset vertex count so that we can use these registers to determine if |
| 224 | // the game is trying to draw indexed or direct mode. This needs to be verified on HW still - | 224 | // the game is trying to draw indexed or direct mode. This needs to be verified on HW still - |
| @@ -393,7 +393,7 @@ void Maxwell3D::ProcessClearBuffers() { | |||
| 393 | regs.clear_buffers.R == regs.clear_buffers.B && | 393 | regs.clear_buffers.R == regs.clear_buffers.B && |
| 394 | regs.clear_buffers.R == regs.clear_buffers.A); | 394 | regs.clear_buffers.R == regs.clear_buffers.A); |
| 395 | 395 | ||
| 396 | VideoCore::g_renderer->Rasterizer()->Clear(); | 396 | rasterizer.Clear(); |
| 397 | } | 397 | } |
| 398 | 398 | ||
| 399 | } // namespace Engines | 399 | } // namespace Engines |
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 3c32f1067..4d0ff96a5 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h | |||
| @@ -17,6 +17,10 @@ | |||
| 17 | #include "video_core/memory_manager.h" | 17 | #include "video_core/memory_manager.h" |
| 18 | #include "video_core/textures/texture.h" | 18 | #include "video_core/textures/texture.h" |
| 19 | 19 | ||
| 20 | namespace VideoCore { | ||
| 21 | class RasterizerInterface; | ||
| 22 | } | ||
| 23 | |||
| 20 | namespace Tegra::Engines { | 24 | namespace Tegra::Engines { |
| 21 | 25 | ||
| 22 | #define MAXWELL3D_REG_INDEX(field_name) \ | 26 | #define MAXWELL3D_REG_INDEX(field_name) \ |
| @@ -24,7 +28,7 @@ namespace Tegra::Engines { | |||
| 24 | 28 | ||
| 25 | class Maxwell3D final { | 29 | class Maxwell3D final { |
| 26 | public: | 30 | public: |
| 27 | explicit Maxwell3D(MemoryManager& memory_manager); | 31 | explicit Maxwell3D(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager); |
| 28 | ~Maxwell3D() = default; | 32 | ~Maxwell3D() = default; |
| 29 | 33 | ||
| 30 | /// Register structure of the Maxwell3D engine. | 34 | /// Register structure of the Maxwell3D engine. |
| @@ -818,6 +822,8 @@ public: | |||
| 818 | Texture::FullTextureInfo GetStageTexture(Regs::ShaderStage stage, size_t offset) const; | 822 | Texture::FullTextureInfo GetStageTexture(Regs::ShaderStage stage, size_t offset) const; |
| 819 | 823 | ||
| 820 | private: | 824 | private: |
| 825 | VideoCore::RasterizerInterface& rasterizer; | ||
| 826 | |||
| 821 | std::unordered_map<u32, std::vector<u32>> uploaded_macros; | 827 | std::unordered_map<u32, std::vector<u32>> uploaded_macros; |
| 822 | 828 | ||
| 823 | /// Macro method that is currently being executed / being fed parameters. | 829 | /// Macro method that is currently being executed / being fed parameters. |
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 141e20444..b2a83ce0b 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp | |||
| @@ -7,12 +7,13 @@ | |||
| 7 | #include "video_core/engines/maxwell_compute.h" | 7 | #include "video_core/engines/maxwell_compute.h" |
| 8 | #include "video_core/engines/maxwell_dma.h" | 8 | #include "video_core/engines/maxwell_dma.h" |
| 9 | #include "video_core/gpu.h" | 9 | #include "video_core/gpu.h" |
| 10 | #include "video_core/rasterizer_interface.h" | ||
| 10 | 11 | ||
| 11 | namespace Tegra { | 12 | namespace Tegra { |
| 12 | 13 | ||
| 13 | GPU::GPU() { | 14 | GPU::GPU(VideoCore::RasterizerInterface& rasterizer) { |
| 14 | memory_manager = std::make_unique<MemoryManager>(); | 15 | memory_manager = std::make_unique<MemoryManager>(); |
| 15 | maxwell_3d = std::make_unique<Engines::Maxwell3D>(*memory_manager); | 16 | maxwell_3d = std::make_unique<Engines::Maxwell3D>(rasterizer, *memory_manager); |
| 16 | fermi_2d = std::make_unique<Engines::Fermi2D>(*memory_manager); | 17 | fermi_2d = std::make_unique<Engines::Fermi2D>(*memory_manager); |
| 17 | maxwell_compute = std::make_unique<Engines::MaxwellCompute>(); | 18 | maxwell_compute = std::make_unique<Engines::MaxwellCompute>(); |
| 18 | maxwell_dma = std::make_unique<Engines::MaxwellDMA>(*memory_manager); | 19 | maxwell_dma = std::make_unique<Engines::MaxwellDMA>(*memory_manager); |
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index 08aa75503..440505c9d 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h | |||
| @@ -11,6 +11,10 @@ | |||
| 11 | #include "core/hle/service/nvflinger/buffer_queue.h" | 11 | #include "core/hle/service/nvflinger/buffer_queue.h" |
| 12 | #include "video_core/memory_manager.h" | 12 | #include "video_core/memory_manager.h" |
| 13 | 13 | ||
| 14 | namespace VideoCore { | ||
| 15 | class RasterizerInterface; | ||
| 16 | } | ||
| 17 | |||
| 14 | namespace Tegra { | 18 | namespace Tegra { |
| 15 | 19 | ||
| 16 | enum class RenderTargetFormat : u32 { | 20 | enum class RenderTargetFormat : u32 { |
| @@ -98,7 +102,7 @@ enum class EngineID { | |||
| 98 | 102 | ||
| 99 | class GPU final { | 103 | class GPU final { |
| 100 | public: | 104 | public: |
| 101 | GPU(); | 105 | explicit GPU(VideoCore::RasterizerInterface& rasterizer); |
| 102 | ~GPU(); | 106 | ~GPU(); |
| 103 | 107 | ||
| 104 | /// Processes a command list stored at the specified address in GPU memory. | 108 | /// Processes a command list stored at the specified address in GPU memory. |
diff --git a/src/video_core/renderer_base.cpp b/src/video_core/renderer_base.cpp index dbe3edf09..3ca350243 100644 --- a/src/video_core/renderer_base.cpp +++ b/src/video_core/renderer_base.cpp | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | #include "video_core/renderer_base.h" | 7 | #include "video_core/renderer_base.h" |
| 8 | #include "video_core/renderer_opengl/gl_rasterizer.h" | 8 | #include "video_core/renderer_opengl/gl_rasterizer.h" |
| 9 | 9 | ||
| 10 | namespace VideoCore { | ||
| 11 | |||
| 10 | RendererBase::RendererBase(EmuWindow& window) : render_window{window} {} | 12 | RendererBase::RendererBase(EmuWindow& window) : render_window{window} {} |
| 11 | RendererBase::~RendererBase() = default; | 13 | RendererBase::~RendererBase() = default; |
| 12 | 14 | ||
| @@ -21,3 +23,5 @@ void RendererBase::RefreshRasterizerSetting() { | |||
| 21 | rasterizer = std::make_unique<RasterizerOpenGL>(render_window); | 23 | rasterizer = std::make_unique<RasterizerOpenGL>(render_window); |
| 22 | } | 24 | } |
| 23 | } | 25 | } |
| 26 | |||
| 27 | } // namespace VideoCore | ||
diff --git a/src/video_core/renderer_base.h b/src/video_core/renderer_base.h index 1cb161b7f..235de23a1 100644 --- a/src/video_core/renderer_base.h +++ b/src/video_core/renderer_base.h | |||
| @@ -13,6 +13,8 @@ | |||
| 13 | 13 | ||
| 14 | class EmuWindow; | 14 | class EmuWindow; |
| 15 | 15 | ||
| 16 | namespace VideoCore { | ||
| 17 | |||
| 16 | class RendererBase : NonCopyable { | 18 | class RendererBase : NonCopyable { |
| 17 | public: | 19 | public: |
| 18 | /// Used to reference a framebuffer | 20 | /// Used to reference a framebuffer |
| @@ -44,15 +46,21 @@ public: | |||
| 44 | return m_current_frame; | 46 | return m_current_frame; |
| 45 | } | 47 | } |
| 46 | 48 | ||
| 47 | VideoCore::RasterizerInterface* Rasterizer() const { | 49 | RasterizerInterface& Rasterizer() { |
| 48 | return rasterizer.get(); | 50 | return *rasterizer; |
| 51 | } | ||
| 52 | |||
| 53 | const RasterizerInterface& Rasterizer() const { | ||
| 54 | return *rasterizer; | ||
| 49 | } | 55 | } |
| 50 | 56 | ||
| 51 | void RefreshRasterizerSetting(); | 57 | void RefreshRasterizerSetting(); |
| 52 | 58 | ||
| 53 | protected: | 59 | protected: |
| 54 | EmuWindow& render_window; ///< Reference to the render window handle. | 60 | EmuWindow& render_window; ///< Reference to the render window handle. |
| 55 | std::unique_ptr<VideoCore::RasterizerInterface> rasterizer; | 61 | std::unique_ptr<RasterizerInterface> rasterizer; |
| 56 | f32 m_current_fps = 0.0f; ///< Current framerate, should be set by the renderer | 62 | f32 m_current_fps = 0.0f; ///< Current framerate, should be set by the renderer |
| 57 | int m_current_frame = 0; ///< Current frame, should be set by the renderer | 63 | int m_current_frame = 0; ///< Current frame, should be set by the renderer |
| 58 | }; | 64 | }; |
| 65 | |||
| 66 | } // namespace VideoCore | ||
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 74383c7cf..bf9131193 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -103,7 +103,7 @@ ScopeAcquireGLContext::~ScopeAcquireGLContext() { | |||
| 103 | } | 103 | } |
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | RendererOpenGL::RendererOpenGL(EmuWindow& window) : RendererBase{window} {} | 106 | RendererOpenGL::RendererOpenGL(EmuWindow& window) : VideoCore::RendererBase{window} {} |
| 107 | RendererOpenGL::~RendererOpenGL() = default; | 107 | RendererOpenGL::~RendererOpenGL() = default; |
| 108 | 108 | ||
| 109 | /// Swap buffers (render frame) | 109 | /// Swap buffers (render frame) |
| @@ -160,8 +160,8 @@ void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuf | |||
| 160 | // only allows rows to have a memory alignement of 4. | 160 | // only allows rows to have a memory alignement of 4. |
| 161 | ASSERT(framebuffer.stride % 4 == 0); | 161 | ASSERT(framebuffer.stride % 4 == 0); |
| 162 | 162 | ||
| 163 | if (!Rasterizer()->AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride, | 163 | if (!rasterizer->AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride, |
| 164 | screen_info)) { | 164 | screen_info)) { |
| 165 | // Reset the screen info's display texture to its own permanent texture | 165 | // Reset the screen info's display texture to its own permanent texture |
| 166 | screen_info.display_texture = screen_info.texture.resource.handle; | 166 | screen_info.display_texture = screen_info.texture.resource.handle; |
| 167 | 167 | ||
diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index ab7de41c8..428afa3b7 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h | |||
| @@ -41,7 +41,7 @@ private: | |||
| 41 | EmuWindow& emu_window; | 41 | EmuWindow& emu_window; |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | class RendererOpenGL : public RendererBase { | 44 | class RendererOpenGL : public VideoCore::RendererBase { |
| 45 | public: | 45 | public: |
| 46 | explicit RendererOpenGL(EmuWindow& window); | 46 | explicit RendererOpenGL(EmuWindow& window); |
| 47 | ~RendererOpenGL() override; | 47 | ~RendererOpenGL() override; |
diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp index 06b13e681..5085ef96b 100644 --- a/src/video_core/video_core.cpp +++ b/src/video_core/video_core.cpp | |||
| @@ -3,37 +3,16 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <memory> | 5 | #include <memory> |
| 6 | #include "common/logging/log.h" | ||
| 7 | #include "video_core/renderer_base.h" | 6 | #include "video_core/renderer_base.h" |
| 8 | #include "video_core/renderer_opengl/renderer_opengl.h" | 7 | #include "video_core/renderer_opengl/renderer_opengl.h" |
| 9 | #include "video_core/video_core.h" | 8 | #include "video_core/video_core.h" |
| 10 | 9 | ||
| 11 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 12 | // Video Core namespace | ||
| 13 | |||
| 14 | namespace VideoCore { | 10 | namespace VideoCore { |
| 15 | 11 | ||
| 16 | std::unique_ptr<RendererBase> g_renderer; ///< Renderer plugin | ||
| 17 | |||
| 18 | std::atomic<bool> g_toggle_framelimit_enabled; | 12 | std::atomic<bool> g_toggle_framelimit_enabled; |
| 19 | 13 | ||
| 20 | /// Initialize the video core | 14 | std::unique_ptr<RendererBase> CreateRenderer(EmuWindow& emu_window) { |
| 21 | bool Init(EmuWindow& emu_window) { | 15 | return std::make_unique<RendererOpenGL>(emu_window); |
| 22 | g_renderer = std::make_unique<RendererOpenGL>(emu_window); | ||
| 23 | if (g_renderer->Init()) { | ||
| 24 | LOG_DEBUG(Render, "initialized OK"); | ||
| 25 | } else { | ||
| 26 | LOG_CRITICAL(Render, "initialization failed !"); | ||
| 27 | return false; | ||
| 28 | } | ||
| 29 | return true; | ||
| 30 | } | ||
| 31 | |||
| 32 | /// Shutdown the video core | ||
| 33 | void Shutdown() { | ||
| 34 | g_renderer.reset(); | ||
| 35 | |||
| 36 | LOG_DEBUG(Render, "shutdown OK"); | ||
| 37 | } | 16 | } |
| 38 | 17 | ||
| 39 | } // namespace VideoCore | 18 | } // namespace VideoCore |
diff --git a/src/video_core/video_core.h b/src/video_core/video_core.h index 519b757f5..7c01c0b8d 100644 --- a/src/video_core/video_core.h +++ b/src/video_core/video_core.h | |||
| @@ -8,25 +8,23 @@ | |||
| 8 | #include <memory> | 8 | #include <memory> |
| 9 | 9 | ||
| 10 | class EmuWindow; | 10 | class EmuWindow; |
| 11 | class RendererBase; | ||
| 12 | |||
| 13 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 14 | // Video Core namespace | ||
| 15 | 11 | ||
| 16 | namespace VideoCore { | 12 | namespace VideoCore { |
| 17 | 13 | ||
| 18 | enum class Renderer { Software, OpenGL }; | 14 | class RendererBase; |
| 19 | 15 | ||
| 20 | extern std::unique_ptr<RendererBase> g_renderer; ///< Renderer plugin | 16 | enum class Renderer { Software, OpenGL }; |
| 21 | 17 | ||
| 22 | // TODO: Wrap these in a user settings struct along with any other graphics settings (often set from | 18 | // TODO: Wrap these in a user settings struct along with any other graphics settings (often set from |
| 23 | // qt ui) | 19 | // qt ui) |
| 24 | extern std::atomic<bool> g_toggle_framelimit_enabled; | 20 | extern std::atomic<bool> g_toggle_framelimit_enabled; |
| 25 | 21 | ||
| 26 | /// Initialize the video core | 22 | /** |
| 27 | bool Init(EmuWindow& emu_window); | 23 | * Creates a renderer instance. |
| 28 | 24 | * | |
| 29 | /// Shutdown the video core | 25 | * @note The returned renderer instance is simply allocated. Its Init() |
| 30 | void Shutdown(); | 26 | * function still needs to be called to fully complete its setup. |
| 27 | */ | ||
| 28 | std::unique_ptr<RendererBase> CreateRenderer(EmuWindow& emu_window); | ||
| 31 | 29 | ||
| 32 | } // namespace VideoCore | 30 | } // namespace VideoCore |