feat(ddprobe): allow to manually specify gpu preference (#3521)

This commit is contained in:
Lukas Senionis
2025-01-09 01:44:11 +02:00
committed by GitHub
parent 9b9767be0c
commit 6a233cbcbf
8 changed files with 68 additions and 15 deletions

View File

@@ -436,6 +436,7 @@ namespace config {
{}, // capture
{}, // encoder
{}, // adapter_name
-1, // gpu_preference
{}, // output_name
{
@@ -1088,6 +1089,7 @@ namespace config {
string_f(vars, "capture", video.capture);
string_f(vars, "encoder", video.encoder);
string_f(vars, "adapter_name", video.adapter_name);
int_f(vars, "gpu_preference", video.gpu_preference);
string_f(vars, "output_name", video.output_name);
generic_f(vars, "dd_configuration_option", video.dd.configuration_option, dd::config_option_from_view);

View File

@@ -77,6 +77,7 @@ namespace config {
std::string capture;
std::string encoder;
std::string adapter_name;
int gpu_preference;
std::string output_name;
struct dd_t {

View File

@@ -386,12 +386,7 @@ namespace platf::dxgi {
// would have been raised first if it wasn't.
if (result == S_OK || result == E_ACCESSDENIED) {
// We found a working GPU preference, so set ourselves to use that.
if (set_gpu_preference_on_self(i)) {
return true;
}
else {
return false;
}
return set_gpu_preference_on_self(i);
}
}
@@ -418,16 +413,25 @@ namespace platf::dxgi {
return true;
}
// Try probing with different GPU preferences and verify_frame_capture flag
if (validate_and_test_gpu_preference(display_name, true)) {
set_gpu_preference = true;
return true;
// If the GPU preference was manually specified, we can skip the probe.
if (config::video.gpu_preference >= 0) {
if (set_gpu_preference_on_self(config::video.gpu_preference)) {
set_gpu_preference = true;
return true;
}
}
else {
// Try probing with different GPU preferences and verify_frame_capture flag
if (validate_and_test_gpu_preference(display_name, true)) {
set_gpu_preference = true;
return true;
}
// If no valid configuration was found, try again with verify_frame_capture == false
if (validate_and_test_gpu_preference(display_name, false)) {
set_gpu_preference = true;
return true;
// If no valid configuration was found, try again with verify_frame_capture == false
if (validate_and_test_gpu_preference(display_name, false)) {
set_gpu_preference = true;
return true;
}
}
// If neither worked, return false