maxwell_3d: Add viewport swizzles

master
ReinUsesLisp 2020-05-04 17:49:48 +07:00
parent 500e9c5969
commit 9b8e962368
2 changed files with 24 additions and 1 deletions

@ -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

@ -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<f32> GetRect() const {
return {