diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/video_core/const_buffer_accessor.cpp | 35 | ||||
| -rw-r--r-- | src/video_core/const_buffer_accessor.h | 21 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 3 |
5 files changed, 65 insertions, 2 deletions
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 242a0d1cd..804395d38 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt | |||
| @@ -1,4 +1,6 @@ | |||
| 1 | add_library(video_core STATIC | 1 | add_library(video_core STATIC |
| 2 | const_buffer_accessor.cpp | ||
| 3 | const_buffer_accessor.h | ||
| 2 | dma_pusher.cpp | 4 | dma_pusher.cpp |
| 3 | dma_pusher.h | 5 | dma_pusher.h |
| 4 | debug_utils/debug_utils.cpp | 6 | debug_utils/debug_utils.cpp |
diff --git a/src/video_core/const_buffer_accessor.cpp b/src/video_core/const_buffer_accessor.cpp new file mode 100644 index 000000000..c89ab91c7 --- /dev/null +++ b/src/video_core/const_buffer_accessor.cpp | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include <cstring> | ||
| 4 | |||
| 5 | #include "common/common_types.h" | ||
| 6 | #include "core/core.h" | ||
| 7 | #include "core/memory.h" | ||
| 8 | #include "video_core/const_buffer_accessor.h" | ||
| 9 | #include "video_core/engines/maxwell_3d.h" | ||
| 10 | #include "video_core/gpu.h" | ||
| 11 | #include "video_core/memory_manager.h" | ||
| 12 | |||
| 13 | namespace Tegra { | ||
| 14 | |||
| 15 | u32 ConstBufferAccessor::access32(Tegra::Engines::Maxwell3D::Regs::ShaderStage stage, | ||
| 16 | u64 const_buffer, u64 offset) { | ||
| 17 | auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager(); | ||
| 18 | const auto& shader_stage = maxwell3d.state.shader_stages[static_cast<std::size_t>(stage)]; | ||
| 19 | const auto& buffer = shader_stage.const_buffers[const_buffer]; | ||
| 20 | u32 result; | ||
| 21 | std::memcpy(&result, memory_manager.GetPointer(buffer.address + offset * 4), sizeof(u32)); | ||
| 22 | return result; | ||
| 23 | } | ||
| 24 | |||
| 25 | u64 ConstBufferAccessor::access64(Tegra::Engines::Maxwell3D::Regs::ShaderStage stage, | ||
| 26 | u64 const_buffer, u64 offset) { | ||
| 27 | auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager(); | ||
| 28 | const auto& shader_stage = maxwell3d.state.shader_stages[static_cast<std::size_t>(stage)]; | ||
| 29 | const auto& buffer = shader_stage.const_buffers[const_buffer]; | ||
| 30 | u64 result; | ||
| 31 | std::memcpy(&result, memory_manager.GetPointer(buffer.address + offset * 4), sizeof(u64)); | ||
| 32 | return result; | ||
| 33 | } | ||
| 34 | |||
| 35 | } // namespace Tegra | ||
diff --git a/src/video_core/const_buffer_accessor.h b/src/video_core/const_buffer_accessor.h new file mode 100644 index 000000000..2410f1483 --- /dev/null +++ b/src/video_core/const_buffer_accessor.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "common/common_types.h" | ||
| 4 | #include "video_core/engines/maxwell_3d.h" | ||
| 5 | |||
| 6 | namespace Tegra { | ||
| 7 | |||
| 8 | class ConstBufferAccessor { | ||
| 9 | public: | ||
| 10 | ConstBufferAccessor(Tegra::Engines::Maxwell3D& maxwell3d) : maxwell3d(maxwell3d) {} | ||
| 11 | ~ConstBufferAccessor() = default; | ||
| 12 | |||
| 13 | u32 access32(Tegra::Engines::Maxwell3D::Regs::ShaderStage stage, u64 const_buffer, u64 offset); | ||
| 14 | |||
| 15 | u64 access64(Tegra::Engines::Maxwell3D::Regs::ShaderStage stage, u64 const_buffer, u64 offset); | ||
| 16 | |||
| 17 | private: | ||
| 18 | Tegra::Engines::Maxwell3D& maxwell3d; | ||
| 19 | }; | ||
| 20 | |||
| 21 | } // namespace Tegra | ||
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 7ff1e6737..f2ac5382d 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -98,9 +98,11 @@ struct FramebufferCacheKey { | |||
| 98 | } | 98 | } |
| 99 | }; | 99 | }; |
| 100 | 100 | ||
| 101 | RasterizerOpenGL::RasterizerOpenGL(Core::System& system, ScreenInfo& info) | 101 | RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window, Core::System& system, |
| 102 | ScreenInfo& info) | ||
| 102 | : res_cache{*this}, shader_cache{*this, system}, global_cache{*this}, system{system}, | 103 | : res_cache{*this}, shader_cache{*this, system}, global_cache{*this}, system{system}, |
| 103 | screen_info{info}, buffer_cache(*this, STREAM_BUFFER_SIZE) { | 104 | screen_info{info}, buffer_cache(*this, STREAM_BUFFER_SIZE), |
| 105 | const_buffer_accessor(system.GPU().Maxwell3D()) { | ||
| 104 | // Create sampler objects | 106 | // Create sampler objects |
| 105 | for (std::size_t i = 0; i < texture_samplers.size(); ++i) { | 107 | for (std::size_t i = 0; i < texture_samplers.size(); ++i) { |
| 106 | texture_samplers[i].Create(); | 108 | texture_samplers[i].Create(); |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 54fbf48aa..886e9c2b5 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <glad/glad.h> | 17 | #include <glad/glad.h> |
| 18 | 18 | ||
| 19 | #include "common/common_types.h" | 19 | #include "common/common_types.h" |
| 20 | #include "video_core/const_buffer_accessor.h" | ||
| 20 | #include "video_core/engines/maxwell_3d.h" | 21 | #include "video_core/engines/maxwell_3d.h" |
| 21 | #include "video_core/rasterizer_cache.h" | 22 | #include "video_core/rasterizer_cache.h" |
| 22 | #include "video_core/rasterizer_interface.h" | 23 | #include "video_core/rasterizer_interface.h" |
| @@ -229,6 +230,8 @@ private: | |||
| 229 | PrimitiveAssembler primitive_assembler{buffer_cache}; | 230 | PrimitiveAssembler primitive_assembler{buffer_cache}; |
| 230 | GLint uniform_buffer_alignment; | 231 | GLint uniform_buffer_alignment; |
| 231 | 232 | ||
| 233 | Tegra::ConstBufferAccessor const_buffer_accessor; | ||
| 234 | |||
| 232 | std::size_t CalculateVertexArraysSize() const; | 235 | std::size_t CalculateVertexArraysSize() const; |
| 233 | 236 | ||
| 234 | std::size_t CalculateIndexBufferSize() const; | 237 | std::size_t CalculateIndexBufferSize() const; |