diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/engines/draw_manager.cpp | 42 | ||||
| -rw-r--r-- | src/video_core/engines/draw_manager.h | 4 |
2 files changed, 23 insertions, 23 deletions
diff --git a/src/video_core/engines/draw_manager.cpp b/src/video_core/engines/draw_manager.cpp index c59524e58..36e4ec89d 100644 --- a/src/video_core/engines/draw_manager.cpp +++ b/src/video_core/engines/draw_manager.cpp | |||
| @@ -46,9 +46,6 @@ void DrawManager::ProcessMethodCall(u32 method, u32 argument) { | |||
| 46 | SetInlineIndexBuffer(regs.inline_index_4x8.index2); | 46 | SetInlineIndexBuffer(regs.inline_index_4x8.index2); |
| 47 | SetInlineIndexBuffer(regs.inline_index_4x8.index3); | 47 | SetInlineIndexBuffer(regs.inline_index_4x8.index3); |
| 48 | break; | 48 | break; |
| 49 | case MAXWELL3D_REG_INDEX(topology_override): | ||
| 50 | use_topology_override = true; | ||
| 51 | break; | ||
| 52 | default: | 49 | default: |
| 53 | break; | 50 | break; |
| 54 | } | 51 | } |
| @@ -156,25 +153,28 @@ void DrawManager::DrawIndexSmall(u32 argument) { | |||
| 156 | ProcessDraw(true, 1); | 153 | ProcessDraw(true, 1); |
| 157 | } | 154 | } |
| 158 | 155 | ||
| 159 | void DrawManager::ProcessTopologyOverride() { | 156 | void DrawManager::UpdateTopology() { |
| 160 | if (!use_topology_override) | ||
| 161 | return; | ||
| 162 | |||
| 163 | const auto& regs{maxwell3d->regs}; | 157 | const auto& regs{maxwell3d->regs}; |
| 164 | switch (regs.topology_override) { | 158 | switch (regs.primitive_topology_control) { |
| 165 | case PrimitiveTopologyOverride::None: | 159 | case PrimitiveTopologyControl::UseInBeginMethods: |
| 166 | break; | ||
| 167 | case PrimitiveTopologyOverride::Points: | ||
| 168 | draw_state.topology = PrimitiveTopology::Points; | ||
| 169 | break; | 160 | break; |
| 170 | case PrimitiveTopologyOverride::Lines: | 161 | case PrimitiveTopologyControl::UseSeparateState: |
| 171 | draw_state.topology = PrimitiveTopology::Lines; | 162 | switch (regs.topology_override) { |
| 172 | break; | 163 | case PrimitiveTopologyOverride::None: |
| 173 | case PrimitiveTopologyOverride::LineStrip: | 164 | break; |
| 174 | draw_state.topology = PrimitiveTopology::LineStrip; | 165 | case PrimitiveTopologyOverride::Points: |
| 175 | break; | 166 | draw_state.topology = PrimitiveTopology::Points; |
| 176 | default: | 167 | break; |
| 177 | draw_state.topology = static_cast<PrimitiveTopology>(regs.topology_override); | 168 | case PrimitiveTopologyOverride::Lines: |
| 169 | draw_state.topology = PrimitiveTopology::Lines; | ||
| 170 | break; | ||
| 171 | case PrimitiveTopologyOverride::LineStrip: | ||
| 172 | draw_state.topology = PrimitiveTopology::LineStrip; | ||
| 173 | break; | ||
| 174 | default: | ||
| 175 | draw_state.topology = static_cast<PrimitiveTopology>(regs.topology_override); | ||
| 176 | break; | ||
| 177 | } | ||
| 178 | break; | 178 | break; |
| 179 | } | 179 | } |
| 180 | } | 180 | } |
| @@ -183,7 +183,7 @@ void DrawManager::ProcessDraw(bool draw_indexed, u32 instance_count) { | |||
| 183 | LOG_TRACE(HW_GPU, "called, topology={}, count={}", draw_state.topology.Value(), | 183 | LOG_TRACE(HW_GPU, "called, topology={}, count={}", draw_state.topology.Value(), |
| 184 | draw_indexed ? draw_state.index_buffer.count : draw_state.vertex_buffer.count); | 184 | draw_indexed ? draw_state.index_buffer.count : draw_state.vertex_buffer.count); |
| 185 | 185 | ||
| 186 | ProcessTopologyOverride(); | 186 | UpdateTopology(); |
| 187 | 187 | ||
| 188 | if (maxwell3d->ShouldExecute()) | 188 | if (maxwell3d->ShouldExecute()) |
| 189 | maxwell3d->rasterizer->Draw(draw_indexed, instance_count); | 189 | maxwell3d->rasterizer->Draw(draw_indexed, instance_count); |
diff --git a/src/video_core/engines/draw_manager.h b/src/video_core/engines/draw_manager.h index 4f67027ca..0e6930a9c 100644 --- a/src/video_core/engines/draw_manager.h +++ b/src/video_core/engines/draw_manager.h | |||
| @@ -10,6 +10,7 @@ class RasterizerInterface; | |||
| 10 | } | 10 | } |
| 11 | 11 | ||
| 12 | namespace Tegra::Engines { | 12 | namespace Tegra::Engines { |
| 13 | using PrimitiveTopologyControl = Maxwell3D::Regs::PrimitiveTopologyControl; | ||
| 13 | using PrimitiveTopology = Maxwell3D::Regs::PrimitiveTopology; | 14 | using PrimitiveTopology = Maxwell3D::Regs::PrimitiveTopology; |
| 14 | using PrimitiveTopologyOverride = Maxwell3D::Regs::PrimitiveTopologyOverride; | 15 | using PrimitiveTopologyOverride = Maxwell3D::Regs::PrimitiveTopologyOverride; |
| 15 | using IndexBuffer = Maxwell3D::Regs::IndexBuffer; | 16 | using IndexBuffer = Maxwell3D::Regs::IndexBuffer; |
| @@ -58,12 +59,11 @@ private: | |||
| 58 | 59 | ||
| 59 | void DrawIndexSmall(u32 argument); | 60 | void DrawIndexSmall(u32 argument); |
| 60 | 61 | ||
| 61 | void ProcessTopologyOverride(); | 62 | void UpdateTopology(); |
| 62 | 63 | ||
| 63 | void ProcessDraw(bool draw_indexed, u32 instance_count); | 64 | void ProcessDraw(bool draw_indexed, u32 instance_count); |
| 64 | 65 | ||
| 65 | Maxwell3D* maxwell3d{}; | 66 | Maxwell3D* maxwell3d{}; |
| 66 | State draw_state{}; | 67 | State draw_state{}; |
| 67 | bool use_topology_override{}; | ||
| 68 | }; | 68 | }; |
| 69 | } // namespace Tegra::Engines | 69 | } // namespace Tegra::Engines |