summaryrefslogtreecommitdiff
path: root/src/video_core/gpu.h
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2019-06-12 07:52:49 -0400
committerGravatar FernandoS272019-07-05 15:49:26 -0400
commit7d1b974bcaf72c32910dcf4ff2d435f91cf40609 (patch)
tree64c69a14a9135b0027dea0d7e832e52710d7d8a8 /src/video_core/gpu.h
parentnvflinger: Make the force 30 fps still force 30 fps (diff)
downloadyuzu-7d1b974bcaf72c32910dcf4ff2d435f91cf40609.tar.gz
yuzu-7d1b974bcaf72c32910dcf4ff2d435f91cf40609.tar.xz
yuzu-7d1b974bcaf72c32910dcf4ff2d435f91cf40609.zip
GPU: Correct Interrupts to interrupt on syncpt/value instead of event, mirroring hardware
Diffstat (limited to 'src/video_core/gpu.h')
-rw-r--r--src/video_core/gpu.h14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h
index 18ac3237e..9bd618941 100644
--- a/src/video_core/gpu.h
+++ b/src/video_core/gpu.h
@@ -172,9 +172,9 @@ public:
172 172
173 u32 GetSyncpointValue(const u32 syncpoint_id) const; 173 u32 GetSyncpointValue(const u32 syncpoint_id) const;
174 174
175 void RegisterEvent(const u32 event_id, const u32 syncpoint_id, const u32 value); 175 void RegisterSyncptInterrupt(const u32 syncpoint_id, const u32 value);
176 176
177 void CancelEvent(const u32 event_id, const u32 syncpoint_id, const u32 value); 177 void CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value);
178 178
179 void Guard(bool guard_set) { 179 void Guard(bool guard_set) {
180 if (guard_set) { 180 if (guard_set) {
@@ -253,7 +253,7 @@ public:
253 virtual void FlushAndInvalidateRegion(CacheAddr addr, u64 size) = 0; 253 virtual void FlushAndInvalidateRegion(CacheAddr addr, u64 size) = 0;
254 254
255protected: 255protected:
256 virtual void TriggerCpuInterrupt(const u32 event_id) const = 0; 256 virtual void TriggerCpuInterrupt(const u32 syncpoint_id, const u32 value) const = 0;
257 257
258private: 258private:
259 void ProcessBindMethod(const MethodCall& method_call); 259 void ProcessBindMethod(const MethodCall& method_call);
@@ -293,13 +293,7 @@ private:
293 293
294 std::array<std::atomic<u32>, Service::Nvidia::MaxSyncPoints> syncpoints{}; 294 std::array<std::atomic<u32>, Service::Nvidia::MaxSyncPoints> syncpoints{};
295 295
296 struct Event { 296 std::array<std::list<u32>, Service::Nvidia::MaxSyncPoints> syncpt_interrupts;
297 Event(const u32 event_id, const u32 value) : event_id(event_id), value(value) {}
298 u32 event_id;
299 u32 value;
300 };
301
302 std::array<std::list<Event>, Service::Nvidia::MaxSyncPoints> events;
303 297
304 std::mutex sync_mutex; 298 std::mutex sync_mutex;
305 299