diff options
| author | bunnei <bunneidev@gmail.com> | 2018-10-25 23:42:39 -0400 | 
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2018-10-25 23:42:39 -0400 | 
| commit | 949d9a713648bf900812612912f5a120cf6d70db (patch) | |
| tree | e50ed4fde212e63a44095c57550e173ae461ea7a | |
| parent | 8cea5981589cd7c1b0b6a03d10ce12c2dad4cb3b (diff) | |
maxwell_3d: Add code for initializing register defaults.
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 20 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 2 | 
2 files changed, 21 insertions, 1 deletions
| diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 78ba29fc1..27ef865a2 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -3,6 +3,7 @@  // Refer to the license.txt file included.  #include <cinttypes> +#include <cstring>  #include "common/assert.h"  #include "core/core.h"  #include "core/core_timing.h" @@ -19,7 +20,24 @@ namespace Tegra::Engines {  constexpr u32 MacroRegistersStart = 0xE00;  Maxwell3D::Maxwell3D(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager) -    : memory_manager(memory_manager), rasterizer{rasterizer}, macro_interpreter(*this) {} +    : memory_manager(memory_manager), rasterizer{rasterizer}, macro_interpreter(*this) { +    InitializeRegisterDefaults(); +} + +void Maxwell3D::InitializeRegisterDefaults() { +    // Initializes registers to their default values - what games expect them to be at boot. This is +    // for certain registers that may not be explicitly set by games. + +    // Reset all registers to zero +    std::memset(®s, 0, sizeof(regs)); + +    // Depth range near/far is not always set, but is expected to be the default 0.0f, 1.0f. This is +    // needed for ARMS. +    for (std::size_t viewport{}; viewport < Regs::NumViewports; ++viewport) { +        regs.viewport[viewport].depth_range_near = 0.0f; +        regs.viewport[viewport].depth_range_far = 1.0f; +    } +}  void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32> parameters) {      // Reset the current macro. diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 0e09a7ee5..754a149fa 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -984,6 +984,8 @@ public:      Texture::FullTextureInfo GetStageTexture(Regs::ShaderStage stage, std::size_t offset) const;  private: +    void InitializeRegisterDefaults(); +      VideoCore::RasterizerInterface& rasterizer;      std::unordered_map<u32, std::vector<u32>> uploaded_macros; | 
