|
@@ -46,9 +46,6 @@ void DrawManager::ProcessMethodCall(u32 method, u32 argument) {
|
|
|
SetInlineIndexBuffer(regs.inline_index_4x8.index2);
|
|
SetInlineIndexBuffer(regs.inline_index_4x8.index2);
|
|
|
SetInlineIndexBuffer(regs.inline_index_4x8.index3);
|
|
SetInlineIndexBuffer(regs.inline_index_4x8.index3);
|
|
|
break;
|
|
break;
|
|
|
- case MAXWELL3D_REG_INDEX(topology_override):
|
|
|
|
|
- use_topology_override = true;
|
|
|
|
|
- break;
|
|
|
|
|
default:
|
|
default:
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -156,25 +153,28 @@ void DrawManager::DrawIndexSmall(u32 argument) {
|
|
|
ProcessDraw(true, 1);
|
|
ProcessDraw(true, 1);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void DrawManager::ProcessTopologyOverride() {
|
|
|
|
|
- if (!use_topology_override)
|
|
|
|
|
- return;
|
|
|
|
|
-
|
|
|
|
|
|
|
+void DrawManager::UpdateTopology() {
|
|
|
const auto& regs{maxwell3d->regs};
|
|
const auto& regs{maxwell3d->regs};
|
|
|
- switch (regs.topology_override) {
|
|
|
|
|
- case PrimitiveTopologyOverride::None:
|
|
|
|
|
- break;
|
|
|
|
|
- case PrimitiveTopologyOverride::Points:
|
|
|
|
|
- draw_state.topology = PrimitiveTopology::Points;
|
|
|
|
|
|
|
+ switch (regs.primitive_topology_control) {
|
|
|
|
|
+ case PrimitiveTopologyControl::UseInBeginMethods:
|
|
|
break;
|
|
break;
|
|
|
- case PrimitiveTopologyOverride::Lines:
|
|
|
|
|
- draw_state.topology = PrimitiveTopology::Lines;
|
|
|
|
|
- break;
|
|
|
|
|
- case PrimitiveTopologyOverride::LineStrip:
|
|
|
|
|
- draw_state.topology = PrimitiveTopology::LineStrip;
|
|
|
|
|
- break;
|
|
|
|
|
- default:
|
|
|
|
|
- draw_state.topology = static_cast<PrimitiveTopology>(regs.topology_override);
|
|
|
|
|
|
|
+ case PrimitiveTopologyControl::UseSeparateState:
|
|
|
|
|
+ switch (regs.topology_override) {
|
|
|
|
|
+ case PrimitiveTopologyOverride::None:
|
|
|
|
|
+ break;
|
|
|
|
|
+ case PrimitiveTopologyOverride::Points:
|
|
|
|
|
+ draw_state.topology = PrimitiveTopology::Points;
|
|
|
|
|
+ break;
|
|
|
|
|
+ case PrimitiveTopologyOverride::Lines:
|
|
|
|
|
+ draw_state.topology = PrimitiveTopology::Lines;
|
|
|
|
|
+ break;
|
|
|
|
|
+ case PrimitiveTopologyOverride::LineStrip:
|
|
|
|
|
+ draw_state.topology = PrimitiveTopology::LineStrip;
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ draw_state.topology = static_cast<PrimitiveTopology>(regs.topology_override);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -183,7 +183,7 @@ void DrawManager::ProcessDraw(bool draw_indexed, u32 instance_count) {
|
|
|
LOG_TRACE(HW_GPU, "called, topology={}, count={}", draw_state.topology.Value(),
|
|
LOG_TRACE(HW_GPU, "called, topology={}, count={}", draw_state.topology.Value(),
|
|
|
draw_indexed ? draw_state.index_buffer.count : draw_state.vertex_buffer.count);
|
|
draw_indexed ? draw_state.index_buffer.count : draw_state.vertex_buffer.count);
|
|
|
|
|
|
|
|
- ProcessTopologyOverride();
|
|
|
|
|
|
|
+ UpdateTopology();
|
|
|
|
|
|
|
|
if (maxwell3d->ShouldExecute())
|
|
if (maxwell3d->ShouldExecute())
|
|
|
maxwell3d->rasterizer->Draw(draw_indexed, instance_count);
|
|
maxwell3d->rasterizer->Draw(draw_indexed, instance_count);
|