ACMX 2.136.0
Dual-Backend Real-Time GPU Video Synthesis
Loading...
Searching...
No Matches
interface_client_windows_tests.cpp
Go to the documentation of this file.
3
4#include <algorithm>
5#include <cstring>
6#include <iostream>
7
8int main() {
9#ifdef _WIN32
10 HANDLE mutex = ::CreateMutexW(
11 nullptr, FALSE, acmxvk::ipc::SHADER_SELECTION_MUTEX_NAME_WINDOWS);
12 if (mutex == nullptr) {
13 std::cerr << "CreateMutexW failed: " << ::GetLastError() << '\n';
14 return 1;
15 }
16
17 HANDLE mapping = ::CreateFileMappingW(
18 INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0,
19 static_cast<DWORD>(sizeof(acmxvk::ipc::ShaderSelectionData)),
20 acmxvk::ipc::SHADER_SELECTION_MAPPING_NAME_WINDOWS);
21 if (mapping == nullptr) {
22 std::cerr << "CreateFileMappingW failed: " << ::GetLastError() << '\n';
23 ::CloseHandle(mutex);
24 return 1;
25 }
26
27 void *view = ::MapViewOfFile(mapping, FILE_MAP_ALL_ACCESS, 0, 0,
29 if (view == nullptr) {
30 std::cerr << "MapViewOfFile failed: " << ::GetLastError() << '\n';
31 ::CloseHandle(mapping);
32 ::CloseHandle(mutex);
33 return 1;
34 }
35
36 auto *selection =
37 static_cast<acmxvk::ipc::ShaderSelectionData *>(view);
38 {
39 acmxvk::ipc::InterfaceLock lock(mutex);
40 if (!lock) {
41 std::cerr << "Could not lock test mapping\n";
42 ::UnmapViewOfFile(view);
43 ::CloseHandle(mapping);
44 ::CloseHandle(mutex);
45 return 1;
46 }
48 selection->sequence = 42;
49 selection->shader_pass_enabled = 1;
50 selection->shader_pass_count = 2;
51 std::strcpy(selection->selected_shader_name, "selected.frag.spv");
52 std::strcpy(selection->shader_pass_names[0], "first.comp.spv");
53 std::strcpy(selection->shader_pass_names[1], "second.frag.spv");
54 selection->custom_uniform_count = 1;
55 std::strcpy(selection->custom_uniform_names[0], "slider1");
56 selection->custom_uniform_values[0] = 0.75F;
57 selection->audio_file_sequence = 7;
58 std::strcpy(selection->audio_file_path, "C:/audio/test.wav");
59 selection->audio_pass_through = 1;
60 selection->dream_enabled = 1;
61 selection->dream_fp16 = 1;
62 selection->dream_gpu_filter_first = 1;
63 selection->dream_iterations = 3;
64 selection->dream_maximum_dimension = 768;
65 selection->dream_channel = 12;
66 selection->dream_octaves = 2;
67 selection->dream_jitter = 4;
68 selection->dream_smoothing = 2;
69 selection->dream_strength = 0.125F;
70 selection->dream_feedback = 0.8F;
71 selection->dream_zoom = 1.02F;
72 selection->dream_rotation = -0.25F;
73 selection->dream_octave_scale = 1.6F;
74 std::strcpy(selection->dream_model_path, "C:/models/dream.pt");
75 std::strcpy(selection->dream_layer, "relu4_2");
76 }
77
80 const bool opened = client.open();
81 const bool read = opened && client.read(state);
82 const bool valid =
83 read && state.sequence == 42 &&
84 state.selected_shader_name == "selected.frag.spv" &&
85 state.multipass.enabled && state.multipass.shader_names.size() == 2 &&
86 state.multipass.shader_names[0] == "first.comp.spv" &&
87 state.multipass.shader_names[1] == "second.frag.spv" &&
88 state.uniform_values.size() == 1 &&
89 state.uniform_values[0].name == "slider1" &&
90 state.uniform_values[0].value == 0.75F &&
91 state.audio_file.request_sequence == 7 &&
92 state.audio_file.path == "C:/audio/test.wav" &&
95 state.deep_dream.iterations == 3 &&
96 state.deep_dream.maximum_dimension == 768 &&
97 state.deep_dream.channel == 12 && state.deep_dream.octaves == 2 &&
98 state.deep_dream.jitter == 4 && state.deep_dream.smoothing == 2 &&
99 state.deep_dream.strength == 0.125F &&
100 state.deep_dream.feedback == 0.8F &&
101 state.deep_dream.zoom == 1.02F &&
102 state.deep_dream.rotation == -0.25F &&
103 state.deep_dream.octave_scale == 1.6F &&
104 state.deep_dream.model_path == "C:/models/dream.pt" &&
105 state.deep_dream.layer == "relu4_2";
106
107 client.close();
108 ::UnmapViewOfFile(view);
109 ::CloseHandle(mapping);
110 ::CloseHandle(mutex);
111 if (!valid) {
112 std::cerr << "Windows interface-control round trip failed\n";
113 return 1;
114 }
115 std::cout << "ACMXVK Windows interface-control test passed\n";
116#endif
117 return 0;
118}
int main(int argc, char **argv)
Application entry point.
bool read(InterfaceState &state) const
std::vector< std::string > shader_names
std::vector< InterfaceUniformValue > uniform_values
InterfaceAudioFileState audio_file
InterfaceMultipassState multipass
InterfaceDeepDreamState deep_dream