diff options
author | Liam <byteslice@airmail.cc> | 2022-03-11 01:21:04 +0100 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2022-03-11 01:21:04 +0100 |
commit | f1521183f8c029e45a707e9127bccf33a05cc366 (patch) | |
tree | be1d082100cdb514fff8e17c6b6256b30a11749f /src/video_core/engines/maxwell_3d.cpp | |
parent | Merge pull request #7999 from merryhime/fix-7992 (diff) | |
download | yuzu-f1521183f8c029e45a707e9127bccf33a05cc366.tar yuzu-f1521183f8c029e45a707e9127bccf33a05cc366.tar.gz yuzu-f1521183f8c029e45a707e9127bccf33a05cc366.tar.bz2 yuzu-f1521183f8c029e45a707e9127bccf33a05cc366.tar.lz yuzu-f1521183f8c029e45a707e9127bccf33a05cc366.tar.xz yuzu-f1521183f8c029e45a707e9127bccf33a05cc366.tar.zst yuzu-f1521183f8c029e45a707e9127bccf33a05cc366.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 5d6d217bb..2d640bd43 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -208,6 +208,10 @@ void Maxwell3D::ProcessMethodCall(u32 method, u32 argument, u32 nonshadow_argume return ProcessCBBind(4); case MAXWELL3D_REG_INDEX(draw.vertex_end_gl): return DrawArrays(); + case MAXWELL3D_REG_INDEX(small_index): + regs.index_array.count = regs.small_index.count; + regs.index_array.first = regs.small_index.first; + return DrawArrays(); case MAXWELL3D_REG_INDEX(clear_buffers): return ProcessClearBuffers(); case MAXWELL3D_REG_INDEX(query.query_get): @@ -360,6 +364,12 @@ void Maxwell3D::CallMethodFromMME(u32 method, u32 method_argument) { } } +void Maxwell3D::ProcessTopologyOverride() { + if (regs.draw.topology != regs.topology_override) { + regs.draw.topology.Assign(regs.topology_override); + } +} + void Maxwell3D::FlushMMEInlineDraw() { LOG_TRACE(HW_GPU, "called, topology={}, count={}", regs.draw.topology.Value(), regs.vertex_buffer.count); @@ -370,6 +380,8 @@ void Maxwell3D::FlushMMEInlineDraw() { ASSERT_MSG(!regs.draw.instance_next || !regs.draw.instance_cont, "Illegal combination of instancing parameters"); + ProcessTopologyOverride(); + const bool is_indexed = mme_draw.current_mode == MMEDrawMode::Indexed; if (ShouldExecute()) { rasterizer->Draw(is_indexed, true); @@ -529,6 +541,8 @@ void Maxwell3D::DrawArrays() { ASSERT_MSG(!regs.draw.instance_next || !regs.draw.instance_cont, "Illegal combination of instancing parameters"); + ProcessTopologyOverride(); + if (regs.draw.instance_next) { // Increment the current instance *before* drawing. state.current_instance += 1; |