early-access version 3185

main
pineappleEA 2022-12-05 00:48:28 +01:00
parent aa33d0e336
commit b8bb0894f1
3 changed files with 48 additions and 38 deletions

View File

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 3184. This is the source code for early-access 3185.
## Legal Notice ## Legal Notice

View File

@ -36,14 +36,14 @@ public:
private: private:
KernelCore& kernel; KernelCore& kernel;
std::jthread m_host_thread;
std::mutex m_session_mutex;
std::map<KServerSession*, std::shared_ptr<SessionRequestManager>> m_sessions;
KEvent* m_wakeup_event;
KThread* m_thread;
std::atomic<bool> m_shutdown_requested;
const std::string m_service_name; const std::string m_service_name;
std::jthread m_host_thread{};
std::mutex m_session_mutex{};
std::map<KServerSession*, std::shared_ptr<SessionRequestManager>> m_sessions{};
KEvent* m_wakeup_event{};
KThread* m_thread{};
std::atomic<bool> m_shutdown_requested{};
}; };
void ServiceThread::Impl::WaitAndProcessImpl() { void ServiceThread::Impl::WaitAndProcessImpl() {
@ -183,7 +183,7 @@ ServiceThread::Impl::~Impl() {
} }
ServiceThread::Impl::Impl(KernelCore& kernel_, const std::string& service_name) ServiceThread::Impl::Impl(KernelCore& kernel_, const std::string& service_name)
: kernel{kernel_}, m_shutdown_requested{false}, m_service_name{service_name} { : kernel{kernel_}, m_service_name{service_name} {
// Initialize event. // Initialize event.
m_wakeup_event = KEvent::Create(kernel); m_wakeup_event = KEvent::Create(kernel);
m_wakeup_event->Initialize(nullptr); m_wakeup_event->Initialize(nullptr);

View File

@ -493,41 +493,51 @@ 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.mode) { switch (regs.render_enable_override) {
case Regs::RenderEnable::Mode::True: { case Regs::RenderEnable::Override::AlwaysRender:
execute_on = true; execute_on = true;
break; break;
} case Regs::RenderEnable::Override::NeverRender:
case Regs::RenderEnable::Mode::False: {
execute_on = false; execute_on = false;
break; break;
} case Regs::RenderEnable::Override::UseRenderEnable:
case Regs::RenderEnable::Mode::Conditional: { switch (regs.render_enable.mode) {
Regs::ReportSemaphore::Compare cmp; case Regs::RenderEnable::Mode::True: {
memory_manager.ReadBlock(condition_address, &cmp, sizeof(cmp)); execute_on = true;
execute_on = cmp.initial_sequence != 0U && cmp.initial_mode != 0U; 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; 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;
}
}
} }
void Maxwell3D::ProcessCounterReset() { void Maxwell3D::ProcessCounterReset() {