Skip to content

Commit 71084e4

Browse files
committed
Added HardwareFlagsDialog to allow overriding feature flags. Fixes #304.
1 parent f348f34 commit 71084e4

4 files changed

Lines changed: 156 additions & 1 deletion

File tree

src/ngscopeclient/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ add_executable(ngscopeclient
7575
FilterPropertiesDialog.cpp
7676
FontManager.cpp
7777
GuiLogSink.cpp
78+
HardwareFlagsDialog.cpp
7879
HistoryDialog.cpp
7980
HistoryManager.cpp
8081
IGFDFileBrowser.cpp
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/***********************************************************************************************************************
2+
* *
3+
* ngscopeclient *
4+
* *
5+
* Copyright (c) 2012-2026 Andrew D. Zonenberg and contributors *
6+
* All rights reserved. *
7+
* *
8+
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
9+
* following conditions are met: *
10+
* *
11+
* * Redistributions of source code must retain the above copyright notice, this list of conditions, and the *
12+
* following disclaimer. *
13+
* *
14+
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the *
15+
* following disclaimer in the documentation and/or other materials provided with the distribution. *
16+
* *
17+
* * Neither the name of the author nor the names of any contributors may be used to endorse or promote products *
18+
* derived from this software without specific prior written permission. *
19+
* *
20+
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
21+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
22+
* THE AUTHORS BE HELD LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
23+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
24+
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
25+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
26+
* POSSIBILITY OF SUCH DAMAGE. *
27+
* *
28+
***********************************************************************************************************************/
29+
30+
/**
31+
@file
32+
@author Andrew D. Zonenberg
33+
@brief Implementation of HardwareFlagsDialog
34+
*/
35+
36+
#include "ngscopeclient.h"
37+
#include "HardwareFlagsDialog.h"
38+
#include "Session.h"
39+
40+
using namespace std;
41+
42+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
43+
// Construction / destruction
44+
45+
HardwareFlagsDialog::HardwareFlagsDialog()
46+
: Dialog("Hardware Flags", "Hardware flags", ImVec2(600, 400))
47+
{
48+
49+
}
50+
51+
HardwareFlagsDialog::~HardwareFlagsDialog()
52+
{
53+
}
54+
55+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
56+
// Rendering
57+
58+
/**
59+
@brief Renders the dialog and handles UI events
60+
61+
@return True if we should continue showing the dialog
62+
False if it's been closed
63+
*/
64+
bool HardwareFlagsDialog::DoRender()
65+
{
66+
ImGui::Text("This dialog allows you to override hardware feature flag detection.");
67+
ImGui::TextWrapped(
68+
"It is mostly intended for developers to test fallback versions of accelerated functionality by "
69+
"disabling a feature that the hardware actually supports. There are no guardrails! "
70+
"Enabling a feature your CPU or Vulkan device does not support will probably crash ngscopeclient");
71+
72+
if(ImGui::CollapsingHeader("CPU"))
73+
{
74+
ImGui::Checkbox("FMA", &g_hasFMA);
75+
ImGui::Checkbox("AVX2", &g_hasAvx2);
76+
ImGui::Checkbox("AVX512F", &g_hasAvx512F);
77+
ImGui::Checkbox("AVX512VL", &g_hasAvx512VL);
78+
ImGui::Checkbox("AVX512DQ", &g_hasAvx512DQ);
79+
}
80+
81+
if(ImGui::CollapsingHeader("GPU"))
82+
{
83+
ImGui::Checkbox("Legacy GPU filter enable", &g_gpuFilterEnabled);
84+
ImGui::Checkbox("Shader float64", &g_hasShaderFloat64);
85+
ImGui::Checkbox("Shader int64", &g_hasShaderInt64);
86+
ImGui::Checkbox("Shader atomic int64", &g_hasShaderAtomicInt64);
87+
ImGui::Checkbox("Shader int16", &g_hasShaderInt16);
88+
ImGui::Checkbox("Shader int8", &g_hasShaderInt8);
89+
ImGui::Checkbox("Shader atomic float", &g_hasShaderAtomicFloat);
90+
ImGui::Checkbox("Debug utils", &g_hasDebugUtils);
91+
ImGui::Checkbox("Memory budget", &g_hasMemoryBudget);
92+
ImGui::Checkbox("Push descriptor", &g_hasPushDescriptor);
93+
}
94+
95+
return true;
96+
}
97+
98+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
99+
// UI event handlers
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/***********************************************************************************************************************
2+
* *
3+
* ngscopeclient *
4+
* *
5+
* Copyright (c) 2012-2026 Andrew D. Zonenberg and contributors *
6+
* All rights reserved. *
7+
* *
8+
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
9+
* following conditions are met: *
10+
* *
11+
* * Redistributions of source code must retain the above copyright notice, this list of conditions, and the *
12+
* following disclaimer. *
13+
* *
14+
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the *
15+
* following disclaimer in the documentation and/or other materials provided with the distribution. *
16+
* *
17+
* * Neither the name of the author nor the names of any contributors may be used to endorse or promote products *
18+
* derived from this software without specific prior written permission. *
19+
* *
20+
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
21+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
22+
* THE AUTHORS BE HELD LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
23+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
24+
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
25+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *
26+
* POSSIBILITY OF SUCH DAMAGE. *
27+
* *
28+
***********************************************************************************************************************/
29+
30+
/**
31+
@file
32+
@author Andrew D. Zonenberg
33+
@brief Declaration of HardwareFlagsDialog
34+
*/
35+
#ifndef HardwareFlagsDialog_h
36+
#define HardwareFlagsDialog_h
37+
38+
#include "Dialog.h"
39+
40+
class HardwareFlagsDialog : public Dialog
41+
{
42+
public:
43+
HardwareFlagsDialog();
44+
virtual ~HardwareFlagsDialog();
45+
46+
virtual bool DoRender();
47+
48+
protected:
49+
};
50+
51+
#endif

src/ngscopeclient/MainWindow_Menus.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include "BERTDialog.h"
4747
#include "CreateFilterBrowser.h"
4848
#include "FilterGraphEditor.h"
49+
#include "HardwareFlagsDialog.h"
4950
#include "HistoryDialog.h"
5051
#include "LoadDialog.h"
5152
#include "LogViewerDialog.h"
@@ -387,7 +388,7 @@ void MainWindow::DoAddSubMenu(
387388
typeInternal,
388389
drivername,
389390
transname,
390-
path));
391+
path));
391392
}
392393
}
393394
}
@@ -817,6 +818,9 @@ void MainWindow::DebugMenu()
817818
if(ImGui::MenuItem("Memory Leaker"))
818819
AddDialog(make_shared<MemoryLeakerDialog>(this));
819820

821+
if(ImGui::MenuItem("Hardware Flags"))
822+
AddDialog(make_shared<HardwareFlagsDialog>());
823+
820824
ImGui::EndMenu();
821825
}
822826
}

0 commit comments

Comments
 (0)