diff options
| author | 2022-12-07 00:28:35 +0100 | |
|---|---|---|
| committer | 2023-01-01 16:43:58 -0500 | |
| commit | 581a7d785bb4936c92d320f17d3d824e244eee5a (patch) | |
| tree | f378a4075f924ad9b5a775195e0b32e5ca032c7a /src/video_core/engines | |
| parent | RasterizerMemory: Add filtering for flushing/invalidation operations. (diff) | |
| download | yuzu-581a7d785bb4936c92d320f17d3d824e244eee5a.tar.gz yuzu-581a7d785bb4936c92d320f17d3d824e244eee5a.tar.xz yuzu-581a7d785bb4936c92d320f17d3d824e244eee5a.zip | |
Rasterizer: Setup skeleton for Host Conditional rendering
Diffstat (limited to 'src/video_core/engines')
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index d44a5cabf..943a69935 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include "video_core/rasterizer_interface.h" | 16 | #include "video_core/rasterizer_interface.h" |
| 17 | #include "video_core/textures/texture.h" | 17 | #include "video_core/textures/texture.h" |
| 18 | 18 | ||
| 19 | |||
| 20 | namespace Tegra::Engines { | 19 | namespace Tegra::Engines { |
| 21 | 20 | ||
| 22 | using VideoCore::QueryType; | 21 | using VideoCore::QueryType; |
| @@ -538,13 +537,17 @@ void Maxwell3D::ProcessQueryGet() { | |||
| 538 | void Maxwell3D::ProcessQueryCondition() { | 537 | void Maxwell3D::ProcessQueryCondition() { |
| 539 | const GPUVAddr condition_address{regs.render_enable.Address()}; | 538 | const GPUVAddr condition_address{regs.render_enable.Address()}; |
| 540 | switch (regs.render_enable_override) { | 539 | switch (regs.render_enable_override) { |
| 541 | case Regs::RenderEnable::Override::AlwaysRender: | 540 | case Regs::RenderEnable::Override::AlwaysRender: { |
| 542 | execute_on = true; | 541 | execute_on = true; |
| 543 | break; | 542 | break; |
| 544 | case Regs::RenderEnable::Override::NeverRender: | 543 | case Regs::RenderEnable::Override::NeverRender: |
| 545 | execute_on = false; | 544 | execute_on = false; |
| 546 | break; | 545 | break; |
| 547 | case Regs::RenderEnable::Override::UseRenderEnable: | 546 | case Regs::RenderEnable::Override::UseRenderEnable: { |
| 547 | if (rasterizer->AccelerateConditionalRendering()) { | ||
| 548 | execute_on = true; | ||
| 549 | return; | ||
| 550 | } | ||
| 548 | switch (regs.render_enable.mode) { | 551 | switch (regs.render_enable.mode) { |
| 549 | case Regs::RenderEnable::Mode::True: { | 552 | case Regs::RenderEnable::Mode::True: { |
| 550 | execute_on = true; | 553 | execute_on = true; |
| @@ -582,6 +585,8 @@ void Maxwell3D::ProcessQueryCondition() { | |||
| 582 | } | 585 | } |
| 583 | break; | 586 | break; |
| 584 | } | 587 | } |
| 588 | } | ||
| 589 | } | ||
| 585 | } | 590 | } |
| 586 | 591 | ||
| 587 | void Maxwell3D::ProcessCounterReset() { | 592 | void Maxwell3D::ProcessCounterReset() { |
| @@ -618,7 +623,8 @@ std::optional<u64> Maxwell3D::GetQueryResult() { | |||
| 618 | } | 623 | } |
| 619 | 624 | ||
| 620 | void Maxwell3D::ProcessCBBind(size_t stage_index) { | 625 | void Maxwell3D::ProcessCBBind(size_t stage_index) { |
| 621 | // Bind the buffer currently in CB_ADDRESS to the specified index in the desired shader stage. | 626 | // Bind the buffer currently in CB_ADDRESS to the specified index in the desired shader |
| 627 | // stage. | ||
| 622 | const auto& bind_data = regs.bind_groups[stage_index]; | 628 | const auto& bind_data = regs.bind_groups[stage_index]; |
| 623 | auto& buffer = state.shader_stages[stage_index].const_buffers[bind_data.shader_slot]; | 629 | auto& buffer = state.shader_stages[stage_index].const_buffers[bind_data.shader_slot]; |
| 624 | buffer.enabled = bind_data.valid.Value() != 0; | 630 | buffer.enabled = bind_data.valid.Value() != 0; |