diff options
| author | 2022-11-30 01:43:36 +0000 | |
|---|---|---|
| committer | 2022-11-30 01:43:36 +0000 | |
| commit | a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628 (patch) | |
| tree | 838d4ae7d178522c179fa4e24ae72b2f40897cd8 | |
| parent | Merge pull request #9349 from lat9nq/cmake-322 (diff) | |
| download | yuzu-a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628.tar.gz yuzu-a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628.tar.xz yuzu-a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628.zip | |
Respect render mode override
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 68 |
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 | ||
| 487 | void Maxwell3D::ProcessQueryCondition() { | 487 | void 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 | ||
| 526 | void Maxwell3D::ProcessCounterReset() { | 536 | void Maxwell3D::ProcessCounterReset() { |