Skip to content
Snippets Groups Projects
Commit 7dd18a8d authored by bunnei's avatar bunnei
Browse files

gsp: always pass through synchronization barrier for commands

parent f2f63849
No related branches found
No related tags found
No related merge requests found
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "core/mem_map.h" #include "core/mem_map.h"
#include "core/hle/hle.h" #include "core/hle/hle.h"
#include "core/hle/kernel/event.h"
#include "core/hle/service/gsp.h" #include "core/hle/service/gsp.h"
#include "core/hw/lcd.h" #include "core/hw/lcd.h"
...@@ -52,6 +53,7 @@ void GX_FinishCommand(u32 thread_id) { ...@@ -52,6 +53,7 @@ void GX_FinishCommand(u32 thread_id) {
namespace GSP_GPU { namespace GSP_GPU {
Handle g_event_handle = 0;
u32 g_thread_id = 0; u32 g_thread_id = 0;
enum { enum {
...@@ -100,7 +102,20 @@ void ReadHWRegs(Service::Interface* self) { ...@@ -100,7 +102,20 @@ void ReadHWRegs(Service::Interface* self) {
void RegisterInterruptRelayQueue(Service::Interface* self) { void RegisterInterruptRelayQueue(Service::Interface* self) {
u32* cmd_buff = Service::GetCommandBuffer(); u32* cmd_buff = Service::GetCommandBuffer();
u32 flags = cmd_buff[1]; u32 flags = cmd_buff[1];
u32 event_handle = cmd_buff[3]; // TODO(bunnei): Implement event handling u32 event_handle = cmd_buff[3];
_assert_msg_(GSP, event_handle, "called, but event is NULL!");
g_event_handle = event_handle;
Kernel::SetEventLocked(event_handle, false);
// Hack - This function will permanently set the state of the GSP event such that GPU command
// synchronization barriers always passthrough. Correct solution would be to set this after the
// GPU as processed all queued up commands, but due to the emulator being single-threaded they
// will always be ready.
Kernel::SetPermanentLock(event_handle, true);
cmd_buff[2] = g_thread_id; // ThreadID cmd_buff[2] = g_thread_id; // ThreadID
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment