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);
virtual ~RendererBase();
/// Initialize the renderer
virtual VideoCore::ResultStatus Init() = 0;
/// Returns the rasterizer owned by the renderer
virtual VideoCore::RasterizerInterface* Rasterizer() = 0;

View File

@ -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<OGLTextureMailbox>();
if (secondary_window) {
secondary_window->mailbox = std::make_unique<OGLTextureMailbox>();
@ -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<RasterizerOpenGL>(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<u32>(pixel_stride), screen_info)) {
if (!rasterizer.AccelerateDisplay(framebuffer, framebuffer_addr, static_cast<u32>(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<float>(0.f, 0.f, 1.f, 1.f);
@ -1075,7 +1069,7 @@ void RendererOpenGL::CleanupVideoDumping() {
}
void RendererOpenGL::Sync() {
rasterizer->SyncEntireState();
rasterizer.SyncEntireState();
}
} // namespace OpenGL

View File

@ -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<RasterizerOpenGL> rasterizer;
RasterizerOpenGL rasterizer;
// OpenGL object IDs
OGLVertexArray vertex_array;

View File

@ -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<TextureMailbox>(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();
}

View File

@ -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;

View File

@ -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