From 79a53c800311300c4c86da544b9d6fd60eaea78f Mon Sep 17 00:00:00 2001 From: GPUCode Date: Sat, 4 Feb 2023 13:08:42 +0200 Subject: [PATCH] video_core: Remove Init method * The constructor can do the same --- src/video_core/renderer_base.h | 3 -- .../renderer_opengl/renderer_opengl.cpp | 34 ++++++++----------- .../renderer_opengl/renderer_opengl.h | 11 +++--- .../renderer_vulkan/renderer_vulkan.cpp | 14 ++------ .../renderer_vulkan/renderer_vulkan.h | 6 ++-- src/video_core/video_core.cpp | 9 +---- 6 files changed, 28 insertions(+), 49 deletions(-) diff --git a/src/video_core/renderer_base.h b/src/video_core/renderer_base.h index 0976c7594..852315e05 100644 --- a/src/video_core/renderer_base.h +++ b/src/video_core/renderer_base.h @@ -30,9 +30,6 @@ public: explicit RendererBase(Frontend::EmuWindow& window, Frontend::EmuWindow* secondary_window); virtual ~RendererBase(); - /// Initialize the renderer - virtual VideoCore::ResultStatus Init() = 0; - /// Returns the rasterizer owned by the renderer virtual VideoCore::RasterizerInterface* Rasterizer() = 0; diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 89ad5df76..2486d94b6 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -278,7 +278,17 @@ RendererOpenGL::RendererOpenGL(Memory::MemorySystem& memory_, Frontend::EmuWindo : RendererBase{window, secondary_window}, memory{memory_}, driver{Settings::values.graphics_api.GetValue() == Settings::GraphicsAPI::OpenGLES, Settings::values.renderer_debug.GetValue()}, - frame_dumper(Core::System::GetInstance().VideoDumper(), window) { + rasterizer{memory, render_window, driver}, frame_dumper{ + Core::System::GetInstance().VideoDumper(), + window} { + + const Vendor vendor = driver.GetVendor(); + if (vendor == Vendor::Generic || vendor == Vendor::Unknown) { + LOG_WARNING(Render_OpenGL, "Unknown vendor: {}", driver.GetVendorString()); + } + + InitOpenGLObjects(); + window.mailbox = std::make_unique(); if (secondary_window) { secondary_window->mailbox = std::make_unique(); @@ -288,22 +298,6 @@ RendererOpenGL::RendererOpenGL(Memory::MemorySystem& memory_, Frontend::EmuWindo RendererOpenGL::~RendererOpenGL() = default; -VideoCore::ResultStatus RendererOpenGL::Init() { - const Vendor vendor = driver.GetVendor(); - if (vendor == Vendor::Generic || vendor == Vendor::Unknown) { - LOG_WARNING(Render_OpenGL, "Unknown vendor: {}", driver.GetVendorString()); - } - - InitOpenGLObjects(); - rasterizer = std::make_unique(memory, render_window, driver); - - return VideoCore::ResultStatus::Success; -} - -VideoCore::RasterizerInterface* RendererOpenGL::Rasterizer() { - return rasterizer.get(); -} - void RendererOpenGL::SwapBuffers() { // Maintain the rasterizer's state as a priority OpenGLState prev_state = OpenGLState::GetCurState(); @@ -489,8 +483,8 @@ void RendererOpenGL::LoadFBToScreenInfo(const GPU::Regs::FramebufferConfig& fram // only allows rows to have a memory alignement of 4. ASSERT(pixel_stride % 4 == 0); - if (!rasterizer->AccelerateDisplay(framebuffer, framebuffer_addr, - static_cast(pixel_stride), screen_info)) { + if (!rasterizer.AccelerateDisplay(framebuffer, framebuffer_addr, static_cast(pixel_stride), + screen_info)) { // Reset the screen info's display texture to its own permanent texture screen_info.display_texture = screen_info.texture.resource.handle; screen_info.display_texcoords = Common::Rectangle(0.f, 0.f, 1.f, 1.f); @@ -1075,7 +1069,7 @@ void RendererOpenGL::CleanupVideoDumping() { } void RendererOpenGL::Sync() { - rasterizer->SyncEntireState(); + rasterizer.SyncEntireState(); } } // namespace OpenGL diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index e52d54bf4..379fb6438 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h @@ -9,8 +9,7 @@ #include "video_core/renderer_base.h" #include "video_core/renderer_opengl/frame_dumper_opengl.h" #include "video_core/renderer_opengl/gl_driver.h" -#include "video_core/renderer_opengl/gl_resource_manager.h" -#include "video_core/renderer_opengl/gl_state.h" +#include "video_core/renderer_opengl/gl_rasterizer.h" namespace Layout { struct FramebufferLayout; @@ -65,8 +64,10 @@ public: Frontend::EmuWindow* secondary_window); ~RendererOpenGL() override; - VideoCore::ResultStatus Init() override; - VideoCore::RasterizerInterface* Rasterizer() override; + [[nodiscard]] VideoCore::RasterizerInterface* Rasterizer() override { + return &rasterizer; + } + void SwapBuffers() override; void TryPresent(int timeout_ms, bool is_secondary) override; void PrepareVideoDumping() override; @@ -124,7 +125,7 @@ private: Memory::MemorySystem& memory; Driver driver; OpenGLState state; - std::unique_ptr rasterizer; + RasterizerOpenGL rasterizer; // OpenGL object IDs OGLVertexArray vertex_array; diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 800048bdd..5f0c30126 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -114,6 +114,9 @@ RendererVulkan::RendererVulkan(Memory::MemorySystem& memory_, Frontend::EmuWindo rasterizer{memory, render_window, instance, scheduler, desc_manager, runtime, renderpass_cache} { Report(); + CompileShaders(); + BuildLayouts(); + BuildPipelines(); window.mailbox = std::make_unique(instance, swapchain, renderpass_cache); } @@ -143,17 +146,6 @@ RendererVulkan::~RendererVulkan() { render_window.mailbox.reset(); } -VideoCore::ResultStatus RendererVulkan::Init() { - CompileShaders(); - BuildLayouts(); - BuildPipelines(); - return VideoCore::ResultStatus::Success; -} - -VideoCore::RasterizerInterface* RendererVulkan::Rasterizer() { - return &rasterizer; -} - void RendererVulkan::Sync() { rasterizer.SyncEntireState(); } diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h index e57bc77c8..852594da2 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.h +++ b/src/video_core/renderer_vulkan/renderer_vulkan.h @@ -64,8 +64,10 @@ public: Frontend::EmuWindow* secondary_window); ~RendererVulkan() override; - VideoCore::ResultStatus Init() override; - VideoCore::RasterizerInterface* Rasterizer() override; + [[nodiscard]] VideoCore::RasterizerInterface* Rasterizer() override { + return &rasterizer; + } + void SwapBuffers() override; void NotifySurfaceChanged() override; void TryPresent(int timeout_ms, bool is_secondary) override; diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp index 781ea6133..3803e1faf 100644 --- a/src/video_core/video_core.cpp +++ b/src/video_core/video_core.cpp @@ -50,14 +50,7 @@ ResultStatus Init(Frontend::EmuWindow& emu_window, Frontend::EmuWindow* secondar UNREACHABLE(); } - ResultStatus result = g_renderer->Init(); - if (result != ResultStatus::Success) { - LOG_ERROR(Render, "Video core initialization failed"); - } else { - LOG_INFO(Render, "Video core initialization OK"); - } - - return result; + return ResultStatus::Success; } /// Shutdown the video core