From 3545c8f1b17fe162ddfb2b703e69c7309e222519 Mon Sep 17 00:00:00 2001 From: Dmugetsu Date: Sat, 3 May 2025 10:07:41 -0600 Subject: [PATCH] Pm4 type 3 Event Write Impl --- src/video_core/amdgpu/liverpool.cpp | 6 +++--- src/video_core/amdgpu/pm4_cmds.h | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp index 967b952c6..64f770f53 100644 --- a/src/video_core/amdgpu/liverpool.cpp +++ b/src/video_core/amdgpu/liverpool.cpp @@ -563,7 +563,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); + const auto* event = reinterpret_cast(header); break; } case PM4ItOpcode::EventWriteEos: { @@ -655,7 +655,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); + const auto* acquire_mem = reinterpret_cast(header); break; } case PM4ItOpcode::Rewind: { @@ -919,7 +919,7 @@ Liverpool::Task Liverpool::ProcessCompute(const u32* acb, u32 acb_dwords, u32 vq break; } case PM4ItOpcode::EventWrite: { - // const auto* event = reinterpret_cast(header); + const auto* event = reinterpret_cast(header); break; } default: diff --git a/src/video_core/amdgpu/pm4_cmds.h b/src/video_core/amdgpu/pm4_cmds.h index ae1d32e00..0d5179f3f 100644 --- a/src/video_core/amdgpu/pm4_cmds.h +++ b/src/video_core/amdgpu/pm4_cmds.h @@ -282,12 +282,23 @@ enum class InterruptSelect : u32 { }; static u64 GetGpuClock64() { - auto now = std::chrono::high_resolution_clock::now(); + auto now = std::chrono::steady_clock::now(); auto duration = now.time_since_epoch(); auto ticks = std::chrono::duration_cast(duration).count(); return static_cast(ticks); } +struct PM4CmdEventWrite { + PM4Type3Header header; + u32 event_type; + u32 event_index; + u32 address_lo; + u32 address_hi; + u32 data_sel; + u32 int_sel; + u32 value; +}; + struct PM4CmdEventWriteEop { PM4Type3Header header; union { @@ -307,7 +318,7 @@ struct PM4CmdEventWriteEop { template T* Address() const { - return reinterpret_cast(address_lo | u64(address_hi) << 32); + return reinterpret_cast((u64(address_hi) << 32) | address_lo); } u32 DataDWord() const {