Maxwell3D: Use override constants from nouveau

This fixes some incorrect rendering in Sunshine
This commit is contained in:
Liam 2022-03-14 10:11:28 -04:00
parent 56c646d82c
commit 37aa472269
2 changed files with 37 additions and 2 deletions

View file

@ -370,8 +370,29 @@ void Maxwell3D::CallMethodFromMME(u32 method, u32 method_argument) {
}
void Maxwell3D::ProcessTopologyOverride() {
using PrimitiveTopology = Maxwell3D::Regs::PrimitiveTopology;
using PrimitiveTopologyOverride = Maxwell3D::Regs::PrimitiveTopologyOverride;
PrimitiveTopology topology{};
switch (regs.topology_override) {
case PrimitiveTopologyOverride::None:
case PrimitiveTopologyOverride::Points:
topology = PrimitiveTopology::Points;
break;
case PrimitiveTopologyOverride::Lines:
topology = PrimitiveTopology::Lines;
break;
case PrimitiveTopologyOverride::LineStrip:
topology = PrimitiveTopology::LineStrip;
break;
default:
topology = static_cast<PrimitiveTopology>(regs.topology_override);
break;
}
if (use_topology_override) {
regs.draw.topology.Assign(regs.topology_override);
regs.draw.topology.Assign(topology);
}
}

View file

@ -367,6 +367,20 @@ public:
Patches = 0xe,
};
enum class PrimitiveTopologyOverride : u32 {
None = 0x0,
Points = 0x1,
Lines = 0x2,
LineStrip = 0x3,
Triangles = 0x4,
TriangleStrip = 0x5,
LinesAdjacency = 0xa,
LineStripAdjacency = 0xb,
TrianglesAdjacency = 0xc,
TriangleStripAdjacency = 0xd,
Patches = 0xe,
};
enum class IndexFormat : u32 {
UnsignedByte = 0x0,
UnsignedShort = 0x1,
@ -1251,7 +1265,7 @@ public:
INSERT_PADDING_WORDS_NOINIT(0xC);
PrimitiveTopology topology_override;
PrimitiveTopologyOverride topology_override;
INSERT_PADDING_WORDS_NOINIT(0x12);