From d7298ec2626f013167ea254276259ac7b39f46be Mon Sep 17 00:00:00 2001 From: Markus Wick Date: Thu, 9 Aug 2018 21:31:46 +0200 Subject: Update the stream_buffer helper from Citra. Please see https://github.com/citra-emu/citra/pull/3666 for more details. --- src/video_core/renderer_opengl/gl_rasterizer.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer.h') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index bd01dc0ae..19146777c 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -139,7 +139,6 @@ private: /// Syncs the blend state to match the guest state void SyncBlendState(); - bool has_ARB_buffer_storage = false; bool has_ARB_direct_state_access = false; bool has_ARB_separate_shader_objects = false; bool has_ARB_vertex_attrib_binding = false; @@ -160,7 +159,7 @@ private: ssbos; static constexpr size_t STREAM_BUFFER_SIZE = 128 * 1024 * 1024; - std::unique_ptr stream_buffer; + OGLStreamBuffer stream_buffer; OGLBuffer uniform_buffer; OGLFramebuffer framebuffer; -- cgit v1.2.3 From 6f6bba3ff16641f92fbc70b31e41be80d4a3c5c8 Mon Sep 17 00:00:00 2001 From: Markus Wick Date: Fri, 10 Aug 2018 09:30:35 +0200 Subject: gl_rasterizer: Use a helper for aligning the buffer. --- src/video_core/renderer_opengl/gl_rasterizer.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer.h') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 19146777c..d9d4e04b9 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -169,7 +169,9 @@ private: std::array uniform_buffers; - void SetupShaders(u8* buffer_ptr, GLintptr buffer_offset); + std::pair SetupShaders(u8* buffer_ptr, GLintptr buffer_offset); + + std::pair AlignBuffer(u8* buffer_ptr, GLintptr buffer_offset, size_t alignment); enum class AccelDraw { Disabled, Arrays, Indexed }; AccelDraw accelerate_draw = AccelDraw::Disabled; -- cgit v1.2.3 From ce722e317b23a4591980fca0ffa43042d873eb2d Mon Sep 17 00:00:00 2001 From: Markus Wick Date: Fri, 10 Aug 2018 09:45:38 +0200 Subject: gl_rasterizer: Use the streaming buffer itself for the constant buffer. Don't emut copies, especially not for data, which is used once. They just end in a huge GPU overhead. --- src/video_core/renderer_opengl/gl_rasterizer.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer.h') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index d9d4e04b9..6f8503703 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -162,13 +162,12 @@ private: OGLStreamBuffer stream_buffer; OGLBuffer uniform_buffer; OGLFramebuffer framebuffer; + GLint uniform_buffer_alignment; size_t CalculateVertexArraysSize() const; std::pair SetupVertexArrays(u8* array_ptr, GLintptr buffer_offset); - std::array uniform_buffers; - std::pair SetupShaders(u8* buffer_ptr, GLintptr buffer_offset); std::pair AlignBuffer(u8* buffer_ptr, GLintptr buffer_offset, size_t alignment); -- cgit v1.2.3 From 6ff7906ddc89d8f970702d320f29317831de7975 Mon Sep 17 00:00:00 2001 From: Markus Wick Date: Fri, 10 Aug 2018 10:29:37 +0200 Subject: gl_rasterizer: Use the stream buffer for constant buffers. --- src/video_core/renderer_opengl/gl_rasterizer.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer.h') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 6f8503703..aa6afc1de 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -100,9 +101,10 @@ private: * @param entries Vector describing the buffers that are actually used in the guest shader. * @returns The next available bindpoint for use in the next shader stage. */ - u32 SetupConstBuffers(Tegra::Engines::Maxwell3D::Regs::ShaderStage stage, GLuint program, - u32 current_bindpoint, - const std::vector& entries); + std::tuple SetupConstBuffers( + u8* buffer_ptr, GLintptr buffer_offset, Tegra::Engines::Maxwell3D::Regs::ShaderStage stage, + GLuint program, u32 current_bindpoint, + const std::vector& entries); /* * Configures the current textures to use for the draw command. @@ -154,9 +156,6 @@ private: OGLVertexArray hw_vao; std::array texture_samplers; - std::array, - Tegra::Engines::Maxwell3D::Regs::MaxShaderStage> - ssbos; static constexpr size_t STREAM_BUFFER_SIZE = 128 * 1024 * 1024; OGLStreamBuffer stream_buffer; -- cgit v1.2.3 From 0eb39922f673e88efb90b08116293f626c0a4e62 Mon Sep 17 00:00:00 2001 From: Markus Wick Date: Fri, 10 Aug 2018 19:11:12 +0200 Subject: gl_rasterizer: Use a shared helper to upload from CPU memory. --- src/video_core/renderer_opengl/gl_rasterizer.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/video_core/renderer_opengl/gl_rasterizer.h') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index aa6afc1de..74307f626 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -171,6 +171,10 @@ private: std::pair AlignBuffer(u8* buffer_ptr, GLintptr buffer_offset, size_t alignment); + std::tuple UploadMemory(u8* buffer_ptr, GLintptr buffer_offset, + Tegra::GPUVAddr gpu_addr, size_t size, + size_t alignment = 4); + enum class AccelDraw { Disabled, Arrays, Indexed }; AccelDraw accelerate_draw = AccelDraw::Disabled; }; -- cgit v1.2.3