diff options
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_blit_screen.cpp | 11 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_blit_screen.h | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/present/layer.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/present/layer.h | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 8 |
5 files changed, 26 insertions, 14 deletions
diff --git a/src/video_core/renderer_opengl/gl_blit_screen.cpp b/src/video_core/renderer_opengl/gl_blit_screen.cpp index 0282905ee..9260a4dc4 100644 --- a/src/video_core/renderer_opengl/gl_blit_screen.cpp +++ b/src/video_core/renderer_opengl/gl_blit_screen.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #include "common/settings.h" | 4 | #include "common/settings.h" |
| 5 | #include "video_core/present.h" | ||
| 5 | #include "video_core/renderer_opengl/gl_blit_screen.h" | 6 | #include "video_core/renderer_opengl/gl_blit_screen.h" |
| 6 | #include "video_core/renderer_opengl/gl_state_tracker.h" | 7 | #include "video_core/renderer_opengl/gl_state_tracker.h" |
| 7 | #include "video_core/renderer_opengl/present/filters.h" | 8 | #include "video_core/renderer_opengl/present/filters.h" |
| @@ -13,9 +14,9 @@ namespace OpenGL { | |||
| 13 | BlitScreen::BlitScreen(RasterizerOpenGL& rasterizer_, | 14 | BlitScreen::BlitScreen(RasterizerOpenGL& rasterizer_, |
| 14 | Tegra::MaxwellDeviceMemoryManager& device_memory_, | 15 | Tegra::MaxwellDeviceMemoryManager& device_memory_, |
| 15 | StateTracker& state_tracker_, ProgramManager& program_manager_, | 16 | StateTracker& state_tracker_, ProgramManager& program_manager_, |
| 16 | Device& device_) | 17 | Device& device_, const PresentFilters& filters_) |
| 17 | : rasterizer(rasterizer_), device_memory(device_memory_), state_tracker(state_tracker_), | 18 | : rasterizer(rasterizer_), device_memory(device_memory_), state_tracker(state_tracker_), |
| 18 | program_manager(program_manager_), device(device_) {} | 19 | program_manager(program_manager_), device(device_), filters(filters_) {} |
| 19 | 20 | ||
| 20 | BlitScreen::~BlitScreen() = default; | 21 | BlitScreen::~BlitScreen() = default; |
| 21 | 22 | ||
| @@ -56,7 +57,7 @@ void BlitScreen::DrawScreen(std::span<const Tegra::FramebufferConfig> framebuffe | |||
| 56 | glDepthRangeIndexed(0, 0.0, 0.0); | 57 | glDepthRangeIndexed(0, 0.0, 0.0); |
| 57 | 58 | ||
| 58 | while (layers.size() < framebuffers.size()) { | 59 | while (layers.size() < framebuffers.size()) { |
| 59 | layers.emplace_back(rasterizer, device_memory); | 60 | layers.emplace_back(rasterizer, device_memory, filters); |
| 60 | } | 61 | } |
| 61 | 62 | ||
| 62 | CreateWindowAdapt(); | 63 | CreateWindowAdapt(); |
| @@ -67,11 +68,11 @@ void BlitScreen::DrawScreen(std::span<const Tegra::FramebufferConfig> framebuffe | |||
| 67 | } | 68 | } |
| 68 | 69 | ||
| 69 | void BlitScreen::CreateWindowAdapt() { | 70 | void BlitScreen::CreateWindowAdapt() { |
| 70 | if (window_adapt && Settings::values.scaling_filter.GetValue() == current_window_adapt) { | 71 | if (window_adapt && filters.get_scaling_filter() == current_window_adapt) { |
| 71 | return; | 72 | return; |
| 72 | } | 73 | } |
| 73 | 74 | ||
| 74 | current_window_adapt = Settings::values.scaling_filter.GetValue(); | 75 | current_window_adapt = filters.get_scaling_filter(); |
| 75 | switch (current_window_adapt) { | 76 | switch (current_window_adapt) { |
| 76 | case Settings::ScalingFilter::NearestNeighbor: | 77 | case Settings::ScalingFilter::NearestNeighbor: |
| 77 | window_adapt = MakeNearestNeighbor(device); | 78 | window_adapt = MakeNearestNeighbor(device); |
diff --git a/src/video_core/renderer_opengl/gl_blit_screen.h b/src/video_core/renderer_opengl/gl_blit_screen.h index 4e261d333..df2da9424 100644 --- a/src/video_core/renderer_opengl/gl_blit_screen.h +++ b/src/video_core/renderer_opengl/gl_blit_screen.h | |||
| @@ -15,6 +15,8 @@ namespace Layout { | |||
| 15 | struct FramebufferLayout; | 15 | struct FramebufferLayout; |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | struct PresentFilters; | ||
| 19 | |||
| 18 | namespace Tegra { | 20 | namespace Tegra { |
| 19 | struct FramebufferConfig; | 21 | struct FramebufferConfig; |
| 20 | } | 22 | } |
| @@ -46,7 +48,7 @@ public: | |||
| 46 | explicit BlitScreen(RasterizerOpenGL& rasterizer, | 48 | explicit BlitScreen(RasterizerOpenGL& rasterizer, |
| 47 | Tegra::MaxwellDeviceMemoryManager& device_memory, | 49 | Tegra::MaxwellDeviceMemoryManager& device_memory, |
| 48 | StateTracker& state_tracker, ProgramManager& program_manager, | 50 | StateTracker& state_tracker, ProgramManager& program_manager, |
| 49 | Device& device); | 51 | Device& device, const PresentFilters& filters); |
| 50 | ~BlitScreen(); | 52 | ~BlitScreen(); |
| 51 | 53 | ||
| 52 | /// Draws the emulated screens to the emulator window. | 54 | /// Draws the emulated screens to the emulator window. |
| @@ -61,6 +63,7 @@ private: | |||
| 61 | StateTracker& state_tracker; | 63 | StateTracker& state_tracker; |
| 62 | ProgramManager& program_manager; | 64 | ProgramManager& program_manager; |
| 63 | Device& device; | 65 | Device& device; |
| 66 | const PresentFilters& filters; | ||
| 64 | 67 | ||
| 65 | Settings::ScalingFilter current_window_adapt{}; | 68 | Settings::ScalingFilter current_window_adapt{}; |
| 66 | std::unique_ptr<WindowAdaptPass> window_adapt; | 69 | std::unique_ptr<WindowAdaptPass> window_adapt; |
diff --git a/src/video_core/renderer_opengl/present/layer.cpp b/src/video_core/renderer_opengl/present/layer.cpp index 3e4377db4..6c7092d22 100644 --- a/src/video_core/renderer_opengl/present/layer.cpp +++ b/src/video_core/renderer_opengl/present/layer.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #include "video_core/framebuffer_config.h" | 4 | #include "video_core/framebuffer_config.h" |
| 5 | #include "video_core/present.h" | ||
| 5 | #include "video_core/renderer_opengl/gl_blit_screen.h" | 6 | #include "video_core/renderer_opengl/gl_blit_screen.h" |
| 6 | #include "video_core/renderer_opengl/gl_rasterizer.h" | 7 | #include "video_core/renderer_opengl/gl_rasterizer.h" |
| 7 | #include "video_core/renderer_opengl/present/fsr.h" | 8 | #include "video_core/renderer_opengl/present/fsr.h" |
| @@ -14,8 +15,9 @@ | |||
| 14 | 15 | ||
| 15 | namespace OpenGL { | 16 | namespace OpenGL { |
| 16 | 17 | ||
| 17 | Layer::Layer(RasterizerOpenGL& rasterizer_, Tegra::MaxwellDeviceMemoryManager& device_memory_) | 18 | Layer::Layer(RasterizerOpenGL& rasterizer_, Tegra::MaxwellDeviceMemoryManager& device_memory_, |
| 18 | : rasterizer(rasterizer_), device_memory(device_memory_) { | 19 | const PresentFilters& filters_) |
| 20 | : rasterizer(rasterizer_), device_memory(device_memory_), filters(filters_) { | ||
| 19 | // Allocate textures for the screen | 21 | // Allocate textures for the screen |
| 20 | framebuffer_texture.resource.Create(GL_TEXTURE_2D); | 22 | framebuffer_texture.resource.Create(GL_TEXTURE_2D); |
| 21 | 23 | ||
| @@ -39,7 +41,7 @@ GLuint Layer::ConfigureDraw(std::array<GLfloat, 3 * 2>& out_matrix, | |||
| 39 | auto crop = Tegra::NormalizeCrop(framebuffer, info.width, info.height); | 41 | auto crop = Tegra::NormalizeCrop(framebuffer, info.width, info.height); |
| 40 | GLuint texture = info.display_texture; | 42 | GLuint texture = info.display_texture; |
| 41 | 43 | ||
| 42 | auto anti_aliasing = Settings::values.anti_aliasing.GetValue(); | 44 | auto anti_aliasing = filters.get_anti_aliasing(); |
| 43 | if (anti_aliasing != Settings::AntiAliasing::None) { | 45 | if (anti_aliasing != Settings::AntiAliasing::None) { |
| 44 | glEnablei(GL_SCISSOR_TEST, 0); | 46 | glEnablei(GL_SCISSOR_TEST, 0); |
| 45 | auto viewport_width = Settings::values.resolution_info.ScaleUp(framebuffer_texture.width); | 47 | auto viewport_width = Settings::values.resolution_info.ScaleUp(framebuffer_texture.width); |
| @@ -64,7 +66,7 @@ GLuint Layer::ConfigureDraw(std::array<GLfloat, 3 * 2>& out_matrix, | |||
| 64 | 66 | ||
| 65 | glDisablei(GL_SCISSOR_TEST, 0); | 67 | glDisablei(GL_SCISSOR_TEST, 0); |
| 66 | 68 | ||
| 67 | if (Settings::values.scaling_filter.GetValue() == Settings::ScalingFilter::Fsr) { | 69 | if (filters.get_scaling_filter() == Settings::ScalingFilter::Fsr) { |
| 68 | if (!fsr || fsr->NeedsRecreation(layout.screen)) { | 70 | if (!fsr || fsr->NeedsRecreation(layout.screen)) { |
| 69 | fsr = std::make_unique<FSR>(layout.screen.GetWidth(), layout.screen.GetHeight()); | 71 | fsr = std::make_unique<FSR>(layout.screen.GetWidth(), layout.screen.GetHeight()); |
| 70 | } | 72 | } |
diff --git a/src/video_core/renderer_opengl/present/layer.h b/src/video_core/renderer_opengl/present/layer.h index 77bb97f4f..5b15b730f 100644 --- a/src/video_core/renderer_opengl/present/layer.h +++ b/src/video_core/renderer_opengl/present/layer.h | |||
| @@ -13,6 +13,8 @@ namespace Layout { | |||
| 13 | struct FramebufferLayout; | 13 | struct FramebufferLayout; |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | struct PresentFilters; | ||
| 17 | |||
| 16 | namespace Service::android { | 18 | namespace Service::android { |
| 17 | enum class PixelFormat : u32; | 19 | enum class PixelFormat : u32; |
| 18 | }; | 20 | }; |
| @@ -44,7 +46,8 @@ struct ScreenRectVertex; | |||
| 44 | 46 | ||
| 45 | class Layer { | 47 | class Layer { |
| 46 | public: | 48 | public: |
| 47 | explicit Layer(RasterizerOpenGL& rasterizer, Tegra::MaxwellDeviceMemoryManager& device_memory); | 49 | explicit Layer(RasterizerOpenGL& rasterizer, Tegra::MaxwellDeviceMemoryManager& device_memory, |
| 50 | const PresentFilters& filters); | ||
| 48 | ~Layer(); | 51 | ~Layer(); |
| 49 | 52 | ||
| 50 | GLuint ConfigureDraw(std::array<GLfloat, 3 * 2>& out_matrix, | 53 | GLuint ConfigureDraw(std::array<GLfloat, 3 * 2>& out_matrix, |
| @@ -65,6 +68,7 @@ private: | |||
| 65 | private: | 68 | private: |
| 66 | RasterizerOpenGL& rasterizer; | 69 | RasterizerOpenGL& rasterizer; |
| 67 | Tegra::MaxwellDeviceMemoryManager& device_memory; | 70 | Tegra::MaxwellDeviceMemoryManager& device_memory; |
| 71 | const PresentFilters& filters; | ||
| 68 | 72 | ||
| 69 | /// OpenGL framebuffer data | 73 | /// OpenGL framebuffer data |
| 70 | std::vector<u8> gl_framebuffer_data; | 74 | std::vector<u8> gl_framebuffer_data; |
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index a1a8491e5..5fb54635d 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include "core/frontend/emu_window.h" | 17 | #include "core/frontend/emu_window.h" |
| 18 | #include "core/telemetry_session.h" | 18 | #include "core/telemetry_session.h" |
| 19 | #include "video_core/capture.h" | 19 | #include "video_core/capture.h" |
| 20 | #include "video_core/present.h" | ||
| 20 | #include "video_core/renderer_opengl/gl_blit_screen.h" | 21 | #include "video_core/renderer_opengl/gl_blit_screen.h" |
| 21 | #include "video_core/renderer_opengl/gl_rasterizer.h" | 22 | #include "video_core/renderer_opengl/gl_rasterizer.h" |
| 22 | #include "video_core/renderer_opengl/gl_shader_manager.h" | 23 | #include "video_core/renderer_opengl/gl_shader_manager.h" |
| @@ -121,9 +122,10 @@ RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_, | |||
| 121 | glEnableClientState(GL_ELEMENT_ARRAY_UNIFIED_NV); | 122 | glEnableClientState(GL_ELEMENT_ARRAY_UNIFIED_NV); |
| 122 | } | 123 | } |
| 123 | blit_screen = std::make_unique<BlitScreen>(rasterizer, device_memory, state_tracker, | 124 | blit_screen = std::make_unique<BlitScreen>(rasterizer, device_memory, state_tracker, |
| 124 | program_manager, device); | 125 | program_manager, device, PresentFiltersForDisplay); |
| 125 | blit_applet = std::make_unique<BlitScreen>(rasterizer, device_memory, state_tracker, | 126 | blit_applet = |
| 126 | program_manager, device); | 127 | std::make_unique<BlitScreen>(rasterizer, device_memory, state_tracker, program_manager, |
| 128 | device, PresentFiltersForAppletCapture); | ||
| 127 | capture_framebuffer.Create(); | 129 | capture_framebuffer.Create(); |
| 128 | capture_renderbuffer.Create(); | 130 | capture_renderbuffer.Create(); |
| 129 | glBindRenderbuffer(GL_RENDERBUFFER, capture_renderbuffer.handle); | 131 | glBindRenderbuffer(GL_RENDERBUFFER, capture_renderbuffer.handle); |