Skip to content

Settings file with device configuration doesn't apply to vkEnumeratePhysicalDeviceGroups #1915

Description

@richard-lunarg

Issue was moved from Vulkan-ValidationLayers to Vulkan-Loader

The settings file allows specifying which VkPhysicalDevice's should be visible to applications. This logic applies to the ouput of vkEnumeratePhysicalDevices. It currently doesn't apply to vkEnumeratePhysicalDeviceGroups which is a bug, and causes the validation layer to crash if an app tries to create a VkDevice using a VkPhysicalDevice queried by vkEnumeratePhysicalDeviceGroups.

Original issue

Environment:

  • OS: MacOS
  • GPU and driver version: MoltenVK or KosmicKrisp
  • SDK or header version if building from repo: 1.4.350.0
  • Options enabled (synchronization, best practices, etc.):
    Default Presets from Vulkan Configurator

Vulkan Configurator allows you to force a single driver to be used on the "Vulkan Drivers" tab. If you select "Force a single Vulkan physical device", and have validation enabled with the default presets, vulkaninfo will segfault. It does not matter if you choose MoltenVK or KosmicKrisp. It crashes right after starting the device groups as shown below. This is likely a conflict with how the newer loaders allow device filtering, which is being exposed by Vulkan Configurator here.

Device Groups:

Group 0:
Properties:
physicalDevices: count = 1
Apple M4 Max (ID: 0)
subsetAllocation = 0

zsh: segmentation fault vulkaninfo


Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   libVkLayer_khronos_validation.dylib	       0x10faf8a84 vvl::DeviceState::DeviceState(vvl::DispatchDevice*, vvl::InstanceState*) + 1300 (state_tracker.cpp:69)
1   libVkLayer_khronos_validation.dylib	       0x10f8724e8 vvl::DispatchDevice::InitValidationObjects() + 1448 (dispatch_object.cpp:103)
2   libVkLayer_khronos_validation.dylib	       0x10f4cb088 vvl::DispatchDevice::DispatchDevice(vvl::DispatchInstance*, VkPhysicalDevice_T*, VkDeviceCreateInfo const*) + 460 (dispatch_object_manual.cpp:900)
3   libVkLayer_khronos_validation.dylib	       0x10f4bf8d4 std::__1::unique_ptr<vvl::DispatchDevice, std::__1::default_deletevvl::DispatchDevice> std::__1::make_unique[abi:ne200100]<vvl::DispatchDevice, vvl::DispatchInstance*&, VkPhysicalDevice_T*&, VkDeviceCreateInfo const*&, 0>(vvl::DispatchInstance*&, VkPhysicalDevice_T*&, VkDeviceCreateInfo const*&) + 32 (unique_ptr.h:767) [inlined]
4   libVkLayer_khronos_validation.dylib	       0x10f4bf8d4 vulkan_layer_chassis::CreateDevice(VkPhysicalDevice_T*, VkDeviceCreateInfo const*, VkAllocationCallbacks const*, VkDevice_T**) + 156 (chassis_manual.cpp:337)
5   libvulkan.1.4.350.dylib       	       0x102717ea8 loader_create_device_chain + 2888 (loader.c:5535)
6   libvulkan.1.4.350.dylib       	       0x102717010 loader_layer_create_device + 588 (loader.c:4892)
7   libvulkan.1.4.350.dylib       	       0x102720b00 vkCreateDevice + 124 (trampoline.c:994)
8   vulkaninfo                    	       0x102393310 GetGroupCapabilities(AppInstance&, VkPhysicalDeviceGroupProperties) + 944 (vulkaninfo.h:1465)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions