summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Kelebek12022-11-30 01:43:36 +0000
committerGravatar Kelebek12022-11-30 01:43:36 +0000
commita78372110ceedf5e3ad71a4b72bb1fd8b3b5f628 (patch)
tree838d4ae7d178522c179fa4e24ae72b2f40897cd8
parentMerge pull request #9349 from lat9nq/cmake-322 (diff)
downloadyuzu-a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628.tar.gz
yuzu-a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628.tar.xz
yuzu-a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628.zip
Respect render mode override
-rw-r--r--src/video_core/engines/maxwell_3d.cpp68
1 files changed, 39 insertions, 29 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index 55462752c..0a601deb5 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -486,41 +486,51 @@ void Maxwell3D::ProcessQueryGet() {
486 486
487void Maxwell3D::ProcessQueryCondition() { 487void Maxwell3D::ProcessQueryCondition() {
488 const GPUVAddr condition_address{regs.render_enable.Address()}; 488 const GPUVAddr condition_address{regs.render_enable.Address()};
489 switch (regs.render_enable.mode) { 489 switch (regs.render_enable_override) {
490 case Regs::RenderEnable::Mode::True: { 490 case Regs::RenderEnable::Override::AlwaysRender:
491 execute_on = true; 491 execute_on = true;
492 break; 492 break;
493 } 493 case Regs::RenderEnable::Override::NeverRender:
494 case Regs::RenderEnable::Mode::False: {
495 execute_on = false; 494 execute_on = false;
496 break; 495 break;
497 } 496 case Regs::RenderEnable::Override::UseRenderEnable:
498 case Regs::RenderEnable::Mode::Conditional: { 497 switch (regs.render_enable.mode) {
499 Regs::ReportSemaphore::Compare cmp; 498 case Regs::RenderEnable::Mode::True: {
500 memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); 499 execute_on = true;
501 execute_on = cmp.initial_sequence != 0U && cmp.initial_mode != 0U; 500 break;
502 break; 501 }
503 } 502 case Regs::RenderEnable::Mode::False: {
504 case Regs::RenderEnable::Mode::IfEqual: { 503 execute_on = false;
505 Regs::ReportSemaphore::Compare cmp; 504 break;
506 memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); 505 }
507 execute_on = 506 case Regs::RenderEnable::Mode::Conditional: {
508 cmp.initial_sequence == cmp.current_sequence && cmp.initial_mode == cmp.current_mode; 507 Regs::ReportSemaphore::Compare cmp;
509 break; 508 memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
510 } 509 execute_on = cmp.initial_sequence != 0U && cmp.initial_mode != 0U;
511 case Regs::RenderEnable::Mode::IfNotEqual: { 510 break;
512 Regs::ReportSemaphore::Compare cmp; 511 }
513 memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); 512 case Regs::RenderEnable::Mode::IfEqual: {
514 execute_on = 513 Regs::ReportSemaphore::Compare cmp;
515 cmp.initial_sequence != cmp.current_sequence || cmp.initial_mode != cmp.current_mode; 514 memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
516 break; 515 execute_on = cmp.initial_sequence == cmp.current_sequence &&
517 } 516 cmp.initial_mode == cmp.current_mode;
518 default: { 517 break;
519 UNIMPLEMENTED_MSG("Uninplemented Condition Mode!"); 518 }
520 execute_on = true; 519 case Regs::RenderEnable::Mode::IfNotEqual: {
520 Regs::ReportSemaphore::Compare cmp;
521 memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
522 execute_on = cmp.initial_sequence != cmp.current_sequence ||
523 cmp.initial_mode != cmp.current_mode;
524 break;
525 }
526 default: {
527 UNIMPLEMENTED_MSG("Uninplemented Condition Mode!");
528 execute_on = true;
529 break;
530 }
531 }
521 break; 532 break;
522 } 533 }
523 }
524} 534}
525 535
526void Maxwell3D::ProcessCounterReset() { 536void Maxwell3D::ProcessCounterReset() {