diff options
| author | Kelebek1 <eeeedddccc@hotmail.co.uk> | 2022-11-30 01:43:36 +0000 | 
|---|---|---|
| committer | Kelebek1 <eeeedddccc@hotmail.co.uk> | 2022-11-30 01:43:36 +0000 | 
| commit | a78372110ceedf5e3ad71a4b72bb1fd8b3b5f628 (patch) | |
| tree | 838d4ae7d178522c179fa4e24ae72b2f40897cd8 | |
| parent | 49219b8a864f0176a52486e5a33cc443f91e8f97 (diff) | |
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() {  void Maxwell3D::ProcessQueryCondition() {      const GPUVAddr condition_address{regs.render_enable.Address()}; -    switch (regs.render_enable.mode) { -    case Regs::RenderEnable::Mode::True: { +    switch (regs.render_enable_override) { +    case Regs::RenderEnable::Override::AlwaysRender:          execute_on = true;          break; -    } -    case Regs::RenderEnable::Mode::False: { +    case Regs::RenderEnable::Override::NeverRender:          execute_on = false;          break; -    } -    case Regs::RenderEnable::Mode::Conditional: { -        Regs::ReportSemaphore::Compare cmp; -        memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); -        execute_on = cmp.initial_sequence != 0U && cmp.initial_mode != 0U; -        break; -    } -    case Regs::RenderEnable::Mode::IfEqual: { -        Regs::ReportSemaphore::Compare cmp; -        memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); -        execute_on = -            cmp.initial_sequence == cmp.current_sequence && cmp.initial_mode == cmp.current_mode; -        break; -    } -    case Regs::RenderEnable::Mode::IfNotEqual: { -        Regs::ReportSemaphore::Compare cmp; -        memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); -        execute_on = -            cmp.initial_sequence != cmp.current_sequence || cmp.initial_mode != cmp.current_mode; -        break; -    } -    default: { -        UNIMPLEMENTED_MSG("Uninplemented Condition Mode!"); -        execute_on = true; +    case Regs::RenderEnable::Override::UseRenderEnable: +        switch (regs.render_enable.mode) { +        case Regs::RenderEnable::Mode::True: { +            execute_on = true; +            break; +        } +        case Regs::RenderEnable::Mode::False: { +            execute_on = false; +            break; +        } +        case Regs::RenderEnable::Mode::Conditional: { +            Regs::ReportSemaphore::Compare cmp; +            memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); +            execute_on = cmp.initial_sequence != 0U && cmp.initial_mode != 0U; +            break; +        } +        case Regs::RenderEnable::Mode::IfEqual: { +            Regs::ReportSemaphore::Compare cmp; +            memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); +            execute_on = cmp.initial_sequence == cmp.current_sequence && +                         cmp.initial_mode == cmp.current_mode; +            break; +        } +        case Regs::RenderEnable::Mode::IfNotEqual: { +            Regs::ReportSemaphore::Compare cmp; +            memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); +            execute_on = cmp.initial_sequence != cmp.current_sequence || +                         cmp.initial_mode != cmp.current_mode; +            break; +        } +        default: { +            UNIMPLEMENTED_MSG("Uninplemented Condition Mode!"); +            execute_on = true; +            break; +        } +        }          break;      } -    }  }  void Maxwell3D::ProcessCounterReset() { | 
