video_core: Remove Init method
* The constructor can do the same
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user