Browse Source
VideoCore: Unify interface to OpenGL and SW rasterizers
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.nce_cpp
16 changed files with 116 additions and 78 deletions
-
8src/core/hle/service/gsp_gpu.cpp
-
2src/core/hle/service/y2r_u.cpp
-
12src/core/hw/gpu.cpp
-
5src/video_core/CMakeLists.txt
-
2src/video_core/clipper.cpp
-
2src/video_core/clipper.h
-
27src/video_core/command_processor.cpp
-
6src/video_core/debug_utils/debug_utils.cpp
-
9src/video_core/rasterizer_interface.h
-
28src/video_core/renderer_base.cpp
-
8src/video_core/renderer_base.h
-
9src/video_core/renderer_opengl/gl_rasterizer.cpp
-
19src/video_core/renderer_opengl/gl_rasterizer.h
-
15src/video_core/renderer_opengl/renderer_opengl.cpp
-
16src/video_core/swrasterizer.cpp
-
26src/video_core/swrasterizer.h
@ -0,0 +1,28 @@ |
|||||
|
// Copyright 2015 Citra Emulator Project
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include <memory>
|
||||
|
|
||||
|
#include "common/make_unique.h"
|
||||
|
|
||||
|
#include "core/settings.h"
|
||||
|
|
||||
|
#include "video_core/renderer_base.h"
|
||||
|
#include "video_core/video_core.h"
|
||||
|
#include "video_core/swrasterizer.h"
|
||||
|
#include "video_core/renderer_opengl/gl_rasterizer.h"
|
||||
|
|
||||
|
void RendererBase::RefreshRasterizerSetting() { |
||||
|
bool hw_renderer_enabled = VideoCore::g_hw_renderer_enabled; |
||||
|
if (rasterizer == nullptr || opengl_rasterizer_active != hw_renderer_enabled) { |
||||
|
opengl_rasterizer_active = hw_renderer_enabled; |
||||
|
|
||||
|
if (hw_renderer_enabled) { |
||||
|
rasterizer = Common::make_unique<RasterizerOpenGL>(); |
||||
|
} else { |
||||
|
rasterizer = Common::make_unique<VideoCore::SWRasterizer>(); |
||||
|
} |
||||
|
rasterizer->InitObjects(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,16 @@ |
|||||
|
// Copyright 2015 Citra Emulator Project
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include "video_core/clipper.h"
|
||||
|
#include "video_core/swrasterizer.h"
|
||||
|
|
||||
|
namespace VideoCore { |
||||
|
|
||||
|
void SWRasterizer::AddTriangle(const Pica::Shader::OutputVertex& v0, |
||||
|
const Pica::Shader::OutputVertex& v1, |
||||
|
const Pica::Shader::OutputVertex& v2) { |
||||
|
Pica::Clipper::ProcessTriangle(v0, v1, v2); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
// Copyright 2015 Citra Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "common/common_types.h" |
||||
|
|
||||
|
#include "video_core/rasterizer_interface.h" |
||||
|
|
||||
|
namespace VideoCore { |
||||
|
|
||||
|
class SWRasterizer : public RasterizerInterface { |
||||
|
void InitObjects() override {} |
||||
|
void Reset() override {} |
||||
|
void AddTriangle(const Pica::Shader::OutputVertex& v0, |
||||
|
const Pica::Shader::OutputVertex& v1, |
||||
|
const Pica::Shader::OutputVertex& v2); |
||||
|
void DrawTriangles() override {} |
||||
|
void FlushFramebuffer() override {} |
||||
|
void NotifyPicaRegisterChanged(u32 id) override {} |
||||
|
void FlushRegion(PAddr addr, u32 size) override {} |
||||
|
void InvalidateRegion(PAddr addr, u32 size) override {} |
||||
|
}; |
||||
|
|
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue