From 9b8e9623683da728f98019b096517704eb946d21 Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Mon, 4 May 2020 17:49:48 -0300 Subject: maxwell_3d: Add viewport swizzles --- src/video_core/engines/maxwell_3d.cpp | 6 ++++++ src/video_core/engines/maxwell_3d.h | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) (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 7db055ea0..8155f6e2e 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -44,6 +44,12 @@ void Maxwell3D::InitializeRegisterDefaults() { viewport.depth_range_near = 0.0f; viewport.depth_range_far = 1.0f; } + for (auto& viewport : regs.viewport_transform) { + viewport.swizzle.x.Assign(Regs::ViewportSwizzle::PositiveX); + viewport.swizzle.y.Assign(Regs::ViewportSwizzle::PositiveY); + viewport.swizzle.z.Assign(Regs::ViewportSwizzle::PositiveZ); + viewport.swizzle.w.Assign(Regs::ViewportSwizzle::PositiveW); + } // 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 864924ff3..4aeff4cc9 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -575,6 +575,17 @@ public: Replay = 3, }; + enum class ViewportSwizzle : u32 { + PositiveX = 0, + NegativeX = 1, + PositiveY = 2, + NegativeY = 3, + PositiveZ = 4, + NegativeZ = 5, + PositiveW = 6, + NegativeW = 7, + }; + struct RenderTargetConfig { u32 address_high; u32 address_low; @@ -618,7 +629,13 @@ public: f32 translate_x; f32 translate_y; f32 translate_z; - INSERT_UNION_PADDING_WORDS(2); + union { + BitField<0, 3, ViewportSwizzle> x; + BitField<4, 3, ViewportSwizzle> y; + BitField<8, 3, ViewportSwizzle> z; + BitField<12, 3, ViewportSwizzle> w; + } swizzle; + INSERT_UNION_PADDING_WORDS(1); Common::Rectangle GetRect() const { return { -- cgit v1.2.3 From 2dbf5290f28efa47b2484537e9316909831fee05 Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Mon, 4 May 2020 18:31:17 -0300 Subject: vk_graphics_pipeline: Implement viewport swizzles with NV_viewport_swizzle --- src/video_core/engines/maxwell_3d.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/video_core/engines') diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 4aeff4cc9..89e29a0d3 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -630,6 +630,7 @@ public: f32 translate_y; f32 translate_z; union { + u32 raw; BitField<0, 3, ViewportSwizzle> x; BitField<4, 3, ViewportSwizzle> y; BitField<8, 3, ViewportSwizzle> z; -- cgit v1.2.3