summaryrefslogtreecommitdiffstats
path: root/src/video_core/engines/maxwell_3d.cpp
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2022-03-11 01:21:04 +0100
committerLiam <byteslice@airmail.cc>2022-03-11 01:21:04 +0100
commitf1521183f8c029e45a707e9127bccf33a05cc366 (patch)
treebe1d082100cdb514fff8e17c6b6256b30a11749f /src/video_core/engines/maxwell_3d.cpp
parentMerge pull request #7999 from merryhime/fix-7992 (diff)
downloadyuzu-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.cpp14
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;