mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Merge pull request #1123 from lioncash/screen
rasterizer_interface: Remove renderer-specific ScreenInfo type from AccelerateDraw() in RasterizerInterface
This commit is contained in:
		
						commit
						bf89a99839
					
				| @ -8,8 +8,6 @@ | ||||
| #include "video_core/gpu.h" | ||||
| #include "video_core/memory_manager.h" | ||||
| 
 | ||||
| struct ScreenInfo; | ||||
| 
 | ||||
| namespace VideoCore { | ||||
| 
 | ||||
| class RasterizerInterface { | ||||
| @ -55,7 +53,7 @@ public: | ||||
| 
 | ||||
|     /// Attempt to use a faster method to display the framebuffer to screen
 | ||||
|     virtual bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, | ||||
|                                    u32 pixel_stride, ScreenInfo& screen_info) { | ||||
|                                    u32 pixel_stride) { | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -2,7 +2,6 @@ | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <memory> | ||||
| #include "core/frontend/emu_window.h" | ||||
| #include "core/settings.h" | ||||
| #include "video_core/renderer_base.h" | ||||
| @ -17,18 +16,11 @@ RendererBase::RendererBase(Core::Frontend::EmuWindow& window) : render_window{wi | ||||
| RendererBase::~RendererBase() = default; | ||||
| 
 | ||||
| void RendererBase::RefreshBaseSettings() { | ||||
|     RefreshRasterizerSetting(); | ||||
|     UpdateCurrentFramebufferLayout(); | ||||
| 
 | ||||
|     renderer_settings.use_framelimiter = Settings::values.toggle_framelimit; | ||||
| } | ||||
| 
 | ||||
| void RendererBase::RefreshRasterizerSetting() { | ||||
|     if (rasterizer == nullptr) { | ||||
|         rasterizer = std::make_unique<RasterizerOpenGL>(render_window); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void RendererBase::UpdateCurrentFramebufferLayout() { | ||||
|     const Layout::FramebufferLayout& layout = render_window.GetFramebufferLayout(); | ||||
| 
 | ||||
|  | ||||
| @ -58,9 +58,6 @@ public: | ||||
|     void RefreshBaseSettings(); | ||||
| 
 | ||||
| protected: | ||||
|     /// Refreshes settings specific to the rasterizer.
 | ||||
|     void RefreshRasterizerSetting(); | ||||
| 
 | ||||
|     Core::Frontend::EmuWindow& render_window; ///< Reference to the render window handle.
 | ||||
|     std::unique_ptr<RasterizerInterface> rasterizer; | ||||
|     f32 m_current_fps = 0.0f; ///< Current framerate, should be set by the renderer
 | ||||
|  | ||||
| @ -36,8 +36,8 @@ MICROPROFILE_DEFINE(OpenGL_Drawing, "OpenGL", "Drawing", MP_RGB(128, 128, 192)); | ||||
| MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255)); | ||||
| MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); | ||||
| 
 | ||||
| RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window) | ||||
|     : emu_window{window}, stream_buffer(GL_ARRAY_BUFFER, STREAM_BUFFER_SIZE) { | ||||
| RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window, ScreenInfo& info) | ||||
|     : emu_window{window}, screen_info{info}, stream_buffer(GL_ARRAY_BUFFER, STREAM_BUFFER_SIZE) { | ||||
|     // Create sampler objects
 | ||||
|     for (size_t i = 0; i < texture_samplers.size(); ++i) { | ||||
|         texture_samplers[i].Create(); | ||||
| @ -575,8 +575,7 @@ bool RasterizerOpenGL::AccelerateFill(const void* config) { | ||||
| } | ||||
| 
 | ||||
| bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, | ||||
|                                          VAddr framebuffer_addr, u32 pixel_stride, | ||||
|                                          ScreenInfo& screen_info) { | ||||
|                                          VAddr framebuffer_addr, u32 pixel_stride) { | ||||
|     if (!framebuffer_addr) { | ||||
|         return {}; | ||||
|     } | ||||
|  | ||||
| @ -30,7 +30,7 @@ class EmuWindow; | ||||
| 
 | ||||
| class RasterizerOpenGL : public VideoCore::RasterizerInterface { | ||||
| public: | ||||
|     explicit RasterizerOpenGL(Core::Frontend::EmuWindow& renderer); | ||||
|     explicit RasterizerOpenGL(Core::Frontend::EmuWindow& renderer, ScreenInfo& info); | ||||
|     ~RasterizerOpenGL() override; | ||||
| 
 | ||||
|     void DrawArrays() override; | ||||
| @ -43,8 +43,8 @@ public: | ||||
|     bool AccelerateDisplayTransfer(const void* config) override; | ||||
|     bool AccelerateTextureCopy(const void* config) override; | ||||
|     bool AccelerateFill(const void* config) override; | ||||
|     bool AccelerateDisplay(const Tegra::FramebufferConfig& framebuffer, VAddr framebuffer_addr, | ||||
|                            u32 pixel_stride, ScreenInfo& screen_info) override; | ||||
|     bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, | ||||
|                            u32 pixel_stride) override; | ||||
|     bool AccelerateDrawBatch(bool is_indexed) override; | ||||
| 
 | ||||
|     /// OpenGL shader generated for a given Maxwell register state
 | ||||
| @ -152,6 +152,8 @@ private: | ||||
| 
 | ||||
|     Core::Frontend::EmuWindow& emu_window; | ||||
| 
 | ||||
|     ScreenInfo& screen_info; | ||||
| 
 | ||||
|     std::unique_ptr<GLShader::ProgramManager> shader_program_manager; | ||||
|     OGLVertexArray sw_vao; | ||||
|     OGLVertexArray hw_vao; | ||||
|  | ||||
| @ -16,6 +16,7 @@ | ||||
| #include "core/memory.h" | ||||
| #include "core/settings.h" | ||||
| #include "core/tracer/recorder.h" | ||||
| #include "video_core/renderer_opengl/gl_rasterizer.h" | ||||
| #include "video_core/renderer_opengl/renderer_opengl.h" | ||||
| #include "video_core/utils.h" | ||||
| 
 | ||||
| @ -130,7 +131,7 @@ void RendererOpenGL::SwapBuffers(boost::optional<const Tegra::FramebufferConfig& | ||||
|         } | ||||
| 
 | ||||
|         // Load the framebuffer from memory, draw it to the screen, and swap buffers
 | ||||
|         LoadFBToScreenInfo(*framebuffer, screen_info); | ||||
|         LoadFBToScreenInfo(*framebuffer); | ||||
|         DrawScreen(); | ||||
|         render_window.SwapBuffers(); | ||||
|     } | ||||
| @ -142,14 +143,12 @@ void RendererOpenGL::SwapBuffers(boost::optional<const Tegra::FramebufferConfig& | ||||
| 
 | ||||
|     // Restore the rasterizer state
 | ||||
|     prev_state.Apply(); | ||||
|     RefreshRasterizerSetting(); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Loads framebuffer from emulated memory into the active OpenGL texture. | ||||
|  */ | ||||
| void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer, | ||||
|                                         ScreenInfo& screen_info) { | ||||
| void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer) { | ||||
|     const u32 bytes_per_pixel{Tegra::FramebufferConfig::BytesPerPixel(framebuffer.pixel_format)}; | ||||
|     const u64 size_in_bytes{framebuffer.stride * framebuffer.height * bytes_per_pixel}; | ||||
|     const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset}; | ||||
| @ -162,8 +161,7 @@ void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuf | ||||
|     // only allows rows to have a memory alignement of 4.
 | ||||
|     ASSERT(framebuffer.stride % 4 == 0); | ||||
| 
 | ||||
|     if (!rasterizer->AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride, | ||||
|                                        screen_info)) { | ||||
|     if (!rasterizer->AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride)) { | ||||
|         // Reset the screen info's display texture to its own permanent texture
 | ||||
|         screen_info.display_texture = screen_info.texture.resource.handle; | ||||
| 
 | ||||
| @ -276,6 +274,14 @@ void RendererOpenGL::InitOpenGLObjects() { | ||||
|     LoadColorToActiveGLTexture(0, 0, 0, 0, screen_info.texture); | ||||
| } | ||||
| 
 | ||||
| void RendererOpenGL::CreateRasterizer() { | ||||
|     if (rasterizer) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     rasterizer = std::make_unique<RasterizerOpenGL>(render_window, screen_info); | ||||
| } | ||||
| 
 | ||||
| void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture, | ||||
|                                                  const Tegra::FramebufferConfig& framebuffer) { | ||||
| 
 | ||||
| @ -463,8 +469,7 @@ bool RendererOpenGL::Init() { | ||||
|     } | ||||
| 
 | ||||
|     InitOpenGLObjects(); | ||||
| 
 | ||||
|     RefreshRasterizerSetting(); | ||||
|     CreateRasterizer(); | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| @ -59,6 +59,8 @@ public: | ||||
| 
 | ||||
| private: | ||||
|     void InitOpenGLObjects(); | ||||
|     void CreateRasterizer(); | ||||
| 
 | ||||
|     void ConfigureFramebufferTexture(TextureInfo& texture, | ||||
|                                      const Tegra::FramebufferConfig& framebuffer); | ||||
|     void DrawScreen(); | ||||
| @ -66,7 +68,7 @@ private: | ||||
|     void UpdateFramerate(); | ||||
| 
 | ||||
|     // Loads framebuffer from emulated memory into the display information structure
 | ||||
|     void LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer, ScreenInfo& screen_info); | ||||
|     void LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer); | ||||
|     // Fills active OpenGL texture with the given RGBA color.
 | ||||
|     void LoadColorToActiveGLTexture(u8 color_r, u8 color_g, u8 color_b, u8 color_a, | ||||
|                                     const TextureInfo& texture); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei