|
|
@ -493,6 +493,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; |
|
|
@ -511,15 +519,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 = |
|
|
|
|
|
cmp.initial_sequence == cmp.current_sequence && cmp.initial_mode == cmp.current_mode; |
|
|
|
|
|
|
|
|
execute_on = cmp.initial_sequence == cmp.current_sequence && |
|
|
|
|
|
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 = |
|
|
|
|
|
cmp.initial_sequence != cmp.current_sequence || cmp.initial_mode != cmp.current_mode; |
|
|
|
|
|
|
|
|
execute_on = cmp.initial_sequence != cmp.current_sequence || |
|
|
|
|
|
cmp.initial_mode != cmp.current_mode; |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
default: { |
|
|
default: { |
|
|
@ -528,6 +536,8 @@ void Maxwell3D::ProcessQueryCondition() { |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Maxwell3D::ProcessCounterReset() { |
|
|
void Maxwell3D::ProcessCounterReset() { |
|
|
|