summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-08-21 01:55:25 -0300
committerGravatar ReinUsesLisp2019-08-21 01:55:25 -0300
commit9a76e94b3d854fadeac19a097538a24f9b3fb7b7 (patch)
tree406d375b3d95ccc95da446959a2e4d75d40b3e23 /src/video_core
parentMerge pull request #2747 from lioncash/audio (diff)
downloadyuzu-9a76e94b3d854fadeac19a097538a24f9b3fb7b7.tar.gz
yuzu-9a76e94b3d854fadeac19a097538a24f9b3fb7b7.tar.xz
yuzu-9a76e94b3d854fadeac19a097538a24f9b3fb7b7.zip
gpu: Change optional<reference_wrapper<T>> to T* for FramebufferConfig
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/gpu.h3
-rw-r--r--src/video_core/gpu_asynch.cpp5
-rw-r--r--src/video_core/gpu_asynch.h5
-rw-r--r--src/video_core/gpu_synch.cpp5
-rw-r--r--src/video_core/gpu_synch.h5
-rw-r--r--src/video_core/gpu_thread.cpp8
-rw-r--r--src/video_core/gpu_thread.h3
-rw-r--r--src/video_core/renderer_base.h3
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp10
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.h5
10 files changed, 21 insertions, 31 deletions
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h
index 87c96f46b..168a88692 100644
--- a/src/video_core/gpu.h
+++ b/src/video_core/gpu.h
@@ -247,8 +247,7 @@ public:
247 virtual void PushGPUEntries(Tegra::CommandList&& entries) = 0; 247 virtual void PushGPUEntries(Tegra::CommandList&& entries) = 0;
248 248
249 /// Swap buffers (render frame) 249 /// Swap buffers (render frame)
250 virtual void SwapBuffers( 250 virtual void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) = 0;
251 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) = 0;
252 251
253 /// Notify rasterizer that any caches of the specified region should be flushed to Switch memory 252 /// Notify rasterizer that any caches of the specified region should be flushed to Switch memory
254 virtual void FlushRegion(CacheAddr addr, u64 size) = 0; 253 virtual void FlushRegion(CacheAddr addr, u64 size) = 0;
diff --git a/src/video_core/gpu_asynch.cpp b/src/video_core/gpu_asynch.cpp
index ea67be831..f2a3a390e 100644
--- a/src/video_core/gpu_asynch.cpp
+++ b/src/video_core/gpu_asynch.cpp
@@ -23,9 +23,8 @@ void GPUAsynch::PushGPUEntries(Tegra::CommandList&& entries) {
23 gpu_thread.SubmitList(std::move(entries)); 23 gpu_thread.SubmitList(std::move(entries));
24} 24}
25 25
26void GPUAsynch::SwapBuffers( 26void GPUAsynch::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) {
27 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) { 27 gpu_thread.SwapBuffers(framebuffer);
28 gpu_thread.SwapBuffers(std::move(framebuffer));
29} 28}
30 29
31void GPUAsynch::FlushRegion(CacheAddr addr, u64 size) { 30void GPUAsynch::FlushRegion(CacheAddr addr, u64 size) {
diff --git a/src/video_core/gpu_asynch.h b/src/video_core/gpu_asynch.h
index 36377d677..a12f9bac4 100644
--- a/src/video_core/gpu_asynch.h
+++ b/src/video_core/gpu_asynch.h
@@ -14,15 +14,14 @@ class RendererBase;
14namespace VideoCommon { 14namespace VideoCommon {
15 15
16/// Implementation of GPU interface that runs the GPU asynchronously 16/// Implementation of GPU interface that runs the GPU asynchronously
17class GPUAsynch : public Tegra::GPU { 17class GPUAsynch final : public Tegra::GPU {
18public: 18public:
19 explicit GPUAsynch(Core::System& system, VideoCore::RendererBase& renderer); 19 explicit GPUAsynch(Core::System& system, VideoCore::RendererBase& renderer);
20 ~GPUAsynch() override; 20 ~GPUAsynch() override;
21 21
22 void Start() override; 22 void Start() override;
23 void PushGPUEntries(Tegra::CommandList&& entries) override; 23 void PushGPUEntries(Tegra::CommandList&& entries) override;
24 void SwapBuffers( 24 void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
25 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) override;
26 void FlushRegion(CacheAddr addr, u64 size) override; 25 void FlushRegion(CacheAddr addr, u64 size) override;
27 void InvalidateRegion(CacheAddr addr, u64 size) override; 26 void InvalidateRegion(CacheAddr addr, u64 size) override;
28 void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override; 27 void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override;
diff --git a/src/video_core/gpu_synch.cpp b/src/video_core/gpu_synch.cpp
index d4ead9c47..d48221077 100644
--- a/src/video_core/gpu_synch.cpp
+++ b/src/video_core/gpu_synch.cpp
@@ -19,9 +19,8 @@ void GPUSynch::PushGPUEntries(Tegra::CommandList&& entries) {
19 dma_pusher->DispatchCalls(); 19 dma_pusher->DispatchCalls();
20} 20}
21 21
22void GPUSynch::SwapBuffers( 22void GPUSynch::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) {
23 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) { 23 renderer.SwapBuffers(framebuffer);
24 renderer.SwapBuffers(std::move(framebuffer));
25} 24}
26 25
27void GPUSynch::FlushRegion(CacheAddr addr, u64 size) { 26void GPUSynch::FlushRegion(CacheAddr addr, u64 size) {
diff --git a/src/video_core/gpu_synch.h b/src/video_core/gpu_synch.h
index 07bcc47f1..5eb1c461c 100644
--- a/src/video_core/gpu_synch.h
+++ b/src/video_core/gpu_synch.h
@@ -13,15 +13,14 @@ class RendererBase;
13namespace VideoCommon { 13namespace VideoCommon {
14 14
15/// Implementation of GPU interface that runs the GPU synchronously 15/// Implementation of GPU interface that runs the GPU synchronously
16class GPUSynch : public Tegra::GPU { 16class GPUSynch final : public Tegra::GPU {
17public: 17public:
18 explicit GPUSynch(Core::System& system, VideoCore::RendererBase& renderer); 18 explicit GPUSynch(Core::System& system, VideoCore::RendererBase& renderer);
19 ~GPUSynch() override; 19 ~GPUSynch() override;
20 20
21 void Start() override; 21 void Start() override;
22 void PushGPUEntries(Tegra::CommandList&& entries) override; 22 void PushGPUEntries(Tegra::CommandList&& entries) override;
23 void SwapBuffers( 23 void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
24 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) override;
25 void FlushRegion(CacheAddr addr, u64 size) override; 24 void FlushRegion(CacheAddr addr, u64 size) override;
26 void InvalidateRegion(CacheAddr addr, u64 size) override; 25 void InvalidateRegion(CacheAddr addr, u64 size) override;
27 void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override; 26 void FlushAndInvalidateRegion(CacheAddr addr, u64 size) override;
diff --git a/src/video_core/gpu_thread.cpp b/src/video_core/gpu_thread.cpp
index b441e92b0..5f039e4fd 100644
--- a/src/video_core/gpu_thread.cpp
+++ b/src/video_core/gpu_thread.cpp
@@ -39,7 +39,7 @@ static void RunThread(VideoCore::RendererBase& renderer, Tegra::DmaPusher& dma_p
39 dma_pusher.Push(std::move(submit_list->entries)); 39 dma_pusher.Push(std::move(submit_list->entries));
40 dma_pusher.DispatchCalls(); 40 dma_pusher.DispatchCalls();
41 } else if (const auto data = std::get_if<SwapBuffersCommand>(&next.data)) { 41 } else if (const auto data = std::get_if<SwapBuffersCommand>(&next.data)) {
42 renderer.SwapBuffers(std::move(data->framebuffer)); 42 renderer.SwapBuffers(data->framebuffer ? &*data->framebuffer : nullptr);
43 } else if (const auto data = std::get_if<FlushRegionCommand>(&next.data)) { 43 } else if (const auto data = std::get_if<FlushRegionCommand>(&next.data)) {
44 renderer.Rasterizer().FlushRegion(data->addr, data->size); 44 renderer.Rasterizer().FlushRegion(data->addr, data->size);
45 } else if (const auto data = std::get_if<InvalidateRegionCommand>(&next.data)) { 45 } else if (const auto data = std::get_if<InvalidateRegionCommand>(&next.data)) {
@@ -78,9 +78,9 @@ void ThreadManager::SubmitList(Tegra::CommandList&& entries) {
78 system.CoreTiming().ScheduleEvent(synchronization_ticks, synchronization_event, fence); 78 system.CoreTiming().ScheduleEvent(synchronization_ticks, synchronization_event, fence);
79} 79}
80 80
81void ThreadManager::SwapBuffers( 81void ThreadManager::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) {
82 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) { 82 PushCommand(SwapBuffersCommand(framebuffer ? *framebuffer
83 PushCommand(SwapBuffersCommand(std::move(framebuffer))); 83 : std::optional<const Tegra::FramebufferConfig>{}));
84} 84}
85 85
86void ThreadManager::FlushRegion(CacheAddr addr, u64 size) { 86void ThreadManager::FlushRegion(CacheAddr addr, u64 size) {
diff --git a/src/video_core/gpu_thread.h b/src/video_core/gpu_thread.h
index 1d9d0c39e..3ae0ec9f3 100644
--- a/src/video_core/gpu_thread.h
+++ b/src/video_core/gpu_thread.h
@@ -110,8 +110,7 @@ public:
110 void SubmitList(Tegra::CommandList&& entries); 110 void SubmitList(Tegra::CommandList&& entries);
111 111
112 /// Swap buffers (render frame) 112 /// Swap buffers (render frame)
113 void SwapBuffers( 113 void SwapBuffers(const Tegra::FramebufferConfig* framebuffer);
114 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer);
115 114
116 /// Notify rasterizer that any caches of the specified region should be flushed to Switch memory 115 /// Notify rasterizer that any caches of the specified region should be flushed to Switch memory
117 void FlushRegion(CacheAddr addr, u64 size); 116 void FlushRegion(CacheAddr addr, u64 size);
diff --git a/src/video_core/renderer_base.h b/src/video_core/renderer_base.h
index 1d54c3723..af1bebc4f 100644
--- a/src/video_core/renderer_base.h
+++ b/src/video_core/renderer_base.h
@@ -36,8 +36,7 @@ public:
36 virtual ~RendererBase(); 36 virtual ~RendererBase();
37 37
38 /// Swap buffers (render frame) 38 /// Swap buffers (render frame)
39 virtual void SwapBuffers( 39 virtual void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) = 0;
40 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) = 0;
41 40
42 /// Initialize the renderer 41 /// Initialize the renderer
43 virtual bool Init() = 0; 42 virtual bool Init() = 0;
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index a05cef3b9..aa923d1d0 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -101,9 +101,7 @@ RendererOpenGL::RendererOpenGL(Core::Frontend::EmuWindow& emu_window, Core::Syst
101 101
102RendererOpenGL::~RendererOpenGL() = default; 102RendererOpenGL::~RendererOpenGL() = default;
103 103
104void RendererOpenGL::SwapBuffers( 104void RendererOpenGL::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) {
105 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) {
106
107 system.GetPerfStats().EndSystemFrame(); 105 system.GetPerfStats().EndSystemFrame();
108 106
109 // Maintain the rasterizer's state as a priority 107 // Maintain the rasterizer's state as a priority
@@ -113,9 +111,9 @@ void RendererOpenGL::SwapBuffers(
113 111
114 if (framebuffer) { 112 if (framebuffer) {
115 // If framebuffer is provided, reload it from memory to a texture 113 // If framebuffer is provided, reload it from memory to a texture
116 if (screen_info.texture.width != (GLsizei)framebuffer->get().width || 114 if (screen_info.texture.width != static_cast<GLsizei>(framebuffer->width) ||
117 screen_info.texture.height != (GLsizei)framebuffer->get().height || 115 screen_info.texture.height != static_cast<GLsizei>(framebuffer->height) ||
118 screen_info.texture.pixel_format != framebuffer->get().pixel_format) { 116 screen_info.texture.pixel_format != framebuffer->pixel_format) {
119 // Reallocate texture if the framebuffer size has changed. 117 // Reallocate texture if the framebuffer size has changed.
120 // This is expected to not happen very often and hence should not be a 118 // This is expected to not happen very often and hence should not be a
121 // performance problem. 119 // performance problem.
diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h
index 4aebf2321..9bd086368 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.h
+++ b/src/video_core/renderer_opengl/renderer_opengl.h
@@ -43,14 +43,13 @@ struct ScreenInfo {
43 TextureInfo texture; 43 TextureInfo texture;
44}; 44};
45 45
46class RendererOpenGL : public VideoCore::RendererBase { 46class RendererOpenGL final : public VideoCore::RendererBase {
47public: 47public:
48 explicit RendererOpenGL(Core::Frontend::EmuWindow& emu_window, Core::System& system); 48 explicit RendererOpenGL(Core::Frontend::EmuWindow& emu_window, Core::System& system);
49 ~RendererOpenGL() override; 49 ~RendererOpenGL() override;
50 50
51 /// Swap buffers (render frame) 51 /// Swap buffers (render frame)
52 void SwapBuffers( 52 void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
53 std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) override;
54 53
55 /// Initialize the renderer 54 /// Initialize the renderer
56 bool Init() override; 55 bool Init() override;