mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
nv2a/vk: Add preferred physical device to config
This commit is contained in:
@@ -146,6 +146,7 @@ display:
|
||||
validation_layers: bool
|
||||
debug_shaders: bool
|
||||
assert_on_validation_msg: bool
|
||||
preferred_physical_device: string
|
||||
quality:
|
||||
surface_scale:
|
||||
type: integer
|
||||
|
||||
@@ -451,19 +451,33 @@ static bool select_physical_device(PGRAPHState *pg, Error **errp)
|
||||
g_malloc_n(num_physical_devices, sizeof(VkPhysicalDevice));
|
||||
vkEnumeratePhysicalDevices(r->instance, &num_physical_devices, devices);
|
||||
|
||||
const char *preferred_device = g_config.display.vulkan.preferred_physical_device;
|
||||
int preferred_device_index = -1;
|
||||
|
||||
fprintf(stderr, "Available physical devices:\n");
|
||||
for (int i = 0; i < num_physical_devices; i++) {
|
||||
vkGetPhysicalDeviceProperties(devices[i], &r->device_props);
|
||||
fprintf(stderr, "- %s\n", r->device_props.deviceName);
|
||||
bool is_preferred =
|
||||
preferred_device &&
|
||||
!strcmp(r->device_props.deviceName, preferred_device);
|
||||
if (is_preferred) {
|
||||
preferred_device_index = i;
|
||||
}
|
||||
fprintf(stderr, "- %s%s\n", r->device_props.deviceName,
|
||||
is_preferred ? " *" : "");
|
||||
}
|
||||
|
||||
// FIXME: Store preferred device
|
||||
|
||||
r->physical_device = VK_NULL_HANDLE;
|
||||
for (int i = 0; i < num_physical_devices; i++) {
|
||||
if (is_device_compatible(devices[i])) {
|
||||
r->physical_device = devices[i];
|
||||
break;
|
||||
|
||||
if (preferred_device_index >= 0 &&
|
||||
is_device_compatible(devices[preferred_device_index])) {
|
||||
r->physical_device = devices[preferred_device_index];
|
||||
} else {
|
||||
for (int i = 0; i < num_physical_devices; i++) {
|
||||
if (is_device_compatible(devices[i])) {
|
||||
r->physical_device = devices[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (r->physical_device == VK_NULL_HANDLE) {
|
||||
@@ -472,6 +486,9 @@ static bool select_physical_device(PGRAPHState *pg, Error **errp)
|
||||
}
|
||||
|
||||
vkGetPhysicalDeviceProperties(r->physical_device, &r->device_props);
|
||||
xemu_settings_set_string(&g_config.display.vulkan.preferred_physical_device,
|
||||
r->device_props.deviceName);
|
||||
|
||||
fprintf(stderr,
|
||||
"Selected physical device: %s\n"
|
||||
"- Vendor: %x, Device: %x\n"
|
||||
|
||||
Reference in New Issue
Block a user