Respect render mode override

master
Kelebek1 2022-11-30 01:43:36 +07:00
parent 49219b8a86
commit a78372110c
1 changed files with 39 additions and 29 deletions

@ -486,6 +486,14 @@ void Maxwell3D::ProcessQueryGet() {
void Maxwell3D::ProcessQueryCondition() { void Maxwell3D::ProcessQueryCondition() {
const GPUVAddr condition_address{regs.render_enable.Address()}; const GPUVAddr condition_address{regs.render_enable.Address()};
switch (regs.render_enable_override) {
case Regs::RenderEnable::Override::AlwaysRender:
execute_on = true;
break;
case Regs::RenderEnable::Override::NeverRender:
execute_on = false;
break;
case Regs::RenderEnable::Override::UseRenderEnable:
switch (regs.render_enable.mode) { switch (regs.render_enable.mode) {
case Regs::RenderEnable::Mode::True: { case Regs::RenderEnable::Mode::True: {
execute_on = true; execute_on = true;
@ -504,15 +512,15 @@ void Maxwell3D::ProcessQueryCondition() {
case Regs::RenderEnable::Mode::IfEqual: { case Regs::RenderEnable::Mode::IfEqual: {
Regs::ReportSemaphore::Compare cmp; Regs::ReportSemaphore::Compare cmp;
memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
execute_on = execute_on = cmp.initial_sequence == cmp.current_sequence &&
cmp.initial_sequence == cmp.current_sequence && cmp.initial_mode == cmp.current_mode; cmp.initial_mode == cmp.current_mode;
break; break;
} }
case Regs::RenderEnable::Mode::IfNotEqual: { case Regs::RenderEnable::Mode::IfNotEqual: {
Regs::ReportSemaphore::Compare cmp; Regs::ReportSemaphore::Compare cmp;
memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp));
execute_on = execute_on = cmp.initial_sequence != cmp.current_sequence ||
cmp.initial_sequence != cmp.current_sequence || cmp.initial_mode != cmp.current_mode; cmp.initial_mode != cmp.current_mode;
break; break;
} }
default: { default: {
@ -521,6 +529,8 @@ void Maxwell3D::ProcessQueryCondition() {
break; break;
} }
} }
break;
}
} }
void Maxwell3D::ProcessCounterReset() { void Maxwell3D::ProcessCounterReset() {