handoff: VSync/event-wedge fixes + iterate 2.A–2.BC research notes
Source changes (dormant parity infra, retained from iterate 2.AI/2.AO): - xenia-kernel/exports.rs: nt_create_event manual_reset polarity + related event wiring - xenia-gpu/mmio_region.rs: D1MODE_VBLANK_VLINE_STATUS hardcode parity Also lands the audit-runs/ analysis notes (.md/.txt/.json digests) for the iterate 2.x VSync/0x10e8/0x1004 wedge investigation. Raw trace dumps (.jsonl/.gz/.csv/.stdout) and agent worktrees (.claude/) are gitignored as regenerable local artifacts — see memory + HANDOFF for the running findings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
140
audit-runs/iterate-2AU-xaudio-cadence/2AU.diff
Normal file
140
audit-runs/iterate-2AU-xaudio-cadence/2AU.diff
Normal file
@@ -0,0 +1,140 @@
|
||||
diff --git a/crates/xenia-app/src/main.rs b/crates/xenia-app/src/main.rs
|
||||
index a31754d..2af0703 100644
|
||||
--- a/crates/xenia-app/src/main.rs
|
||||
+++ b/crates/xenia-app/src/main.rs
|
||||
@@ -2465,10 +2465,20 @@ fn coord_pre_round(
|
||||
}
|
||||
|
||||
if kernel.xaudio_tick_enabled {
|
||||
- if kernel.parallel_active {
|
||||
- kernel.xaudio.tick_wallclock();
|
||||
+ let fired = if kernel.parallel_active {
|
||||
+ kernel.xaudio.tick_wallclock()
|
||||
} else {
|
||||
- kernel.xaudio.tick_instr(stats.instruction_count);
|
||||
+ kernel.xaudio.tick_instr(stats.instruction_count)
|
||||
+ };
|
||||
+ // AUDIT-2AU Option β: on each audio period, re-signal the XAudio
|
||||
+ // render loop's captured frame-event pair (buffer-ready /
|
||||
+ // frame-done). Emulates canary's host XAudio2 OnBufferEnd firing
|
||||
+ // those events every period; without it ours's render loop
|
||||
+ // (tid=11) wedges on its second KeWait forever and starves the
|
||||
+ // tid=9/10 mixers + tid=12 DPC downstream (2.AS cascade). Gated
|
||||
+ // by the same instruction-count tick => deterministic.
|
||||
+ if fired {
|
||||
+ xenia_kernel::exports::pulse_xaudio_frame_events(kernel);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/crates/xenia-kernel/src/exports.rs b/crates/xenia-kernel/src/exports.rs
|
||||
index 1a8585a..e80aa78 100644
|
||||
--- a/crates/xenia-kernel/src/exports.rs
|
||||
+++ b/crates/xenia-kernel/src/exports.rs
|
||||
@@ -5346,6 +5346,27 @@ fn emit_signal_match_if_waiters(
|
||||
crate::event_log::emit_signal_match(tid, cycle, signal_call, target_handle, n, &tids);
|
||||
}
|
||||
|
||||
+/// AUDIT-2AU Option β: re-signal the XAudio render loop's frame-event
|
||||
+/// pair, emulating the host XAudio2 OnBufferEnd callback firing once per
|
||||
+/// audio period. Called from the round prologue gated by the same
|
||||
+/// instruction-count audio cadence that drives `tick_instr`, so timing
|
||||
+/// is deterministic (never host_ns). Mirrors `ke_set_event`'s signal +
|
||||
+/// wake sequence for each captured event handle (see
|
||||
+/// `do_wait_multiple` capture site + `XAudioState::frame_events`).
|
||||
+pub fn pulse_xaudio_frame_events(state: &mut KernelState) {
|
||||
+ if state.xaudio.frame_events.is_empty() {
|
||||
+ return;
|
||||
+ }
|
||||
+ let events = state.xaudio.frame_events.clone();
|
||||
+ for h in events {
|
||||
+ if let Some(KernelObject::Event { signaled, .. }) = state.objects.get_mut(&h) {
|
||||
+ *signaled = true;
|
||||
+ emit_signal_match_if_waiters(state, "XAudioFramePulse", h);
|
||||
+ wake_eligible_waiters(state, h);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
fn ke_set_event(ctx: &mut PpcContext, mem: &GuestMemory, state: &mut KernelState) {
|
||||
// r3 = PKEVENT on Ke* (guest pointer). See `ensure_dispatcher_object`
|
||||
// for why we need the lazy-shadow step here.
|
||||
@@ -5652,6 +5673,30 @@ fn do_wait_multiple(
|
||||
Some(None) => None,
|
||||
None => None,
|
||||
};
|
||||
+ // AUDIT-2AU Option β: capture the XAudio render loop's frame-event
|
||||
+ // pair at the wait site. Sylpheed's render-driver thread (tid=11,
|
||||
+ // entry 0x824d2a94 = canary tid=4) blocks here on a WaitAny over two
|
||||
+ // guest-address Events (the "buffer ready" manual-reset + "frame
|
||||
+ // done" auto-reset pair). In canary these are signaled every audio
|
||||
+ // period by the host XAudio2 OnBufferEnd callback; in ours nothing
|
||||
+ // signals them after the first fast-path consumes the auto-reset
|
||||
+ // member, so the loop wedges forever (2.AL). Record the pair (no
|
||||
+ // hardcoded addresses) so the round-prologue audio-cadence ticker
|
||||
+ // re-signals them. Discriminator: a *multi*-handle WaitAny whose
|
||||
+ // members are all guest-address Events, with at least one XAudio
|
||||
+ // client registered — tid=2's lone guest-Event wait goes through
|
||||
+ // do_wait_single, so this won't catch it.
|
||||
+ if !wait_all
|
||||
+ && handles.len() >= 2
|
||||
+ && state.xaudio.any_registered()
|
||||
+ && handles.iter().all(|&h| {
|
||||
+ h >= 0x8000_0000 && matches!(state.objects.get(&h), Some(KernelObject::Event { .. }))
|
||||
+ })
|
||||
+ {
|
||||
+ for &h in &handles {
|
||||
+ state.xaudio.note_frame_event(h);
|
||||
+ }
|
||||
+ }
|
||||
let current_ref = state.scheduler.current_ref();
|
||||
for &h in &handles {
|
||||
handle_enqueue_waiter(state, h, current_ref);
|
||||
diff --git a/crates/xenia-kernel/src/xaudio.rs b/crates/xenia-kernel/src/xaudio.rs
|
||||
index cb09261..c376989 100644
|
||||
--- a/crates/xenia-kernel/src/xaudio.rs
|
||||
+++ b/crates/xenia-kernel/src/xaudio.rs
|
||||
@@ -110,6 +110,20 @@ pub struct XAudioState {
|
||||
/// `xenia_cpu` (none currently) to keep this self-contained.
|
||||
pub worker_handles: [Option<u32>; XAUDIO_MAX_CLIENTS],
|
||||
pub worker_refs: [Option<ThreadRef>; XAUDIO_MAX_CLIENTS],
|
||||
+ /// AUDIT-2AU Option β: guest-address Event handles that the XAudio
|
||||
+ /// render-driver loop (Sylpheed tid=11, entry 0x824d2a94 = canary
|
||||
+ /// tid=4) blocks on via `KeWaitForMultipleObjects(WaitAny)`. These
|
||||
+ /// are the per-frame "buffer ready" / "frame done" events that, in
|
||||
+ /// canary, are signaled by the host XAudio2 driver's OnBufferEnd
|
||||
+ /// callback every audio period. In ours the render loop's *second*
|
||||
+ /// KeWait blocks forever because the auto-reset member was consumed
|
||||
+ /// by the first fast-path and the manual-reset member is never
|
||||
+ /// signaled (2.AL: signal.match on these SIDs = 0 whole-run). We
|
||||
+ /// discover the exact handle pair at the wait site (no hardcoded
|
||||
+ /// guest addresses) and re-signal them at the audio cadence from the
|
||||
+ /// round prologue so the render loop sustains. Deterministic: signal
|
||||
+ /// timing is gated by the instruction-count ticker, never host_ns.
|
||||
+ pub frame_events: Vec<u32>,
|
||||
}
|
||||
|
||||
impl Default for XAudioState {
|
||||
@@ -124,6 +138,7 @@ impl Default for XAudioState {
|
||||
last_instant: None,
|
||||
worker_handles: [None; XAUDIO_MAX_CLIENTS],
|
||||
worker_refs: [None; XAUDIO_MAX_CLIENTS],
|
||||
+ frame_events: Vec::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -160,6 +175,15 @@ impl XAudioState {
|
||||
self.clients.iter().any(|c| c.is_some())
|
||||
}
|
||||
|
||||
+ /// AUDIT-2AU Option β: remember a guest-address Event handle the XAudio
|
||||
+ /// render loop blocks on, so the cadence ticker can re-signal it. Dedup
|
||||
+ /// to keep the set tiny (Sylpheed's render loop waits on exactly two).
|
||||
+ pub fn note_frame_event(&mut self, handle: u32) {
|
||||
+ if !self.frame_events.contains(&handle) {
|
||||
+ self.frame_events.push(handle);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
fn enqueue_all_active(&mut self) {
|
||||
for i in 0..XAUDIO_MAX_CLIENTS {
|
||||
if self.clients[i].is_none() {
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/2au-detA.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/2au-detA.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000003,
|
||||
"imports": 19549243,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/2au-detB.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/2au-detB.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000003,
|
||||
"imports": 19549243,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/check-A.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/check-A.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000002,
|
||||
"imports": 19552773,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/check-B.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/check-B.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000002,
|
||||
"imports": 19552851,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/clean-A.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/clean-A.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000009,
|
||||
"imports": 19717663,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/clean-B.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/clean-B.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000009,
|
||||
"imports": 19717663,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/clean-C.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/clean-C.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000009,
|
||||
"imports": 19717663,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
@@ -0,0 +1,762 @@
|
||||
{
|
||||
"alive_threads": [
|
||||
{
|
||||
"affinity_mask": "0xff",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x000010e8",
|
||||
"object": {
|
||||
"manual_reset": false,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 0,
|
||||
"idx": 0,
|
||||
"lr": "0x824ac578",
|
||||
"pc": "0x824ac578",
|
||||
"priority": 0,
|
||||
"sp": "0x7007f800",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 1
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0xff",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x828a3244",
|
||||
"object": {
|
||||
"manual_reset": false,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
11
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"handle": "0x828a3220",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
11
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 0,
|
||||
"idx": 1,
|
||||
"lr": "0x824d2a94",
|
||||
"pc": "0x824d2a94",
|
||||
"priority": 0,
|
||||
"sp": "0x71497d90",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 1,
|
||||
"tid": 11
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0xff",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x000014dc",
|
||||
"object": {
|
||||
"manual_reset": false,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
18
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 0,
|
||||
"idx": 2,
|
||||
"lr": "0x824ac578",
|
||||
"pc": "0x824ac578",
|
||||
"priority": 0,
|
||||
"sp": "0x7162bdf0",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 18
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0xff",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x8287093c",
|
||||
"object": {
|
||||
"manual_reset": false,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
2
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 1,
|
||||
"idx": 0,
|
||||
"lr": "0x824a95f8",
|
||||
"pc": "0x824a95f8",
|
||||
"priority": 0,
|
||||
"sp": "0x710ffd20",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 2
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x02",
|
||||
"block_reason": {
|
||||
"exit_code": 0
|
||||
},
|
||||
"hw_id": 1,
|
||||
"idx": 1,
|
||||
"lr": "0xbcbcbcbc",
|
||||
"pc": "0xbcbcbcbc",
|
||||
"priority": 0,
|
||||
"sp": "0x715a7f00",
|
||||
"state": "Exited",
|
||||
"suspend_count": 0,
|
||||
"tid": 13
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x02",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x00001308",
|
||||
"object": {
|
||||
"count": 0,
|
||||
"max": 2147483647,
|
||||
"type": "Semaphore",
|
||||
"waiters_tid": [
|
||||
15,
|
||||
16
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 1,
|
||||
"idx": 2,
|
||||
"lr": "0x824ac578",
|
||||
"pc": "0x824ac578",
|
||||
"priority": 0,
|
||||
"sp": "0x715e7e00",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 15
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x02",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x000014d0",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
17
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"handle": "0x000014cc",
|
||||
"object": {
|
||||
"deadline": 9227100,
|
||||
"signaled": false,
|
||||
"type": "Timer",
|
||||
"waiters_tid": [
|
||||
17
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 1,
|
||||
"idx": 3,
|
||||
"lr": "0x824ab214",
|
||||
"pc": "0x824ab214",
|
||||
"priority": 0,
|
||||
"sp": "0x7161bc90",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 17
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x02",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x0000151c",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
20,
|
||||
21
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"handle": "0x01000000",
|
||||
"object": {
|
||||
"type": "unknown_or_dropped"
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 1,
|
||||
"idx": 4,
|
||||
"lr": "0x824ab214",
|
||||
"pc": "0x824ab214",
|
||||
"priority": 0,
|
||||
"sp": "0x7183bce0",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 21
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x04",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": 3000,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0xbe8cbb5c",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
7
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 2,
|
||||
"idx": 0,
|
||||
"lr": "0x824cd4f4",
|
||||
"pc": "0x824cd4f4",
|
||||
"priority": 17,
|
||||
"sp": "0x71187e60",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 7
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x04",
|
||||
"block_reason": null,
|
||||
"hw_id": 2,
|
||||
"idx": 1,
|
||||
"lr": "0x824bf494",
|
||||
"pc": "0x824c1790",
|
||||
"priority": 0,
|
||||
"sp": "0x71287ae0",
|
||||
"state": "Ready",
|
||||
"suspend_count": 0,
|
||||
"tid": 8
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x08",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x00001028",
|
||||
"object": {
|
||||
"count": 0,
|
||||
"max": 2147483647,
|
||||
"type": "Semaphore",
|
||||
"waiters_tid": [
|
||||
4
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 3,
|
||||
"idx": 0,
|
||||
"lr": "0x824ac578",
|
||||
"pc": "0x824ac578",
|
||||
"priority": 0,
|
||||
"sp": "0x7112fb80",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 4
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x08",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": 42948072,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x00001040",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"handle": "0x00001044",
|
||||
"object": {
|
||||
"count": 0,
|
||||
"max": 2147483647,
|
||||
"type": "Semaphore",
|
||||
"waiters_tid": [
|
||||
5
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 3,
|
||||
"idx": 1,
|
||||
"lr": "0x824ab214",
|
||||
"pc": "0x824ab214",
|
||||
"priority": 0,
|
||||
"sp": "0x7116fc90",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 5
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x08",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x00001308",
|
||||
"object": {
|
||||
"count": 0,
|
||||
"max": 2147483647,
|
||||
"type": "Semaphore",
|
||||
"waiters_tid": [
|
||||
15,
|
||||
16
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 3,
|
||||
"idx": 2,
|
||||
"lr": "0x824ac578",
|
||||
"pc": "0x824ac578",
|
||||
"priority": 0,
|
||||
"sp": "0x71617e00",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 16
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x08",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x0000151c",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
20,
|
||||
21
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"handle": "0x00001528",
|
||||
"object": {
|
||||
"count": 0,
|
||||
"max": 2147483647,
|
||||
"type": "Semaphore",
|
||||
"waiters_tid": [
|
||||
20
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 3,
|
||||
"idx": 3,
|
||||
"lr": "0x824ab214",
|
||||
"pc": "0x824ab214",
|
||||
"priority": 0,
|
||||
"sp": "0x7173bce0",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 20
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x10",
|
||||
"block_reason": null,
|
||||
"hw_id": 4,
|
||||
"idx": 0,
|
||||
"lr": "0x824d22b4",
|
||||
"pc": "0x824d1404",
|
||||
"priority": 15,
|
||||
"sp": "0x71387df0",
|
||||
"state": "Ready",
|
||||
"suspend_count": 0,
|
||||
"tid": 9
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0xff",
|
||||
"block_reason": {
|
||||
"exit_code": 0
|
||||
},
|
||||
"hw_id": 4,
|
||||
"idx": 1,
|
||||
"lr": "0xbcbcbcbc",
|
||||
"pc": "0xbcbcbcbc",
|
||||
"priority": 0,
|
||||
"sp": "0x715b7f00",
|
||||
"state": "Exited",
|
||||
"suspend_count": 0,
|
||||
"tid": 14
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x10",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x00001510",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
19
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"handle": "0x00001514",
|
||||
"object": {
|
||||
"count": 0,
|
||||
"max": 2147483647,
|
||||
"type": "Semaphore",
|
||||
"waiters_tid": [
|
||||
19
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 4,
|
||||
"idx": 2,
|
||||
"lr": "0x824ab214",
|
||||
"pc": "0x824ab214",
|
||||
"priority": 0,
|
||||
"sp": "0x7163bce0",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 19
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x20",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x00001020",
|
||||
"object": {
|
||||
"manual_reset": false,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
3
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 5,
|
||||
"idx": 0,
|
||||
"lr": "0x824ac578",
|
||||
"pc": "0x824ac578",
|
||||
"priority": 0,
|
||||
"sp": "0x7111fdf0",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 3
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x20",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": 42948072,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x000010b0",
|
||||
"object": {
|
||||
"manual_reset": true,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
6
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"handle": "0x000010b4",
|
||||
"object": {
|
||||
"count": 0,
|
||||
"max": 2147483647,
|
||||
"type": "Semaphore",
|
||||
"waiters_tid": [
|
||||
6
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 5,
|
||||
"idx": 1,
|
||||
"lr": "0x824ab214",
|
||||
"pc": "0x824ab214",
|
||||
"priority": 0,
|
||||
"sp": "0x7117fc60",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 6
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x20",
|
||||
"block_reason": null,
|
||||
"hw_id": 5,
|
||||
"idx": 2,
|
||||
"lr": "0x824d22b4",
|
||||
"pc": "0x824d140c",
|
||||
"priority": 15,
|
||||
"sp": "0x71487e00",
|
||||
"state": "Ready",
|
||||
"suspend_count": 0,
|
||||
"tid": 10
|
||||
},
|
||||
{
|
||||
"affinity_mask": "0x20",
|
||||
"block_reason": {
|
||||
"deadline_ns_or_inf": null,
|
||||
"handles": [
|
||||
{
|
||||
"handle": "0x00001004",
|
||||
"object": {
|
||||
"manual_reset": false,
|
||||
"signaled": false,
|
||||
"type": "Event",
|
||||
"waiters_tid": [
|
||||
12
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "WaitAny"
|
||||
},
|
||||
"hw_id": 5,
|
||||
"idx": 3,
|
||||
"lr": "0x824ac578",
|
||||
"pc": "0x824ac578",
|
||||
"priority": 0,
|
||||
"sp": "0x714a7d90",
|
||||
"state": "Blocked",
|
||||
"suspend_count": 0,
|
||||
"tid": 12
|
||||
}
|
||||
],
|
||||
"produced_by": "ours",
|
||||
"reason": "exit_dump",
|
||||
"schema_version": 1,
|
||||
"wedge_map": [
|
||||
{
|
||||
"handle": "0x000010e8",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=1 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ac578",
|
||||
"waiter_tid": 1
|
||||
},
|
||||
{
|
||||
"handle": "0x828a3244",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=11 → Event(sig=false)",
|
||||
"waiter_pc": "0x824d2a94",
|
||||
"waiter_tid": 11
|
||||
},
|
||||
{
|
||||
"handle": "0x828a3220",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=11 → Event(sig=false)",
|
||||
"waiter_pc": "0x824d2a94",
|
||||
"waiter_tid": 11
|
||||
},
|
||||
{
|
||||
"handle": "0x000014dc",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=18 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ac578",
|
||||
"waiter_tid": 18
|
||||
},
|
||||
{
|
||||
"handle": "0x8287093c",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=2 → Event(sig=false)",
|
||||
"waiter_pc": "0x824a95f8",
|
||||
"waiter_tid": 2
|
||||
},
|
||||
{
|
||||
"handle": "0x00001308",
|
||||
"handle_type": "Semaphore",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=15 → Semaphore(0/2147483647)",
|
||||
"waiter_pc": "0x824ac578",
|
||||
"waiter_tid": 15
|
||||
},
|
||||
{
|
||||
"handle": "0x000014d0",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=17 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 17
|
||||
},
|
||||
{
|
||||
"handle": "0x000014cc",
|
||||
"handle_type": "Timer",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=17 → handle 0x000014cc (Timer)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 17
|
||||
},
|
||||
{
|
||||
"handle": "0x0000151c",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=21 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 21
|
||||
},
|
||||
{
|
||||
"handle": "0x01000000",
|
||||
"handle_type": "unknown",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=21 → handle 0x01000000 (unknown)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 21
|
||||
},
|
||||
{
|
||||
"handle": "0x00001028",
|
||||
"handle_type": "Semaphore",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=4 → Semaphore(0/2147483647)",
|
||||
"waiter_pc": "0x824ac578",
|
||||
"waiter_tid": 4
|
||||
},
|
||||
{
|
||||
"handle": "0x00001308",
|
||||
"handle_type": "Semaphore",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=16 → Semaphore(0/2147483647)",
|
||||
"waiter_pc": "0x824ac578",
|
||||
"waiter_tid": 16
|
||||
},
|
||||
{
|
||||
"handle": "0x0000151c",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=20 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 20
|
||||
},
|
||||
{
|
||||
"handle": "0x00001528",
|
||||
"handle_type": "Semaphore",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=20 → Semaphore(0/2147483647)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 20
|
||||
},
|
||||
{
|
||||
"handle": "0x00001510",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=19 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 19
|
||||
},
|
||||
{
|
||||
"handle": "0x00001514",
|
||||
"handle_type": "Semaphore",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=19 → Semaphore(0/2147483647)",
|
||||
"waiter_pc": "0x824ab214",
|
||||
"waiter_tid": 19
|
||||
},
|
||||
{
|
||||
"handle": "0x00001020",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=3 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ac578",
|
||||
"waiter_tid": 3
|
||||
},
|
||||
{
|
||||
"handle": "0x00001004",
|
||||
"handle_type": "Event",
|
||||
"signaler_tid_if_known": null,
|
||||
"summary": "tid=12 → Event(sig=false)",
|
||||
"waiter_pc": "0x824ac578",
|
||||
"waiter_tid": 12
|
||||
}
|
||||
]
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/fix-notick-A.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/fix-notick-A.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000002,
|
||||
"imports": 19552851,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
10
audit-runs/iterate-2AU-xaudio-cadence/fix-notick-B.json
Normal file
10
audit-runs/iterate-2AU-xaudio-cadence/fix-notick-B.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"instructions": 500000002,
|
||||
"imports": 19552851,
|
||||
"unimpl": 0,
|
||||
"draws": 0,
|
||||
"swaps": 2,
|
||||
"unique_render_targets": 0,
|
||||
"shader_blobs_live": 0,
|
||||
"texture_cache_entries": 0
|
||||
}
|
||||
1
audit-runs/iterate-2AU-xaudio-cadence/run1.exit
Normal file
1
audit-runs/iterate-2AU-xaudio-cadence/run1.exit
Normal file
@@ -0,0 +1 @@
|
||||
EXIT=0
|
||||
Reference in New Issue
Block a user