diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-01-14 06:26:27 +0100 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-01-14 08:20:13 +0100 |
commit | 7630b3167210cc7f84c83af54dde23be948e3bc5 (patch) | |
tree | ea2d84fc067d6f2ec02f0745bebb93fdf68b6390 | |
parent | GPU: Do periodic VBlank updates using CoreTiming (diff) | |
download | yuzu-7630b3167210cc7f84c83af54dde23be948e3bc5.tar yuzu-7630b3167210cc7f84c83af54dde23be948e3bc5.tar.gz yuzu-7630b3167210cc7f84c83af54dde23be948e3bc5.tar.bz2 yuzu-7630b3167210cc7f84c83af54dde23be948e3bc5.tar.lz yuzu-7630b3167210cc7f84c83af54dde23be948e3bc5.tar.xz yuzu-7630b3167210cc7f84c83af54dde23be948e3bc5.tar.zst yuzu-7630b3167210cc7f84c83af54dde23be948e3bc5.zip |
-rw-r--r-- | src/core/hle/service/gsp_gpu.cpp | 4 | ||||
-rw-r--r-- | src/core/hle/service/gsp_gpu.h | 25 |
2 files changed, 12 insertions, 17 deletions
diff --git a/src/core/hle/service/gsp_gpu.cpp b/src/core/hle/service/gsp_gpu.cpp index 00a941658..4ca2b9bd0 100644 --- a/src/core/hle/service/gsp_gpu.cpp +++ b/src/core/hle/service/gsp_gpu.cpp @@ -210,12 +210,12 @@ void SignalInterrupt(InterruptId interrupt_id) { } for (int thread_id = 0; thread_id < 0x4; ++thread_id) { InterruptRelayQueue* interrupt_relay_queue = GetInterruptRelayQueue(thread_id); - interrupt_relay_queue->number_interrupts = interrupt_relay_queue->number_interrupts + 1; - u8 next = interrupt_relay_queue->index; next += interrupt_relay_queue->number_interrupts; next = next % 0x34; // 0x34 is the number of interrupt slots + interrupt_relay_queue->number_interrupts += 1; + interrupt_relay_queue->slot[next] = interrupt_id; interrupt_relay_queue->error_code = 0x0; // No error diff --git a/src/core/hle/service/gsp_gpu.h b/src/core/hle/service/gsp_gpu.h index 932b6170f..65abb194a 100644 --- a/src/core/hle/service/gsp_gpu.h +++ b/src/core/hle/service/gsp_gpu.h @@ -45,21 +45,16 @@ enum class CommandId : u32 { /// GSP thread interrupt relay queue struct InterruptRelayQueue { - union { - u32 hex; - - // Index of last interrupt in the queue - BitField<0,8,u32> index; - - // Number of interrupts remaining to be processed by the userland code - BitField<8,8,u32> number_interrupts; - - // Error code - zero on success, otherwise an error has occurred - BitField<16,8,u32> error_code; - }; - - u32 unk0; - u32 unk1; + // Index of last interrupt in the queue + u8 index; + // Number of interrupts remaining to be processed by the userland code + u8 number_interrupts; + // Error code - zero on success, otherwise an error has occurred + u8 error_code; + u8 padding1; + + u32 missed_PDC0; + u32 missed_PDC1; InterruptId slot[0x34]; ///< Interrupt ID slots }; |