VideoCore: Unify interface to OpenGL and SW rasterizers
This removes explicit checks sprinkled all over the codebase to instead just have the SW rasterizer expose an implementation with no-ops for most operations.
This commit is contained in:
parent
03835d04f4
commit
195fedccf0
16 changed files with 115 additions and 77 deletions
|
@ -188,9 +188,6 @@ void RasterizerOpenGL::FlushFramebuffer() {
|
|||
void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
|
||||
const auto& regs = Pica::g_state.regs;
|
||||
|
||||
if (!Settings::values.use_hw_renderer)
|
||||
return;
|
||||
|
||||
switch(id) {
|
||||
// Culling
|
||||
case PICA_REG_INDEX(cull_mode):
|
||||
|
@ -287,9 +284,6 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
|
|||
void RasterizerOpenGL::FlushRegion(PAddr addr, u32 size) {
|
||||
const auto& regs = Pica::g_state.regs;
|
||||
|
||||
if (!Settings::values.use_hw_renderer)
|
||||
return;
|
||||
|
||||
PAddr cur_fb_color_addr = regs.framebuffer.GetColorBufferPhysicalAddress();
|
||||
u32 cur_fb_color_size = Pica::Regs::BytesPerColorPixel(regs.framebuffer.color_format)
|
||||
* regs.framebuffer.GetWidth() * regs.framebuffer.GetHeight();
|
||||
|
@ -309,9 +303,6 @@ void RasterizerOpenGL::FlushRegion(PAddr addr, u32 size) {
|
|||
void RasterizerOpenGL::InvalidateRegion(PAddr addr, u32 size) {
|
||||
const auto& regs = Pica::g_state.regs;
|
||||
|
||||
if (!Settings::values.use_hw_renderer)
|
||||
return;
|
||||
|
||||
PAddr cur_fb_color_addr = regs.framebuffer.GetColorBufferPhysicalAddress();
|
||||
u32 cur_fb_color_size = Pica::Regs::BytesPerColorPixel(regs.framebuffer.color_format)
|
||||
* regs.framebuffer.GetWidth() * regs.framebuffer.GetHeight();
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include "common/hash.h"
|
||||
|
||||
#include "video_core/pica.h"
|
||||
#include "video_core/hwrasterizer_base.h"
|
||||
#include "video_core/rasterizer_interface.h"
|
||||
#include "video_core/renderer_opengl/gl_rasterizer_cache.h"
|
||||
#include "video_core/renderer_opengl/gl_state.h"
|
||||
#include "video_core/shader/shader_interpreter.h"
|
||||
|
@ -102,36 +102,21 @@ struct hash<PicaShaderConfig> {
|
|||
|
||||
} // namespace std
|
||||
|
||||
class RasterizerOpenGL : public HWRasterizer {
|
||||
class RasterizerOpenGL : public VideoCore::RasterizerInterface {
|
||||
public:
|
||||
|
||||
RasterizerOpenGL();
|
||||
~RasterizerOpenGL() override;
|
||||
|
||||
/// Initialize API-specific GPU objects
|
||||
void InitObjects() override;
|
||||
|
||||
/// Reset the rasterizer, such as flushing all caches and updating all state
|
||||
void Reset() override;
|
||||
|
||||
/// Queues the primitive formed by the given vertices for rendering
|
||||
void AddTriangle(const Pica::Shader::OutputVertex& v0,
|
||||
const Pica::Shader::OutputVertex& v1,
|
||||
const Pica::Shader::OutputVertex& v2) override;
|
||||
|
||||
/// Draw the current batch of triangles
|
||||
void DrawTriangles() override;
|
||||
|
||||
/// Commit the rasterizer's framebuffer contents immediately to the current 3DS memory framebuffer
|
||||
void FlushFramebuffer() override;
|
||||
|
||||
/// Notify rasterizer that the specified PICA register has been changed
|
||||
void NotifyPicaRegisterChanged(u32 id) override;
|
||||
|
||||
/// Notify rasterizer that the specified 3DS memory region will be read from after this notification
|
||||
void FlushRegion(PAddr addr, u32 size) override;
|
||||
|
||||
/// Notify rasterizer that a 3DS memory region has been changed
|
||||
void InvalidateRegion(PAddr addr, u32 size) override;
|
||||
|
||||
/// OpenGL shader generated for a given Pica register state
|
||||
|
|
|
@ -93,7 +93,6 @@ static std::array<GLfloat, 3*2> MakeOrthographicMatrix(const float width, const
|
|||
|
||||
/// RendererOpenGL constructor
|
||||
RendererOpenGL::RendererOpenGL() {
|
||||
hw_rasterizer.reset(new RasterizerOpenGL());
|
||||
resolution_width = std::max(VideoCore::kScreenTopWidth, VideoCore::kScreenBottomWidth);
|
||||
resolution_height = VideoCore::kScreenTopHeight + VideoCore::kScreenBottomHeight;
|
||||
}
|
||||
|
@ -157,15 +156,7 @@ void RendererOpenGL::SwapBuffers() {
|
|||
|
||||
profiler.BeginFrame();
|
||||
|
||||
bool hw_renderer_enabled = VideoCore::g_hw_renderer_enabled;
|
||||
if (Settings::values.use_hw_renderer != hw_renderer_enabled) {
|
||||
// TODO: Save new setting value to config file for next startup
|
||||
Settings::values.use_hw_renderer = hw_renderer_enabled;
|
||||
|
||||
if (Settings::values.use_hw_renderer) {
|
||||
hw_rasterizer->Reset();
|
||||
}
|
||||
}
|
||||
RefreshRasterizerSetting();
|
||||
|
||||
if (Pica::g_debug_context && Pica::g_debug_context->recorder) {
|
||||
Pica::g_debug_context->recorder->FrameFinished();
|
||||
|
@ -286,8 +277,6 @@ void RendererOpenGL::InitOpenGLObjects() {
|
|||
|
||||
state.texture_units[0].texture_2d = 0;
|
||||
state.Apply();
|
||||
|
||||
hw_rasterizer->InitObjects();
|
||||
}
|
||||
|
||||
void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture,
|
||||
|
@ -419,6 +408,8 @@ void RendererOpenGL::Init() {
|
|||
LOG_INFO(Render_OpenGL, "GL_VENDOR: %s", glGetString(GL_VENDOR));
|
||||
LOG_INFO(Render_OpenGL, "GL_RENDERER: %s", glGetString(GL_RENDERER));
|
||||
InitOpenGLObjects();
|
||||
|
||||
RefreshRasterizerSetting();
|
||||
}
|
||||
|
||||
/// Shutdown the renderer
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue