summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Lioncash2018-08-20 19:34:02 -0400
committerGravatar Lioncash2018-08-20 19:43:05 -0400
commit46ef072cf9e0636f7ba9f1414fdabeb607a88e0f (patch)
treeaf01f55406fdd493806ffc640e03519a0228b7ca
parentrenderer_base: Make creation of the rasterizer, the responsibility of the ren... (diff)
downloadyuzu-46ef072cf9e0636f7ba9f1414fdabeb607a88e0f.tar.gz
yuzu-46ef072cf9e0636f7ba9f1414fdabeb607a88e0f.tar.xz
yuzu-46ef072cf9e0636f7ba9f1414fdabeb607a88e0f.zip
rasterizer_interface: Remove ScreenInfo from AccelerateDraw()'s signature
This is an OpenGL renderer-specific data type. Given that, this type shouldn't be used within the base interface for the rasterizer. Instead, we can pass this information to the rasterizer via reference.
Diffstat (limited to '')
-rw-r--r--src/video_core/rasterizer_interface.h4
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp7
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h8
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp10
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.h2
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
11struct ScreenInfo;
12
13namespace VideoCore { 11namespace VideoCore {
14 12
15class RasterizerInterface { 13class 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));
36MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255)); 36MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255));
37MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); 37MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100));
38 38
39RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window) 39RasterizerOpenGL::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
576bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, 576bool 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
31class RasterizerOpenGL : public VideoCore::RasterizerInterface { 31class RasterizerOpenGL : public VideoCore::RasterizerInterface {
32public: 32public:
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 */
151void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer, 151void 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
287void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture, 285void 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);