video_core: Remove Init method

* The constructor can do the same
This commit is contained in:
GPUCode
2023-02-04 13:08:42 +02:00
parent fd9525acc2
commit 79a53c8003
6 changed files with 28 additions and 49 deletions

View File

@@ -30,9 +30,6 @@ public:
explicit RendererBase(Frontend::EmuWindow& window, Frontend::EmuWindow* secondary_window); explicit RendererBase(Frontend::EmuWindow& window, Frontend::EmuWindow* secondary_window);
virtual ~RendererBase(); virtual ~RendererBase();
/// Initialize the renderer
virtual VideoCore::ResultStatus Init() = 0;
/// Returns the rasterizer owned by the renderer /// Returns the rasterizer owned by the renderer
virtual VideoCore::RasterizerInterface* Rasterizer() = 0; virtual VideoCore::RasterizerInterface* Rasterizer() = 0;

View File

@@ -278,7 +278,17 @@ RendererOpenGL::RendererOpenGL(Memory::MemorySystem& memory_, Frontend::EmuWindo
: RendererBase{window, secondary_window}, memory{memory_}, : RendererBase{window, secondary_window}, memory{memory_},
driver{Settings::values.graphics_api.GetValue() == Settings::GraphicsAPI::OpenGLES, driver{Settings::values.graphics_api.GetValue() == Settings::GraphicsAPI::OpenGLES,
Settings::values.renderer_debug.GetValue()}, 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<OGLTextureMailbox>(); window.mailbox = std::make_unique<OGLTextureMailbox>();
if (secondary_window) { if (secondary_window) {
secondary_window->mailbox = std::make_unique<OGLTextureMailbox>(); secondary_window->mailbox = std::make_unique<OGLTextureMailbox>();
@@ -288,22 +298,6 @@ RendererOpenGL::RendererOpenGL(Memory::MemorySystem& memory_, Frontend::EmuWindo
RendererOpenGL::~RendererOpenGL() = default; 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<RasterizerOpenGL>(memory, render_window, driver);
return VideoCore::ResultStatus::Success;
}
VideoCore::RasterizerInterface* RendererOpenGL::Rasterizer() {
return rasterizer.get();
}
void RendererOpenGL::SwapBuffers() { void RendererOpenGL::SwapBuffers() {
// Maintain the rasterizer's state as a priority // Maintain the rasterizer's state as a priority
OpenGLState prev_state = OpenGLState::GetCurState(); 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. // only allows rows to have a memory alignement of 4.
ASSERT(pixel_stride % 4 == 0); ASSERT(pixel_stride % 4 == 0);
if (!rasterizer->AccelerateDisplay(framebuffer, framebuffer_addr, if (!rasterizer.AccelerateDisplay(framebuffer, framebuffer_addr, static_cast<u32>(pixel_stride),
static_cast<u32>(pixel_stride), screen_info)) { screen_info)) {
// Reset the screen info's display texture to its own permanent texture // Reset the screen info's display texture to its own permanent texture
screen_info.display_texture = screen_info.texture.resource.handle; screen_info.display_texture = screen_info.texture.resource.handle;
screen_info.display_texcoords = Common::Rectangle<float>(0.f, 0.f, 1.f, 1.f); screen_info.display_texcoords = Common::Rectangle<float>(0.f, 0.f, 1.f, 1.f);
@@ -1075,7 +1069,7 @@ void RendererOpenGL::CleanupVideoDumping() {
} }
void RendererOpenGL::Sync() { void RendererOpenGL::Sync() {
rasterizer->SyncEntireState(); rasterizer.SyncEntireState();
} }
} // namespace OpenGL } // namespace OpenGL

View File

@@ -9,8 +9,7 @@
#include "video_core/renderer_base.h" #include "video_core/renderer_base.h"
#include "video_core/renderer_opengl/frame_dumper_opengl.h" #include "video_core/renderer_opengl/frame_dumper_opengl.h"
#include "video_core/renderer_opengl/gl_driver.h" #include "video_core/renderer_opengl/gl_driver.h"
#include "video_core/renderer_opengl/gl_resource_manager.h" #include "video_core/renderer_opengl/gl_rasterizer.h"
#include "video_core/renderer_opengl/gl_state.h"
namespace Layout { namespace Layout {
struct FramebufferLayout; struct FramebufferLayout;
@@ -65,8 +64,10 @@ public:
Frontend::EmuWindow* secondary_window); Frontend::EmuWindow* secondary_window);
~RendererOpenGL() override; ~RendererOpenGL() override;
VideoCore::ResultStatus Init() override; [[nodiscard]] VideoCore::RasterizerInterface* Rasterizer() override {
VideoCore::RasterizerInterface* Rasterizer() override; return &rasterizer;
}
void SwapBuffers() override; void SwapBuffers() override;
void TryPresent(int timeout_ms, bool is_secondary) override; void TryPresent(int timeout_ms, bool is_secondary) override;
void PrepareVideoDumping() override; void PrepareVideoDumping() override;
@@ -124,7 +125,7 @@ private:
Memory::MemorySystem& memory; Memory::MemorySystem& memory;
Driver driver; Driver driver;
OpenGLState state; OpenGLState state;
std::unique_ptr<RasterizerOpenGL> rasterizer; RasterizerOpenGL rasterizer;
// OpenGL object IDs // OpenGL object IDs
OGLVertexArray vertex_array; OGLVertexArray vertex_array;

View File

@@ -114,6 +114,9 @@ RendererVulkan::RendererVulkan(Memory::MemorySystem& memory_, Frontend::EmuWindo
rasterizer{memory, render_window, instance, scheduler, rasterizer{memory, render_window, instance, scheduler,
desc_manager, runtime, renderpass_cache} { desc_manager, runtime, renderpass_cache} {
Report(); Report();
CompileShaders();
BuildLayouts();
BuildPipelines();
window.mailbox = std::make_unique<TextureMailbox>(instance, swapchain, renderpass_cache); window.mailbox = std::make_unique<TextureMailbox>(instance, swapchain, renderpass_cache);
} }
@@ -143,17 +146,6 @@ RendererVulkan::~RendererVulkan() {
render_window.mailbox.reset(); render_window.mailbox.reset();
} }
VideoCore::ResultStatus RendererVulkan::Init() {
CompileShaders();
BuildLayouts();
BuildPipelines();
return VideoCore::ResultStatus::Success;
}
VideoCore::RasterizerInterface* RendererVulkan::Rasterizer() {
return &rasterizer;
}
void RendererVulkan::Sync() { void RendererVulkan::Sync() {
rasterizer.SyncEntireState(); rasterizer.SyncEntireState();
} }

View File

@@ -64,8 +64,10 @@ public:
Frontend::EmuWindow* secondary_window); Frontend::EmuWindow* secondary_window);
~RendererVulkan() override; ~RendererVulkan() override;
VideoCore::ResultStatus Init() override; [[nodiscard]] VideoCore::RasterizerInterface* Rasterizer() override {
VideoCore::RasterizerInterface* Rasterizer() override; return &rasterizer;
}
void SwapBuffers() override; void SwapBuffers() override;
void NotifySurfaceChanged() override; void NotifySurfaceChanged() override;
void TryPresent(int timeout_ms, bool is_secondary) override; void TryPresent(int timeout_ms, bool is_secondary) override;

View File

@@ -50,14 +50,7 @@ ResultStatus Init(Frontend::EmuWindow& emu_window, Frontend::EmuWindow* secondar
UNREACHABLE(); UNREACHABLE();
} }
ResultStatus result = g_renderer->Init(); return ResultStatus::Success;
if (result != ResultStatus::Success) {
LOG_ERROR(Render, "Video core initialization failed");
} else {
LOG_INFO(Render, "Video core initialization OK");
}
return result;
} }
/// Shutdown the video core /// Shutdown the video core