diff --git a/tests/vk_capture_perf_test.cpp b/tests/vk_capture_perf_test.cpp index 231e400..95f51b7 100644 --- a/tests/vk_capture_perf_test.cpp +++ b/tests/vk_capture_perf_test.cpp @@ -8,13 +8,13 @@ // // This test builds a known gradient image (in PRESENT_SRC layout) on a real device and measures the // time the *present thread* spends per capture for two implementations: -// * a synchronous reference that mirrors the OLD code (copy + WaitForFences + read the -// HOST_COHERENT mapping + swizzle, all inline) -> reproduces the stall, and -// * coop::hook::VkCapture (the fix: present thread only records+submits; a reaper thread does the +// * a synchronous reference (copy + WaitForFences + read the HOST_COHERENT mapping + swizzle, all +// inline) -> reproduces the stall, and +// * coop::hook::VkCapture (present thread only records+submits; a reaper thread does the // HOST_CACHED read-back + swizzle + upload off the critical path). -// It asserts the fixed present-thread cost is a small fraction of the synchronous cost, and that the -// captured image is byte-correct (BGRA->RGBA swizzle). `--sync` routes the measured path through the -// synchronous reference so the same assertion FAILS, demonstrating the test catches the regression. +// It asserts VkCapture's present-thread cost is a small fraction of the synchronous cost, and that +// the captured image is byte-correct (BGRA->RGBA swizzle). `--sync` routes the measured path through +// the synchronous reference so the same assertion FAILS, demonstrating the test catches the regression. // // Needs a working Vulkan ICD (the dev box has one). With no vulkan-1.dll / no device it SKIPs. #include @@ -391,7 +391,7 @@ int main(int argc, char** argv) submit_wait(cb); } - // --- Synchronous reference (mirrors the OLD code: HOST_COHERENT staging, inline read-back) ------ + // --- Synchronous reference (HOST_COHERENT staging, inline read-back on the present thread) ------ VkBuffer ref_buf = VK_NULL_HANDLE; VkDeviceMemory ref_mem = VK_NULL_HANDLE; void* ref_mapped = nullptr; @@ -443,8 +443,8 @@ int main(int argc, char** argv) } }; - // Time the synchronous reference (a few iterations; this is the per-present cost the OLD code put - // on the game's present thread). + // Time the synchronous reference (a few iterations; this is the per-present cost an inline + // read-back puts on the game's present thread). sync_capture(); // warm double sync_ms = 0; const int iters = 8; @@ -527,7 +527,7 @@ int main(int argc, char** argv) } // The core assertion: the measured present-thread cost must be a small fraction of the synchronous - // read-back cost (the fix moves the read-back off the present thread). In --sync repro mode the + // read-back cost (VkCapture moves the read-back off the present thread). In --sync repro mode the // measured path IS the synchronous one, so this fails -- demonstrating the test catches the bug. std::printf("present-thread cost: measured %.3f ms vs synchronous %.2f ms (ratio %.3f)\n", sut_ms, sync_ms, sut_ms / sync_ms); diff --git a/tools/audio_tone/tone_source.hpp b/tools/audio_tone/tone_source.hpp index 2f05b88..a7d5ed3 100644 --- a/tools/audio_tone/tone_source.hpp +++ b/tools/audio_tone/tone_source.hpp @@ -1,13 +1,11 @@ // Configurable WASAPI sine-tone render source, shared by coop_tone.exe and the audio // render-hook self-test. Opens a shared-mode render client at a requested format // (sample rate / channels / bits / float vs PCM) using AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM, -// so it can render formats that differ from the device mix format -- exactly how games -// like Godot render 44100 Hz on a 48000 Hz endpoint, the case the hook must detect. +// so it can render formats that differ from the device mix format -- exactly the case a +// game rendering 44100 Hz on a 48000 Hz endpoint creates, which the hook must detect. #pragma once #include -#include -#include #include @@ -91,7 +89,8 @@ public: // Optional: give each channel genuinely different content (a per-channel frequency scale), // so a downstream test can *recover* the channel count by correlation (identical channels // are ambiguous: 2ch@R looks like 1ch@2R). Off by default -> the usual single-tone source. - if (const char* d = std::getenv("COOP_TONE_DISTINCT_CH"); d != nullptr && d[0] == '1') + char d[2] = {}; + if (GetEnvironmentVariableA("COOP_TONE_DISTINCT_CH", d, sizeof(d)) > 0 && d[0] == '1') { distinct_ = true; }