summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue.h1
-rw-r--r--src/core/settings.cpp6
-rw-r--r--src/video_core/gpu.cpp10
-rw-r--r--src/video_core/gpu.h10
-rw-r--r--src/video_core/renderer_base.cpp19
-rw-r--r--src/video_core/renderer_base.h21
-rw-r--r--src/video_core/video_core.cpp2
-rw-r--r--src/video_core/video_core.h5
8 files changed, 44 insertions, 30 deletions
diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h
index f86e1056c..db2e17c0c 100644
--- a/src/core/hle/service/nvflinger/buffer_queue.h
+++ b/src/core/hle/service/nvflinger/buffer_queue.h
@@ -6,6 +6,7 @@
6 6
7#include <vector> 7#include <vector>
8#include <boost/optional.hpp> 8#include <boost/optional.hpp>
9#include "common/common_funcs.h"
9#include "common/math_util.h" 10#include "common/math_util.h"
10#include "common/swap.h" 11#include "common/swap.h"
11#include "core/hle/kernel/event.h" 12#include "core/hle/kernel/event.h"
diff --git a/src/core/settings.cpp b/src/core/settings.cpp
index a4623223d..0da159559 100644
--- a/src/core/settings.cpp
+++ b/src/core/settings.cpp
@@ -7,22 +7,18 @@
7#include "core/hle/service/hid/hid.h" 7#include "core/hle/service/hid/hid.h"
8#include "core/settings.h" 8#include "core/settings.h"
9#include "video_core/renderer_base.h" 9#include "video_core/renderer_base.h"
10#include "video_core/video_core.h"
11 10
12namespace Settings { 11namespace Settings {
13 12
14Values values = {}; 13Values values = {};
15 14
16void Apply() { 15void Apply() {
17
18 GDBStub::SetServerPort(values.gdbstub_port); 16 GDBStub::SetServerPort(values.gdbstub_port);
19 GDBStub::ToggleServer(values.use_gdbstub); 17 GDBStub::ToggleServer(values.use_gdbstub);
20 18
21 VideoCore::g_toggle_framelimit_enabled = values.toggle_framelimit;
22
23 auto& system_instance = Core::System::GetInstance(); 19 auto& system_instance = Core::System::GetInstance();
24 if (system_instance.IsPoweredOn()) { 20 if (system_instance.IsPoweredOn()) {
25 system_instance.Renderer().UpdateCurrentFramebufferLayout(); 21 system_instance.Renderer().RefreshBaseSettings();
26 } 22 }
27 23
28 Service::HID::ReloadInputDevices(); 24 Service::HID::ReloadInputDevices();
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp
index 4ff4d71c5..40d323956 100644
--- a/src/video_core/gpu.cpp
+++ b/src/video_core/gpu.cpp
@@ -2,6 +2,7 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "common/assert.h"
5#include "video_core/engines/fermi_2d.h" 6#include "video_core/engines/fermi_2d.h"
6#include "video_core/engines/maxwell_3d.h" 7#include "video_core/engines/maxwell_3d.h"
7#include "video_core/engines/maxwell_compute.h" 8#include "video_core/engines/maxwell_compute.h"
@@ -11,6 +12,15 @@
11 12
12namespace Tegra { 13namespace Tegra {
13 14
15u32 FramebufferConfig::BytesPerPixel(PixelFormat format) {
16 switch (format) {
17 case PixelFormat::ABGR8:
18 return 4;
19 }
20
21 UNREACHABLE();
22}
23
14GPU::GPU(VideoCore::RasterizerInterface& rasterizer) { 24GPU::GPU(VideoCore::RasterizerInterface& rasterizer) {
15 memory_manager = std::make_unique<MemoryManager>(); 25 memory_manager = std::make_unique<MemoryManager>();
16 maxwell_3d = std::make_unique<Engines::Maxwell3D>(rasterizer, *memory_manager); 26 maxwell_3d = std::make_unique<Engines::Maxwell3D>(rasterizer, *memory_manager);
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h
index 874eddd78..51c838540 100644
--- a/src/video_core/gpu.h
+++ b/src/video_core/gpu.h
@@ -6,7 +6,6 @@
6 6
7#include <memory> 7#include <memory>
8#include <unordered_map> 8#include <unordered_map>
9#include <vector>
10#include "common/common_types.h" 9#include "common/common_types.h"
11#include "core/hle/service/nvflinger/buffer_queue.h" 10#include "core/hle/service/nvflinger/buffer_queue.h"
12#include "video_core/memory_manager.h" 11#include "video_core/memory_manager.h"
@@ -65,14 +64,7 @@ struct FramebufferConfig {
65 /** 64 /**
66 * Returns the number of bytes per pixel. 65 * Returns the number of bytes per pixel.
67 */ 66 */
68 static u32 BytesPerPixel(PixelFormat format) { 67 static u32 BytesPerPixel(PixelFormat format);
69 switch (format) {
70 case PixelFormat::ABGR8:
71 return 4;
72 }
73
74 UNREACHABLE();
75 }
76 68
77 VAddr address; 69 VAddr address;
78 u32 offset; 70 u32 offset;
diff --git a/src/video_core/renderer_base.cpp b/src/video_core/renderer_base.cpp
index 3ca350243..e87016429 100644
--- a/src/video_core/renderer_base.cpp
+++ b/src/video_core/renderer_base.cpp
@@ -4,18 +4,23 @@
4 4
5#include <memory> 5#include <memory>
6#include "core/frontend/emu_window.h" 6#include "core/frontend/emu_window.h"
7#include "core/settings.h"
7#include "video_core/renderer_base.h" 8#include "video_core/renderer_base.h"
8#include "video_core/renderer_opengl/gl_rasterizer.h" 9#include "video_core/renderer_opengl/gl_rasterizer.h"
9 10
10namespace VideoCore { 11namespace VideoCore {
11 12
12RendererBase::RendererBase(EmuWindow& window) : render_window{window} {} 13RendererBase::RendererBase(EmuWindow& window) : render_window{window} {
14 RefreshBaseSettings();
15}
16
13RendererBase::~RendererBase() = default; 17RendererBase::~RendererBase() = default;
14 18
15void RendererBase::UpdateCurrentFramebufferLayout() { 19void RendererBase::RefreshBaseSettings() {
16 const Layout::FramebufferLayout& layout = render_window.GetFramebufferLayout(); 20 RefreshRasterizerSetting();
21 UpdateCurrentFramebufferLayout();
17 22
18 render_window.UpdateCurrentFramebufferLayout(layout.width, layout.height); 23 renderer_settings.use_framelimiter = Settings::values.toggle_framelimit;
19} 24}
20 25
21void RendererBase::RefreshRasterizerSetting() { 26void RendererBase::RefreshRasterizerSetting() {
@@ -24,4 +29,10 @@ void RendererBase::RefreshRasterizerSetting() {
24 } 29 }
25} 30}
26 31
32void RendererBase::UpdateCurrentFramebufferLayout() {
33 const Layout::FramebufferLayout& layout = render_window.GetFramebufferLayout();
34
35 render_window.UpdateCurrentFramebufferLayout(layout.width, layout.height);
36}
37
27} // namespace VideoCore 38} // namespace VideoCore
diff --git a/src/video_core/renderer_base.h b/src/video_core/renderer_base.h
index 9dbea8b6d..fd8c47592 100644
--- a/src/video_core/renderer_base.h
+++ b/src/video_core/renderer_base.h
@@ -4,9 +4,9 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <atomic>
7#include <memory> 8#include <memory>
8#include <boost/optional.hpp> 9#include <boost/optional.hpp>
9#include "common/assert.h"
10#include "common/common_types.h" 10#include "common/common_types.h"
11#include "video_core/gpu.h" 11#include "video_core/gpu.h"
12#include "video_core/rasterizer_interface.h" 12#include "video_core/rasterizer_interface.h"
@@ -15,6 +15,10 @@ class EmuWindow;
15 15
16namespace VideoCore { 16namespace VideoCore {
17 17
18struct RendererSettings {
19 std::atomic_bool use_framelimiter{false};
20};
21
18class RendererBase : NonCopyable { 22class RendererBase : NonCopyable {
19public: 23public:
20 explicit RendererBase(EmuWindow& window); 24 explicit RendererBase(EmuWindow& window);
@@ -29,9 +33,6 @@ public:
29 /// Shutdown the renderer 33 /// Shutdown the renderer
30 virtual void ShutDown() = 0; 34 virtual void ShutDown() = 0;
31 35
32 /// Updates the framebuffer layout of the contained render window handle.
33 void UpdateCurrentFramebufferLayout();
34
35 // Getter/setter functions: 36 // Getter/setter functions:
36 // ------------------------ 37 // ------------------------
37 38
@@ -51,13 +52,23 @@ public:
51 return *rasterizer; 52 return *rasterizer;
52 } 53 }
53 54
54 void RefreshRasterizerSetting(); 55 /// Refreshes the settings common to all renderers
56 void RefreshBaseSettings();
55 57
56protected: 58protected:
59 /// Refreshes settings specific to the rasterizer.
60 void RefreshRasterizerSetting();
61
57 EmuWindow& render_window; ///< Reference to the render window handle. 62 EmuWindow& render_window; ///< Reference to the render window handle.
58 std::unique_ptr<RasterizerInterface> rasterizer; 63 std::unique_ptr<RasterizerInterface> rasterizer;
59 f32 m_current_fps = 0.0f; ///< Current framerate, should be set by the renderer 64 f32 m_current_fps = 0.0f; ///< Current framerate, should be set by the renderer
60 int m_current_frame = 0; ///< Current frame, should be set by the renderer 65 int m_current_frame = 0; ///< Current frame, should be set by the renderer
66
67 RendererSettings renderer_settings;
68
69private:
70 /// Updates the framebuffer layout of the contained render window handle.
71 void UpdateCurrentFramebufferLayout();
61}; 72};
62 73
63} // namespace VideoCore 74} // namespace VideoCore
diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp
index 5085ef96b..1e686b89e 100644
--- a/src/video_core/video_core.cpp
+++ b/src/video_core/video_core.cpp
@@ -9,8 +9,6 @@
9 9
10namespace VideoCore { 10namespace VideoCore {
11 11
12std::atomic<bool> g_toggle_framelimit_enabled;
13
14std::unique_ptr<RendererBase> CreateRenderer(EmuWindow& emu_window) { 12std::unique_ptr<RendererBase> CreateRenderer(EmuWindow& emu_window) {
15 return std::make_unique<RendererOpenGL>(emu_window); 13 return std::make_unique<RendererOpenGL>(emu_window);
16} 14}
diff --git a/src/video_core/video_core.h b/src/video_core/video_core.h
index 9fbae8487..2dc07540f 100644
--- a/src/video_core/video_core.h
+++ b/src/video_core/video_core.h
@@ -4,7 +4,6 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <atomic>
8#include <memory> 7#include <memory>
9 8
10class EmuWindow; 9class EmuWindow;
@@ -13,10 +12,6 @@ namespace VideoCore {
13 12
14class RendererBase; 13class RendererBase;
15 14
16// TODO: Wrap these in a user settings struct along with any other graphics settings (often set from
17// qt ui)
18extern std::atomic<bool> g_toggle_framelimit_enabled;
19
20/** 15/**
21 * Creates a renderer instance. 16 * Creates a renderer instance.
22 * 17 *