diff options
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/rasterizer_interface.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 8 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.h | 2 |
5 files changed, 14 insertions, 17 deletions
diff --git a/src/video_core/rasterizer_interface.h b/src/video_core/rasterizer_interface.h index 499e84b89..a4a219d8d 100644 --- a/src/video_core/rasterizer_interface.h +++ b/src/video_core/rasterizer_interface.h | |||
| @@ -8,8 +8,6 @@ | |||
| 8 | #include "video_core/gpu.h" | 8 | #include "video_core/gpu.h" |
| 9 | #include "video_core/memory_manager.h" | 9 | #include "video_core/memory_manager.h" |
| 10 | 10 | ||
| 11 | struct ScreenInfo; | ||
| 12 | |||
| 13 | namespace VideoCore { | 11 | namespace VideoCore { |
| 14 | 12 | ||
| 15 | class RasterizerInterface { | 13 | class RasterizerInterface { |
| @@ -55,7 +53,7 @@ public: | |||
| 55 | 53 | ||
| 56 | /// Attempt to use a faster method to display the framebuffer to screen | 54 | /// Attempt to use a faster method to display the framebuffer to screen |
| 57 | virtual bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, | 55 | virtual bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, |
| 58 | u32 pixel_stride, ScreenInfo& screen_info) { | 56 | u32 pixel_stride) { |
| 59 | return false; | 57 | return false; |
| 60 | } | 58 | } |
| 61 | 59 | ||
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index fe1f55e85..49147fdf7 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -36,8 +36,8 @@ MICROPROFILE_DEFINE(OpenGL_Drawing, "OpenGL", "Drawing", MP_RGB(128, 128, 192)); | |||
| 36 | MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255)); | 36 | MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255)); |
| 37 | MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); | 37 | MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); |
| 38 | 38 | ||
| 39 | RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window) | 39 | RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window, ScreenInfo& info) |
| 40 | : emu_window{window}, stream_buffer(GL_ARRAY_BUFFER, STREAM_BUFFER_SIZE) { | 40 | : emu_window{window}, screen_info{info}, stream_buffer(GL_ARRAY_BUFFER, STREAM_BUFFER_SIZE) { |
| 41 | // Create sampler objects | 41 | // Create sampler objects |
| 42 | for (size_t i = 0; i < texture_samplers.size(); ++i) { | 42 | for (size_t i = 0; i < texture_samplers.size(); ++i) { |
| 43 | texture_samplers[i].Create(); | 43 | texture_samplers[i].Create(); |
| @@ -574,8 +574,7 @@ bool RasterizerOpenGL::AccelerateFill(const void* config) { | |||
| 574 | } | 574 | } |
| 575 | 575 | ||
| 576 | bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, | 576 | bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, |
| 577 | VAddr framebuffer_addr, u32 pixel_stride, | 577 | VAddr framebuffer_addr, u32 pixel_stride) { |
| 578 | ScreenInfo& screen_info) { | ||
| 579 | if (!framebuffer_addr) { | 578 | if (!framebuffer_addr) { |
| 580 | return {}; | 579 | return {}; |
| 581 | } | 580 | } |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 74307f626..5cac8029a 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -30,7 +30,7 @@ class EmuWindow; | |||
| 30 | 30 | ||
| 31 | class RasterizerOpenGL : public VideoCore::RasterizerInterface { | 31 | class RasterizerOpenGL : public VideoCore::RasterizerInterface { |
| 32 | public: | 32 | public: |
| 33 | explicit RasterizerOpenGL(Core::Frontend::EmuWindow& renderer); | 33 | explicit RasterizerOpenGL(Core::Frontend::EmuWindow& renderer, ScreenInfo& info); |
| 34 | ~RasterizerOpenGL() override; | 34 | ~RasterizerOpenGL() override; |
| 35 | 35 | ||
| 36 | void DrawArrays() override; | 36 | void DrawArrays() override; |
| @@ -43,8 +43,8 @@ public: | |||
| 43 | bool AccelerateDisplayTransfer(const void* config) override; | 43 | bool AccelerateDisplayTransfer(const void* config) override; |
| 44 | bool AccelerateTextureCopy(const void* config) override; | 44 | bool AccelerateTextureCopy(const void* config) override; |
| 45 | bool AccelerateFill(const void* config) override; | 45 | bool AccelerateFill(const void* config) override; |
| 46 | bool AccelerateDisplay(const Tegra::FramebufferConfig& framebuffer, VAddr framebuffer_addr, | 46 | bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, |
| 47 | u32 pixel_stride, ScreenInfo& screen_info) override; | 47 | u32 pixel_stride) override; |
| 48 | bool AccelerateDrawBatch(bool is_indexed) override; | 48 | bool AccelerateDrawBatch(bool is_indexed) override; |
| 49 | 49 | ||
| 50 | /// OpenGL shader generated for a given Maxwell register state | 50 | /// OpenGL shader generated for a given Maxwell register state |
| @@ -151,6 +151,8 @@ private: | |||
| 151 | 151 | ||
| 152 | Core::Frontend::EmuWindow& emu_window; | 152 | Core::Frontend::EmuWindow& emu_window; |
| 153 | 153 | ||
| 154 | ScreenInfo& screen_info; | ||
| 155 | |||
| 154 | std::unique_ptr<GLShader::ProgramManager> shader_program_manager; | 156 | std::unique_ptr<GLShader::ProgramManager> shader_program_manager; |
| 155 | OGLVertexArray sw_vao; | 157 | OGLVertexArray sw_vao; |
| 156 | OGLVertexArray hw_vao; | 158 | OGLVertexArray hw_vao; |
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 4a23a931e..26de614ef 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -131,7 +131,7 @@ void RendererOpenGL::SwapBuffers(boost::optional<const Tegra::FramebufferConfig& | |||
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | // Load the framebuffer from memory, draw it to the screen, and swap buffers | 133 | // Load the framebuffer from memory, draw it to the screen, and swap buffers |
| 134 | LoadFBToScreenInfo(*framebuffer, screen_info); | 134 | LoadFBToScreenInfo(*framebuffer); |
| 135 | DrawScreen(); | 135 | DrawScreen(); |
| 136 | render_window.SwapBuffers(); | 136 | render_window.SwapBuffers(); |
| 137 | } | 137 | } |
| @@ -148,8 +148,7 @@ void RendererOpenGL::SwapBuffers(boost::optional<const Tegra::FramebufferConfig& | |||
| 148 | /** | 148 | /** |
| 149 | * Loads framebuffer from emulated memory into the active OpenGL texture. | 149 | * Loads framebuffer from emulated memory into the active OpenGL texture. |
| 150 | */ | 150 | */ |
| 151 | void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer, | 151 | void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer) { |
| 152 | ScreenInfo& screen_info) { | ||
| 153 | const u32 bytes_per_pixel{Tegra::FramebufferConfig::BytesPerPixel(framebuffer.pixel_format)}; | 152 | const u32 bytes_per_pixel{Tegra::FramebufferConfig::BytesPerPixel(framebuffer.pixel_format)}; |
| 154 | const u64 size_in_bytes{framebuffer.stride * framebuffer.height * bytes_per_pixel}; | 153 | const u64 size_in_bytes{framebuffer.stride * framebuffer.height * bytes_per_pixel}; |
| 155 | const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset}; | 154 | const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset}; |
| @@ -162,8 +161,7 @@ void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuf | |||
| 162 | // only allows rows to have a memory alignement of 4. | 161 | // only allows rows to have a memory alignement of 4. |
| 163 | ASSERT(framebuffer.stride % 4 == 0); | 162 | ASSERT(framebuffer.stride % 4 == 0); |
| 164 | 163 | ||
| 165 | if (!rasterizer->AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride, | 164 | if (!rasterizer->AccelerateDisplay(framebuffer, framebuffer_addr, framebuffer.stride)) { |
| 166 | screen_info)) { | ||
| 167 | // Reset the screen info's display texture to its own permanent texture | 165 | // Reset the screen info's display texture to its own permanent texture |
| 168 | screen_info.display_texture = screen_info.texture.resource.handle; | 166 | screen_info.display_texture = screen_info.texture.resource.handle; |
| 169 | 167 | ||
| @@ -281,7 +279,7 @@ void RendererOpenGL::CreateRasterizer() { | |||
| 281 | return; | 279 | return; |
| 282 | } | 280 | } |
| 283 | 281 | ||
| 284 | rasterizer = std::make_unique<RasterizerOpenGL>(render_window); | 282 | rasterizer = std::make_unique<RasterizerOpenGL>(render_window, screen_info); |
| 285 | } | 283 | } |
| 286 | 284 | ||
| 287 | void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture, | 285 | void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture, |
diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index 6f048ed06..7ae103f04 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h | |||
| @@ -68,7 +68,7 @@ private: | |||
| 68 | void UpdateFramerate(); | 68 | void UpdateFramerate(); |
| 69 | 69 | ||
| 70 | // Loads framebuffer from emulated memory into the display information structure | 70 | // Loads framebuffer from emulated memory into the display information structure |
| 71 | void LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer, ScreenInfo& screen_info); | 71 | void LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer); |
| 72 | // Fills active OpenGL texture with the given RGBA color. | 72 | // Fills active OpenGL texture with the given RGBA color. |
| 73 | void LoadColorToActiveGLTexture(u8 color_r, u8 color_g, u8 color_b, u8 color_a, | 73 | void LoadColorToActiveGLTexture(u8 color_r, u8 color_g, u8 color_b, u8 color_a, |
| 74 | const TextureInfo& texture); | 74 | const TextureInfo& texture); |