From 1881e86c434edfc17f78f68f07443bef1120cda1 Mon Sep 17 00:00:00 2001 From: Rodolfo Bogado Date: Tue, 13 Nov 2018 20:13:16 -0300 Subject: fix viewport and scissor behavior --- src/video_core/engines/maxwell_3d.cpp | 4 ++-- src/video_core/engines/maxwell_3d.h | 26 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 12 deletions(-) (limited to 'src/video_core/engines') diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 6de07ea56..58b598c7f 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -34,8 +34,8 @@ void Maxwell3D::InitializeRegisterDefaults() { // 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; + regs.viewports[viewport].depth_range_near = 0.0f; + regs.viewports[viewport].depth_range_far = 1.0f; } // Doom and Bomberman seems to use the uninitialized registers and just enable blend // so initialize blend registers with sane values diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 91ca57883..32780fa9a 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -505,9 +505,9 @@ public: INSERT_PADDING_WORDS(0x2E); - RenderTargetConfig rt[NumRenderTargets]; + std::array rt; - struct { + struct ViewportTransform { f32 scale_x; f32 scale_y; f32 scale_z; @@ -540,9 +540,11 @@ public: s32 GetHeight() const { return static_cast(translate_y + std::fabs(scale_y)) - GetY(); } - } viewport_transform[NumViewports]; + }; - struct { + std::array viewport_transform; + + struct ViewPort { union { BitField<0, 16, u32> x; BitField<16, 16, u32> width; @@ -553,7 +555,9 @@ public: }; float depth_range_near; float depth_range_far; - } viewport[NumViewports]; + }; + + std::array viewports; INSERT_PADDING_WORDS(0x1D); @@ -571,7 +575,7 @@ public: INSERT_PADDING_WORDS(0x17); - struct { + struct ScissorTest { u32 enable; union { BitField<0, 16, u32> min_x; @@ -581,9 +585,11 @@ public: BitField<0, 16, u32> min_y; BitField<16, 16, u32> max_y; }; - } scissor_test; + u32 fill; + }; + std::array scissor_test; - INSERT_PADDING_WORDS(0x52); + INSERT_PADDING_WORDS(0x15); s32 stencil_back_func_ref; u32 stencil_back_mask; @@ -1100,8 +1106,8 @@ private: ASSERT_REG_POSITION(macros, 0x45); ASSERT_REG_POSITION(tfb_enabled, 0x1D1); ASSERT_REG_POSITION(rt, 0x200); -ASSERT_REG_POSITION(viewport_transform[0], 0x280); -ASSERT_REG_POSITION(viewport, 0x300); +ASSERT_REG_POSITION(viewport_transform, 0x280); +ASSERT_REG_POSITION(viewports, 0x300); ASSERT_REG_POSITION(vertex_buffer, 0x35D); ASSERT_REG_POSITION(clear_color[0], 0x360); ASSERT_REG_POSITION(clear_depth, 0x364); -- cgit v1.2.3