diff options
| author | 2019-08-21 01:55:25 -0300 | |
|---|---|---|
| committer | 2019-08-21 01:55:25 -0300 | |
| commit | 9a76e94b3d854fadeac19a097538a24f9b3fb7b7 (patch) | |
| tree | 406d375b3d95ccc95da446959a2e4d75d40b3e23 /src/video_core | |
| parent | Merge pull request #2747 from lioncash/audio (diff) | |
| download | yuzu-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.h | 3 | ||||
| -rw-r--r-- | src/video_core/gpu_asynch.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/gpu_asynch.h | 5 | ||||
| -rw-r--r-- | src/video_core/gpu_synch.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/gpu_synch.h | 5 | ||||
| -rw-r--r-- | src/video_core/gpu_thread.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/gpu_thread.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_base.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.h | 5 |
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 | ||
| 26 | void GPUAsynch::SwapBuffers( | 26 | void 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 | ||
| 31 | void GPUAsynch::FlushRegion(CacheAddr addr, u64 size) { | 30 | void 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; | |||
| 14 | namespace VideoCommon { | 14 | namespace VideoCommon { |
| 15 | 15 | ||
| 16 | /// Implementation of GPU interface that runs the GPU asynchronously | 16 | /// Implementation of GPU interface that runs the GPU asynchronously |
| 17 | class GPUAsynch : public Tegra::GPU { | 17 | class GPUAsynch final : public Tegra::GPU { |
| 18 | public: | 18 | public: |
| 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 | ||
| 22 | void GPUSynch::SwapBuffers( | 22 | void 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 | ||
| 27 | void GPUSynch::FlushRegion(CacheAddr addr, u64 size) { | 26 | void 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; | |||
| 13 | namespace VideoCommon { | 13 | namespace VideoCommon { |
| 14 | 14 | ||
| 15 | /// Implementation of GPU interface that runs the GPU synchronously | 15 | /// Implementation of GPU interface that runs the GPU synchronously |
| 16 | class GPUSynch : public Tegra::GPU { | 16 | class GPUSynch final : public Tegra::GPU { |
| 17 | public: | 17 | public: |
| 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 | ||
| 81 | void ThreadManager::SwapBuffers( | 81 | void 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 | ||
| 86 | void ThreadManager::FlushRegion(CacheAddr addr, u64 size) { | 86 | void 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 | ||
| 102 | RendererOpenGL::~RendererOpenGL() = default; | 102 | RendererOpenGL::~RendererOpenGL() = default; |
| 103 | 103 | ||
| 104 | void RendererOpenGL::SwapBuffers( | 104 | void 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 | ||
| 46 | class RendererOpenGL : public VideoCore::RendererBase { | 46 | class RendererOpenGL final : public VideoCore::RendererBase { |
| 47 | public: | 47 | public: |
| 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; |