KhronosGroup / Vulkan-Tools

Vulkan Development Tools
Apache License 2.0
363 stars 154 forks source link

vulkan info exits early if instance creation fails for one GPU of several #491

Open brianpaul opened 3 years ago

brianpaul commented 3 years ago

I have a multi-GPU setup (built-in Intel GPU, external GPU enclosure with AMD). If both the Intel and AMD GPUs are available (powered on, kernel modules loaded, etc), vulkaninfo works as expected, printing details of both GPUs.

However, if the external GPU is not available, vulkaninfo exits early with an error:

/build/vulkan-tools-1.1.130.0~rc1/vulkaninfo/vulkaninfo.h:368: failed with ERROR_OUT_OF_HOST_MEMORY

No info about the available Intel GPU is printed.

The problem is caused by two issues:

  1. I think the AMDVLK driver is erroneously returning VK_ERROR_OUT_OF_MEMORY instead of VK_ERROR_INITIALIZATION_FAILED. I'll contact AMD about that.
  2. Unlike other error codes, vulkaninfo gives up upon VK_ERROR_OUT_OF_MEMORY. See https://github.com/KhronosGroup/Vulkan-Loader/blob/c5678a03db383fd0dc5bfb8e9a383043bdbcb57b/loader/loader.c#L6597

I looked at commit 7fc1edea087f77c165fdfad060bc07481526b39e but it's not clear to me why VK_ERROR_OUT_OF_MEMORY is handled specially. My issue is fixed if I simply don't check for VK_ERROR_OUT_OF_MEMORY.

charles-lunarg commented 3 years ago

/build/vulkan-tools-1.1.130.0~rc1/vulkaninfo/vulkaninfo.h:368: failed with ERROR_OUT_OF_HOST_MEMORY That implies the vulkaninfo version used is 1.1.130, which is missing some of the changes I've made to vulkaninfo since then. Not to mention running a newer loader might solve the problem as well.

Is the AMD switchable graphics layer present at all? Maybe thats what originally returning the error.

Vulkaninfo generally throws its hands up in the air if any vulkan function fails, because if it did continue, it might hard crash later or report incorrect information.

brianpaul commented 3 years ago

Sorry, I don't know what the "AMD switchable graphics layer" is.

I'm using the latest vulkan loader and tools trees. The error message is an example. It's the same with the latest code.

I understand vulkaninfo throwing up its hands if some things fail, but I've hacked the code so that the VK_ERROR_OUT_OF_MEMORY I described above is not special-cased by the loader and then it works as I'd expect.

I guess should have probably filed this issue with the loader and not tools.

charles-lunarg commented 3 years ago

Ah now that I see you were referring to loader code, rather than vulkaninfo code, the changes you made make sense.

Looking at the loader logic there, I think the 'bail on OUT_OF_HOST_MEMORY ' (OOHM) is intended, as that error is used to signal that malloc has failed, and if the driver can't do what it needs to and returns OOHM, then neither the loader can. A driver returning INITIALIZATION_FAILED (INIT_FAILED) then being skipped over is consistent since it means that specific driver didn't succeed (and we should remove it from the list of enabled drivers) and then try to load the other drivers on the system.

If AMDVLK is indeed returning OOHM when it should be returning INIT_FAILED, then vulkaninfo shouldn't be affected. Though, if AMDVLK returns INIT_FAILED but the intel drivers aren't reported, then something else is amiss.

brianpaul commented 3 years ago

Yeah, I think the root bug may be in the AMDVLK driver and I've reported it to them. But I have a hunch they're going to say that it's a loader bug.

IMHO, it's seems very unlikely that the driver would really run out of host memory during vkCreateInstance. "host memory" here means ordinary heap memory in the process, right?

charles-lunarg commented 3 years ago

Yes, Host memory should refer to regular malloc'd memory. Also yes, the driver really shouldn't be returning OOHM, as its pretty darn rare in practice, especially with virtual memory in the mix. BUT this wouldn't be the first time drivers or the loader returned the wrong error code, so it doesn't surprise me if that did happen.

H5117 commented 3 years ago

I have the similar issue, but with a different error.

$ lspci|grep VGA
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Desktop)
01:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 730] (rev a1)

$ vulkaninfo
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.172/vulkaninfo/vulkaninfo.h:248:vkGetPhysicalDeviceSurfaceFormats2KHR failed with ERROR_INITIALIZATION_FAILED

$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json vulkaninfo
ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.172/vulkaninfo/vulkaninfo.h:248:vkGetPhysicalDeviceSurfaceFormats2KHR failed with ERROR_INITIALIZATION_FAILED
$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json vulkaninfo ``` $ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json vulkaninfo MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0 ========== VULKANINFO ========== Vulkan Instance Version: 1.2.172 Instance Extensions: count = 18 =============================== VK_EXT_acquire_xlib_display : extension revision 1 VK_EXT_debug_report : extension revision 8 VK_EXT_debug_utils : extension revision 2 VK_EXT_direct_mode_display : extension revision 1 VK_EXT_display_surface_counter : extension revision 1 VK_KHR_device_group_creation : extension revision 1 VK_KHR_display : extension revision 23 VK_KHR_external_fence_capabilities : extension revision 1 VK_KHR_external_memory_capabilities : extension revision 1 VK_KHR_external_semaphore_capabilities : extension revision 1 VK_KHR_get_display_properties2 : extension revision 1 VK_KHR_get_physical_device_properties2 : extension revision 1 VK_KHR_get_surface_capabilities2 : extension revision 1 VK_KHR_surface : extension revision 25 VK_KHR_surface_protected_capabilities : extension revision 1 VK_KHR_wayland_surface : extension revision 6 VK_KHR_xcb_surface : extension revision 6 VK_KHR_xlib_surface : extension revision 6 Layers: count = 1 ================= VK_LAYER_NV_optimus (NVIDIA Optimus layer) Vulkan version 1.2.155, layer version 1: Layer Extensions: count = 0 Devices: count = 1 GPU id = 0 (Intel(R) UHD Graphics 630 (CFL GT2)) Layer-Device Extensions: count = 0 Presentable Surfaces: ===================== GPU id : 0 (Intel(R) UHD Graphics 630 (CFL GT2)): Surface types: count = 2 VK_KHR_xcb_surface VK_KHR_xlib_surface Formats: count = 2 SurfaceFormat[0]: format = FORMAT_B8G8R8A8_SRGB colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR SurfaceFormat[1]: format = FORMAT_B8G8R8A8_UNORM colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR Present Modes: count = 4 PRESENT_MODE_IMMEDIATE_KHR PRESENT_MODE_MAILBOX_KHR PRESENT_MODE_FIFO_KHR PRESENT_MODE_FIFO_RELAXED_KHR VkSurfaceCapabilitiesKHR: ------------------------- minImageCount = 3 maxImageCount = 0 currentExtent: width = 256 height = 256 minImageExtent: width = 256 height = 256 maxImageExtent: width = 256 height = 256 maxImageArrayLayers = 1 supportedTransforms: count = 1 SURFACE_TRANSFORM_IDENTITY_BIT_KHR currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR supportedCompositeAlpha: count = 2 COMPOSITE_ALPHA_OPAQUE_BIT_KHR COMPOSITE_ALPHA_INHERIT_BIT_KHR supportedUsageFlags: count = 5 IMAGE_USAGE_TRANSFER_SRC_BIT IMAGE_USAGE_TRANSFER_DST_BIT IMAGE_USAGE_SAMPLED_BIT IMAGE_USAGE_STORAGE_BIT IMAGE_USAGE_COLOR_ATTACHMENT_BIT VkSurfaceCapabilities2EXT: -------------------------- supportedSurfaceCounters: count = 0 None VkSurfaceProtectedCapabilitiesKHR: ---------------------------------- supportsProtected = false GPU id : 0 (Intel(R) UHD Graphics 630 (CFL GT2)): Surface type = VK_KHR_wayland_surface Formats: count = 2 SurfaceFormat[0]: format = FORMAT_B8G8R8A8_SRGB colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR SurfaceFormat[1]: format = FORMAT_B8G8R8A8_UNORM colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR Present Modes: count = 2 PRESENT_MODE_MAILBOX_KHR PRESENT_MODE_FIFO_KHR VkSurfaceCapabilitiesKHR: ------------------------- minImageCount = 4 maxImageCount = 0 currentExtent: width = 4294967295 height = 4294967295 minImageExtent: width = 1 height = 1 maxImageExtent: width = 16384 height = 16384 maxImageArrayLayers = 1 supportedTransforms: count = 1 SURFACE_TRANSFORM_IDENTITY_BIT_KHR currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR supportedCompositeAlpha: count = 2 COMPOSITE_ALPHA_OPAQUE_BIT_KHR COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR supportedUsageFlags: count = 5 IMAGE_USAGE_TRANSFER_SRC_BIT IMAGE_USAGE_TRANSFER_DST_BIT IMAGE_USAGE_SAMPLED_BIT IMAGE_USAGE_STORAGE_BIT IMAGE_USAGE_COLOR_ATTACHMENT_BIT VkSurfaceCapabilities2EXT: -------------------------- supportedSurfaceCounters: count = 0 None VkSurfaceProtectedCapabilitiesKHR: ---------------------------------- supportsProtected = false Device Groups: ============== Group 0: Properties: physicalDevices: count = 1 Intel(R) UHD Graphics 630 (CFL GT2) (ID: 0) subsetAllocation = 0 Present Capabilities: Intel(R) UHD Graphics 630 (CFL GT2) (ID: 0): Can present images from the following devices: count = 1 Intel(R) UHD Graphics 630 (CFL GT2) (ID: 0) Present modes: count = 1 DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR Device Properties and Extensions: ================================= GPU0: VkPhysicalDeviceProperties: --------------------------- apiVersion = 4202641 (1.2.145) driverVersion = 83898372 (0x5003004) vendorID = 0x8086 deviceID = 0x3e92 deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU deviceName = Intel(R) UHD Graphics 630 (CFL GT2) VkPhysicalDeviceLimits: ----------------------- maxImageDimension1D = 16384 maxImageDimension2D = 16384 maxImageDimension3D = 2048 maxImageDimensionCube = 16384 maxImageArrayLayers = 2048 maxTexelBufferElements = 134217728 maxUniformBufferRange = 134217728 maxStorageBufferRange = 1073741824 maxPushConstantsSize = 128 maxMemoryAllocationCount = 4294967295 maxSamplerAllocationCount = 65536 bufferImageGranularity = 0x00000040 sparseAddressSpaceSize = 0x00000000 maxBoundDescriptorSets = 8 maxPerStageDescriptorSamplers = 65535 maxPerStageDescriptorUniformBuffers = 64 maxPerStageDescriptorStorageBuffers = 65535 maxPerStageDescriptorSampledImages = 65535 maxPerStageDescriptorStorageImages = 65535 maxPerStageDescriptorInputAttachments = 64 maxPerStageResources = 4294967295 maxDescriptorSetSamplers = 393210 maxDescriptorSetUniformBuffers = 384 maxDescriptorSetUniformBuffersDynamic = 8 maxDescriptorSetStorageBuffers = 393210 maxDescriptorSetStorageBuffersDynamic = 8 maxDescriptorSetSampledImages = 393210 maxDescriptorSetStorageImages = 393210 maxDescriptorSetInputAttachments = 256 maxVertexInputAttributes = 28 maxVertexInputBindings = 28 maxVertexInputAttributeOffset = 2047 maxVertexInputBindingStride = 2048 maxVertexOutputComponents = 128 maxTessellationGenerationLevel = 64 maxTessellationPatchSize = 32 maxTessellationControlPerVertexInputComponents = 128 maxTessellationControlPerVertexOutputComponents = 128 maxTessellationControlPerPatchOutputComponents = 128 maxTessellationControlTotalOutputComponents = 2048 maxTessellationEvaluationInputComponents = 128 maxTessellationEvaluationOutputComponents = 128 maxGeometryShaderInvocations = 32 maxGeometryInputComponents = 64 maxGeometryOutputComponents = 128 maxGeometryOutputVertices = 256 maxGeometryTotalOutputComponents = 1024 maxFragmentInputComponents = 116 maxFragmentOutputAttachments = 8 maxFragmentDualSrcAttachments = 1 maxFragmentCombinedOutputResources = 8 maxComputeSharedMemorySize = 65536 maxComputeWorkGroupCount: count = 3 65535 65535 65535 maxComputeWorkGroupInvocations = 1792 maxComputeWorkGroupSize: count = 3 1792 1792 1792 subPixelPrecisionBits = 8 subTexelPrecisionBits = 8 mipmapPrecisionBits = 8 maxDrawIndexedIndexValue = 4294967295 maxDrawIndirectCount = 4294967295 maxSamplerLodBias = 16 maxSamplerAnisotropy = 16 maxViewports = 16 maxViewportDimensions: count = 2 16384 16384 viewportBoundsRange: count = 2 -32768 32767 viewportSubPixelBits = 13 minMemoryMapAlignment = 4096 minTexelBufferOffsetAlignment = 0x00000010 minUniformBufferOffsetAlignment = 0x00000040 minStorageBufferOffsetAlignment = 0x00000004 minTexelOffset = -8 maxTexelOffset = 7 minTexelGatherOffset = -32 maxTexelGatherOffset = 31 minInterpolationOffset = -0.5 maxInterpolationOffset = 0.4375 subPixelInterpolationOffsetBits = 4 maxFramebufferWidth = 16384 maxFramebufferHeight = 16384 maxFramebufferLayers = 2048 framebufferColorSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT framebufferDepthSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT framebufferStencilSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT framebufferNoAttachmentsSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT maxColorAttachments = 8 sampledImageColorSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT sampledImageIntegerSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT sampledImageDepthSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT sampledImageStencilSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT storageImageSampleCounts: count = 1 SAMPLE_COUNT_1_BIT maxSampleMaskWords = 1 timestampComputeAndGraphics = true timestampPeriod = 83.3333 maxClipDistances = 8 maxCullDistances = 8 maxCombinedClipAndCullDistances = 8 discreteQueuePriorities = 2 pointSizeRange: count = 2 0.125 255.875 lineWidthRange: count = 2 0 2047.99 pointSizeGranularity = 0.125 lineWidthGranularity = 0.0078125 strictLines = false standardSampleLocations = true optimalBufferCopyOffsetAlignment = 0x00000080 optimalBufferCopyRowPitchAlignment = 0x00000080 nonCoherentAtomSize = 0x00000040 VkPhysicalDeviceSparseProperties: --------------------------------- residencyStandard2DBlockShape = false residencyStandard2DMultisampleBlockShape = false residencyStandard3DBlockShape = false residencyAlignedMipSize = false residencyNonResidentStrict = false VkPhysicalDeviceCustomBorderColorPropertiesEXT: ----------------------------------------------- maxCustomBorderColorSamplers = 4096 VkPhysicalDeviceDepthStencilResolveProperties: ---------------------------------------------- supportedDepthResolveModes: count = 4 RESOLVE_MODE_SAMPLE_ZERO_BIT RESOLVE_MODE_AVERAGE_BIT RESOLVE_MODE_MIN_BIT RESOLVE_MODE_MAX_BIT supportedStencilResolveModes: count = 3 RESOLVE_MODE_SAMPLE_ZERO_BIT RESOLVE_MODE_MIN_BIT RESOLVE_MODE_MAX_BIT independentResolveNone = true independentResolve = true VkPhysicalDeviceDescriptorIndexingProperties: --------------------------------------------- maxUpdateAfterBindDescriptorsInAllPools = 1048576 shaderUniformBufferArrayNonUniformIndexingNative = false shaderSampledImageArrayNonUniformIndexingNative = false shaderStorageBufferArrayNonUniformIndexingNative = true shaderStorageImageArrayNonUniformIndexingNative = false shaderInputAttachmentArrayNonUniformIndexingNative = false robustBufferAccessUpdateAfterBind = true quadDivergentImplicitLod = false maxPerStageDescriptorUpdateAfterBindSamplers = 1048576 maxPerStageDescriptorUpdateAfterBindUniformBuffers = 64 maxPerStageDescriptorUpdateAfterBindStorageBuffers = 4294967295 maxPerStageDescriptorUpdateAfterBindSampledImages = 1048576 maxPerStageDescriptorUpdateAfterBindStorageImages = 1048576 maxPerStageDescriptorUpdateAfterBindInputAttachments = 64 maxPerStageUpdateAfterBindResources = 4294967295 maxDescriptorSetUpdateAfterBindSamplers = 1048576 maxDescriptorSetUpdateAfterBindUniformBuffers = 384 maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8 maxDescriptorSetUpdateAfterBindStorageBuffers = 4294967295 maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8 maxDescriptorSetUpdateAfterBindSampledImages = 1048576 maxDescriptorSetUpdateAfterBindStorageImages = 1048576 maxDescriptorSetUpdateAfterBindInputAttachments = 256 VkPhysicalDeviceDriverProperties: --------------------------------- driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA driverName = Intel open-source Mesa driver driverInfo = Mesa 20.3.4 conformanceVersion = 1.2.0.0 VkPhysicalDeviceExternalMemoryHostPropertiesEXT: ------------------------------------------------ minImportedHostPointerAlignment = 0x00001000 VkPhysicalDeviceFloatControlsProperties: ---------------------------------------- denormBehaviorIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL roundingModeIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE shaderSignedZeroInfNanPreserveFloat16 = true shaderSignedZeroInfNanPreserveFloat32 = true shaderSignedZeroInfNanPreserveFloat64 = true shaderDenormPreserveFloat16 = true shaderDenormPreserveFloat32 = true shaderDenormPreserveFloat64 = true shaderDenormFlushToZeroFloat16 = false shaderDenormFlushToZeroFloat32 = true shaderDenormFlushToZeroFloat64 = true shaderRoundingModeRTEFloat16 = true shaderRoundingModeRTEFloat32 = true shaderRoundingModeRTEFloat64 = true shaderRoundingModeRTZFloat16 = true shaderRoundingModeRTZFloat32 = true shaderRoundingModeRTZFloat64 = true VkPhysicalDeviceIDProperties: ----------------------------- deviceUUID = 43ef2a51-657f-2e96-0ecc-75e4e7eee67c driverUUID = 222f4573-0cc7-4afd-1e64-6feddc42ab47 deviceNodeMask = 0 deviceLUIDValid = false VkPhysicalDeviceInlineUniformBlockPropertiesEXT: ------------------------------------------------ maxInlineUniformBlockSize = 4096 maxPerStageDescriptorInlineUniformBlocks = 32 maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 32 maxDescriptorSetInlineUniformBlocks = 32 maxDescriptorSetUpdateAfterBindInlineUniformBlocks = 32 VkPhysicalDeviceLineRasterizationPropertiesEXT: ----------------------------------------------- lineSubPixelPrecisionBits = 4 VkPhysicalDeviceMaintenance3Properties: --------------------------------------- maxPerSetDescriptors = 1024 maxMemoryAllocationSize = 0x80000000 VkPhysicalDeviceMultiviewProperties: ------------------------------------ maxMultiviewViewCount = 16 maxMultiviewInstanceIndex = 268435455 VkPhysicalDevicePCIBusInfoPropertiesEXT: ---------------------------------------- pciDomain = 0 pciBus = 0 pciDevice = 2 pciFunction = 0 VkPhysicalDevicePointClippingProperties: ---------------------------------------- pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY VkPhysicalDeviceProtectedMemoryProperties: ------------------------------------------ protectedNoFault = false VkPhysicalDevicePushDescriptorPropertiesKHR: -------------------------------------------- maxPushDescriptors = 32 VkPhysicalDeviceRobustness2PropertiesEXT: ----------------------------------------- robustStorageBufferAccessSizeAlignment = 0x00000004 robustUniformBufferAccessSizeAlignment = 0x00000040 VkPhysicalDeviceSamplerFilterMinmaxProperties: ---------------------------------------------- filterMinmaxSingleComponentFormats = true filterMinmaxImageComponentMapping = true VkPhysicalDeviceSubgroupProperties: ----------------------------------- subgroupSize = 32 supportedStages: count = 8 SHADER_STAGE_VERTEX_BIT SHADER_STAGE_TESSELLATION_CONTROL_BIT SHADER_STAGE_TESSELLATION_EVALUATION_BIT SHADER_STAGE_GEOMETRY_BIT SHADER_STAGE_FRAGMENT_BIT SHADER_STAGE_COMPUTE_BIT SHADER_STAGE_ALL_GRAPHICS SHADER_STAGE_ALL supportedOperations: count = 8 SUBGROUP_FEATURE_BASIC_BIT SUBGROUP_FEATURE_VOTE_BIT SUBGROUP_FEATURE_ARITHMETIC_BIT SUBGROUP_FEATURE_BALLOT_BIT SUBGROUP_FEATURE_SHUFFLE_BIT SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT SUBGROUP_FEATURE_CLUSTERED_BIT SUBGROUP_FEATURE_QUAD_BIT quadOperationsInAllStages = true VkPhysicalDeviceSubgroupSizeControlPropertiesEXT: ------------------------------------------------- minSubgroupSize = 8 maxSubgroupSize = 32 maxComputeWorkgroupSubgroups = 56 requiredSubgroupSizeStages: count = 2 SHADER_STAGE_COMPUTE_BIT SHADER_STAGE_ALL VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT: -------------------------------------------------- storageTexelBufferOffsetAlignmentBytes = 0x00000010 storageTexelBufferOffsetSingleTexelAlignment = true uniformTexelBufferOffsetAlignmentBytes = 0x00000001 uniformTexelBufferOffsetSingleTexelAlignment = false VkPhysicalDeviceTimelineSemaphoreProperties: -------------------------------------------- maxTimelineSemaphoreValueDifference = 18446744073709551615 VkPhysicalDeviceTransformFeedbackPropertiesEXT: ----------------------------------------------- maxTransformFeedbackStreams = 4 maxTransformFeedbackBuffers = 4 maxTransformFeedbackBufferSize = 0x100000000 maxTransformFeedbackStreamDataSize = 512 maxTransformFeedbackBufferDataSize = 512 maxTransformFeedbackBufferDataStride = 2048 transformFeedbackQueries = true transformFeedbackStreamsLinesTriangles = false transformFeedbackRasterizationStreamSelect = false transformFeedbackDraw = true VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT: ---------------------------------------------------- maxVertexAttribDivisor = 268435455 VkPhysicalDeviceVulkan11Properties: ----------------------------------- deviceUUID = 43ef2a51-657f-2e96-0ecc-75e4e7eee67c driverUUID = 222f4573-0cc7-4afd-1e64-6feddc42ab47 deviceNodeMask = 0 deviceLUIDValid = false subgroupSize = 32 subgroupSupportedStages: count = 8 SHADER_STAGE_VERTEX_BIT SHADER_STAGE_TESSELLATION_CONTROL_BIT SHADER_STAGE_TESSELLATION_EVALUATION_BIT SHADER_STAGE_GEOMETRY_BIT SHADER_STAGE_FRAGMENT_BIT SHADER_STAGE_COMPUTE_BIT SHADER_STAGE_ALL_GRAPHICS SHADER_STAGE_ALL subgroupSupportedOperations: count = 8 SUBGROUP_FEATURE_BASIC_BIT SUBGROUP_FEATURE_VOTE_BIT SUBGROUP_FEATURE_ARITHMETIC_BIT SUBGROUP_FEATURE_BALLOT_BIT SUBGROUP_FEATURE_SHUFFLE_BIT SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT SUBGROUP_FEATURE_CLUSTERED_BIT SUBGROUP_FEATURE_QUAD_BIT subgroupQuadOperationsInAllStages = true pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY maxMultiviewViewCount = 16 maxMultiviewInstanceIndex = 268435455 protectedNoFault = false maxPerSetDescriptors = 1024 maxMemoryAllocationSize = 0x80000000 VkPhysicalDeviceVulkan12Properties: ----------------------------------- driverID = DRIVER_ID_INTEL_OPEN_SOURCE_MESA driverName = Intel open-source Mesa driver driverInfo = Mesa 20.3.4 conformanceVersion = 1.2.0.0 denormBehaviorIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL roundingModeIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE shaderSignedZeroInfNanPreserveFloat16 = true shaderSignedZeroInfNanPreserveFloat32 = true shaderSignedZeroInfNanPreserveFloat64 = true shaderDenormPreserveFloat16 = true shaderDenormPreserveFloat32 = true shaderDenormPreserveFloat64 = true shaderDenormFlushToZeroFloat16 = false shaderDenormFlushToZeroFloat32 = true shaderDenormFlushToZeroFloat64 = true shaderRoundingModeRTEFloat16 = true shaderRoundingModeRTEFloat32 = true shaderRoundingModeRTEFloat64 = true shaderRoundingModeRTZFloat16 = true shaderRoundingModeRTZFloat32 = true shaderRoundingModeRTZFloat64 = true maxUpdateAfterBindDescriptorsInAllPools = 1048576 shaderUniformBufferArrayNonUniformIndexingNative = false shaderSampledImageArrayNonUniformIndexingNative = false shaderStorageBufferArrayNonUniformIndexingNative = true shaderStorageImageArrayNonUniformIndexingNative = false shaderInputAttachmentArrayNonUniformIndexingNative = false robustBufferAccessUpdateAfterBind = true quadDivergentImplicitLod = false maxPerStageDescriptorUpdateAfterBindSamplers = 1048576 maxPerStageDescriptorUpdateAfterBindUniformBuffers = 64 maxPerStageDescriptorUpdateAfterBindStorageBuffers = 4294967295 maxPerStageDescriptorUpdateAfterBindSampledImages = 1048576 maxPerStageDescriptorUpdateAfterBindStorageImages = 1048576 maxPerStageDescriptorUpdateAfterBindInputAttachments = 64 maxPerStageUpdateAfterBindResources = 4294967295 maxDescriptorSetUpdateAfterBindSamplers = 1048576 maxDescriptorSetUpdateAfterBindUniformBuffers = 384 maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8 maxDescriptorSetUpdateAfterBindStorageBuffers = 4294967295 maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8 maxDescriptorSetUpdateAfterBindSampledImages = 1048576 maxDescriptorSetUpdateAfterBindStorageImages = 1048576 maxDescriptorSetUpdateAfterBindInputAttachments = 256 supportedDepthResolveModes: count = 4 RESOLVE_MODE_SAMPLE_ZERO_BIT RESOLVE_MODE_AVERAGE_BIT RESOLVE_MODE_MIN_BIT RESOLVE_MODE_MAX_BIT supportedStencilResolveModes: count = 3 RESOLVE_MODE_SAMPLE_ZERO_BIT RESOLVE_MODE_MIN_BIT RESOLVE_MODE_MAX_BIT independentResolveNone = true independentResolve = true filterMinmaxSingleComponentFormats = true filterMinmaxImageComponentMapping = true maxTimelineSemaphoreValueDifference = 18446744073709551615 framebufferIntegerColorSampleCounts: count = 5 SAMPLE_COUNT_1_BIT SAMPLE_COUNT_2_BIT SAMPLE_COUNT_4_BIT SAMPLE_COUNT_8_BIT SAMPLE_COUNT_16_BIT Device Extensions: count = 92 VK_EXT_4444_formats : extension revision 1 VK_EXT_buffer_device_address : extension revision 2 VK_EXT_calibrated_timestamps : extension revision 1 VK_EXT_conditional_rendering : extension revision 2 VK_EXT_custom_border_color : extension revision 12 VK_EXT_depth_clip_enable : extension revision 1 VK_EXT_descriptor_indexing : extension revision 2 VK_EXT_display_control : extension revision 1 VK_EXT_extended_dynamic_state : extension revision 1 VK_EXT_external_memory_dma_buf : extension revision 1 VK_EXT_external_memory_host : extension revision 1 VK_EXT_fragment_shader_interlock : extension revision 1 VK_EXT_global_priority : extension revision 2 VK_EXT_host_query_reset : extension revision 1 VK_EXT_image_robustness : extension revision 1 VK_EXT_index_type_uint8 : extension revision 1 VK_EXT_inline_uniform_block : extension revision 1 VK_EXT_line_rasterization : extension revision 1 VK_EXT_memory_budget : extension revision 1 VK_EXT_pci_bus_info : extension revision 2 VK_EXT_pipeline_creation_cache_control : extension revision 3 VK_EXT_pipeline_creation_feedback : extension revision 1 VK_EXT_post_depth_coverage : extension revision 1 VK_EXT_private_data : extension revision 1 VK_EXT_robustness2 : extension revision 1 VK_EXT_sampler_filter_minmax : extension revision 2 VK_EXT_scalar_block_layout : extension revision 1 VK_EXT_separate_stencil_usage : extension revision 1 VK_EXT_shader_atomic_float : extension revision 1 VK_EXT_shader_demote_to_helper_invocation : extension revision 1 VK_EXT_shader_stencil_export : extension revision 1 VK_EXT_shader_subgroup_ballot : extension revision 1 VK_EXT_shader_subgroup_vote : extension revision 1 VK_EXT_shader_viewport_index_layer : extension revision 1 VK_EXT_subgroup_size_control : extension revision 2 VK_EXT_texel_buffer_alignment : extension revision 1 VK_EXT_transform_feedback : extension revision 1 VK_EXT_vertex_attribute_divisor : extension revision 3 VK_EXT_ycbcr_image_arrays : extension revision 1 VK_GOOGLE_decorate_string : extension revision 1 VK_GOOGLE_hlsl_functionality1 : extension revision 1 VK_GOOGLE_user_type : extension revision 1 VK_INTEL_shader_integer_functions2 : extension revision 1 VK_KHR_16bit_storage : extension revision 1 VK_KHR_8bit_storage : extension revision 1 VK_KHR_bind_memory2 : extension revision 1 VK_KHR_buffer_device_address : extension revision 1 VK_KHR_copy_commands2 : extension revision 1 VK_KHR_create_renderpass2 : extension revision 1 VK_KHR_dedicated_allocation : extension revision 3 VK_KHR_depth_stencil_resolve : extension revision 1 VK_KHR_descriptor_update_template : extension revision 1 VK_KHR_device_group : extension revision 4 VK_KHR_draw_indirect_count : extension revision 1 VK_KHR_driver_properties : extension revision 1 VK_KHR_external_fence : extension revision 1 VK_KHR_external_fence_fd : extension revision 1 VK_KHR_external_memory : extension revision 1 VK_KHR_external_memory_fd : extension revision 1 VK_KHR_external_semaphore : extension revision 1 VK_KHR_external_semaphore_fd : extension revision 1 VK_KHR_get_memory_requirements2 : extension revision 1 VK_KHR_image_format_list : extension revision 1 VK_KHR_imageless_framebuffer : extension revision 1 VK_KHR_incremental_present : extension revision 1 VK_KHR_maintenance1 : extension revision 2 VK_KHR_maintenance2 : extension revision 1 VK_KHR_maintenance3 : extension revision 1 VK_KHR_multiview : extension revision 1 VK_KHR_pipeline_executable_properties : extension revision 1 VK_KHR_push_descriptor : extension revision 2 VK_KHR_relaxed_block_layout : extension revision 1 VK_KHR_sampler_mirror_clamp_to_edge : extension revision 3 VK_KHR_sampler_ycbcr_conversion : extension revision 14 VK_KHR_separate_depth_stencil_layouts : extension revision 1 VK_KHR_shader_atomic_int64 : extension revision 1 VK_KHR_shader_clock : extension revision 1 VK_KHR_shader_draw_parameters : extension revision 1 VK_KHR_shader_float16_int8 : extension revision 1 VK_KHR_shader_float_controls : extension revision 4 VK_KHR_shader_non_semantic_info : extension revision 1 VK_KHR_shader_subgroup_extended_types : extension revision 1 VK_KHR_shader_terminate_invocation : extension revision 1 VK_KHR_spirv_1_4 : extension revision 1 VK_KHR_storage_buffer_storage_class : extension revision 1 VK_KHR_swapchain : extension revision 70 VK_KHR_swapchain_mutable_format : extension revision 1 VK_KHR_timeline_semaphore : extension revision 2 VK_KHR_uniform_buffer_standard_layout : extension revision 1 VK_KHR_variable_pointers : extension revision 1 VK_KHR_vulkan_memory_model : extension revision 3 VK_NV_compute_shader_derivatives : extension revision 1 VkQueueFamilyProperties: ======================== queueProperties[0]: ------------------- minImageTransferGranularity = (1,1,1) queueCount = 1 queueFlags = QUEUE_GRAPHICS | QUEUE_COMPUTE | QUEUE_TRANSFER timestampValidBits = 36 present support = true VkPhysicalDeviceMemoryProperties: ================================= memoryHeaps: count = 1 memoryHeaps[0]: size = 6087659520 (0x16ada5000) (5.67 GiB) budget = 6086983680 (0x16ad00000) (5.67 GiB) usage = 0 (0x00000000) (0.00 B) flags: count = 1 MEMORY_HEAP_DEVICE_LOCAL_BIT memoryTypes: count = 1 memoryTypes[0]: heapIndex = 0 propertyFlags = 0x000f: count = 4 MEMORY_PROPERTY_DEVICE_LOCAL_BIT MEMORY_PROPERTY_HOST_VISIBLE_BIT MEMORY_PROPERTY_HOST_COHERENT_BIT MEMORY_PROPERTY_HOST_CACHED_BIT usable for: IMAGE_TILING_OPTIMAL: color images FORMAT_D16_UNORM FORMAT_X8_D24_UNORM_PACK32 FORMAT_D32_SFLOAT FORMAT_S8_UINT FORMAT_D24_UNORM_S8_UINT FORMAT_D32_SFLOAT_S8_UINT (non-sparse) IMAGE_TILING_LINEAR: color images (non-sparse) VkPhysicalDeviceFeatures: ========================= robustBufferAccess = true fullDrawIndexUint32 = true imageCubeArray = true independentBlend = true geometryShader = true tessellationShader = true sampleRateShading = true dualSrcBlend = true logicOp = true multiDrawIndirect = true drawIndirectFirstInstance = true depthClamp = true depthBiasClamp = true fillModeNonSolid = true depthBounds = false wideLines = true largePoints = true alphaToOne = true multiViewport = true samplerAnisotropy = true textureCompressionETC2 = true textureCompressionASTC_LDR = true textureCompressionBC = true occlusionQueryPrecise = true pipelineStatisticsQuery = true vertexPipelineStoresAndAtomics = true fragmentStoresAndAtomics = true shaderTessellationAndGeometryPointSize = true shaderImageGatherExtended = true shaderStorageImageExtendedFormats = true shaderStorageImageMultisample = false shaderStorageImageReadWithoutFormat = false shaderStorageImageWriteWithoutFormat = true shaderUniformBufferArrayDynamicIndexing = true shaderSampledImageArrayDynamicIndexing = true shaderStorageBufferArrayDynamicIndexing = true shaderStorageImageArrayDynamicIndexing = true shaderClipDistance = true shaderCullDistance = true shaderFloat64 = true shaderInt64 = true shaderInt16 = true shaderResourceResidency = false shaderResourceMinLod = true sparseBinding = false sparseResidencyBuffer = false sparseResidencyImage2D = false sparseResidencyImage3D = false sparseResidency2Samples = false sparseResidency4Samples = false sparseResidency8Samples = false sparseResidency16Samples = false sparseResidencyAliased = false variableMultisampleRate = true inheritedQueries = true VkPhysicalDevice16BitStorageFeatures: ------------------------------------- storageBuffer16BitAccess = true uniformAndStorageBuffer16BitAccess = true storagePushConstant16 = true storageInputOutput16 = false VkPhysicalDevice4444FormatsFeaturesEXT: --------------------------------------- formatA4R4G4B4 = true formatA4B4G4R4 = false VkPhysicalDevice8BitStorageFeatures: ------------------------------------ storageBuffer8BitAccess = true uniformAndStorageBuffer8BitAccess = true storagePushConstant8 = true VkPhysicalDeviceBufferDeviceAddressFeatures: -------------------------------------------- bufferDeviceAddress = true bufferDeviceAddressCaptureReplay = true bufferDeviceAddressMultiDevice = false VkPhysicalDeviceBufferDeviceAddressFeaturesEXT: ----------------------------------------------- bufferDeviceAddress = true bufferDeviceAddressCaptureReplay = false bufferDeviceAddressMultiDevice = false VkPhysicalDeviceConditionalRenderingFeaturesEXT: ------------------------------------------------ conditionalRendering = true inheritedConditionalRendering = true VkPhysicalDeviceCustomBorderColorFeaturesEXT: --------------------------------------------- customBorderColors = true customBorderColorWithoutFormat = true VkPhysicalDeviceDepthClipEnableFeaturesEXT: ------------------------------------------- depthClipEnable = true VkPhysicalDeviceDescriptorIndexingFeatures: ------------------------------------------- shaderInputAttachmentArrayDynamicIndexing = false shaderUniformTexelBufferArrayDynamicIndexing = true shaderStorageTexelBufferArrayDynamicIndexing = true shaderUniformBufferArrayNonUniformIndexing = false shaderSampledImageArrayNonUniformIndexing = true shaderStorageBufferArrayNonUniformIndexing = true shaderStorageImageArrayNonUniformIndexing = true shaderInputAttachmentArrayNonUniformIndexing = false shaderUniformTexelBufferArrayNonUniformIndexing = true shaderStorageTexelBufferArrayNonUniformIndexing = true descriptorBindingUniformBufferUpdateAfterBind = false descriptorBindingSampledImageUpdateAfterBind = true descriptorBindingStorageImageUpdateAfterBind = true descriptorBindingStorageBufferUpdateAfterBind = true descriptorBindingUniformTexelBufferUpdateAfterBind = true descriptorBindingStorageTexelBufferUpdateAfterBind = true descriptorBindingUpdateUnusedWhilePending = true descriptorBindingPartiallyBound = true descriptorBindingVariableDescriptorCount = true runtimeDescriptorArray = true VkPhysicalDeviceExtendedDynamicStateFeaturesEXT: ------------------------------------------------ extendedDynamicState = true VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT: --------------------------------------------------- fragmentShaderSampleInterlock = true fragmentShaderPixelInterlock = true fragmentShaderShadingRateInterlock = false VkPhysicalDeviceHostQueryResetFeatures: --------------------------------------- hostQueryReset = true VkPhysicalDeviceImageRobustnessFeaturesEXT: ------------------------------------------- robustImageAccess = true VkPhysicalDeviceImagelessFramebufferFeatures: --------------------------------------------- imagelessFramebuffer = true VkPhysicalDeviceIndexTypeUint8FeaturesEXT: ------------------------------------------ indexTypeUint8 = true VkPhysicalDeviceInlineUniformBlockFeaturesEXT: ---------------------------------------------- inlineUniformBlock = true descriptorBindingInlineUniformBlockUpdateAfterBind = true VkPhysicalDeviceLineRasterizationFeaturesEXT: --------------------------------------------- rectangularLines = true bresenhamLines = true smoothLines = true stippledRectangularLines = false stippledBresenhamLines = true stippledSmoothLines = false VkPhysicalDeviceMultiviewFeatures: ---------------------------------- multiview = true multiviewGeometryShader = true multiviewTessellationShader = true VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT: -------------------------------------------------------- pipelineCreationCacheControl = true VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR: -------------------------------------------------------- pipelineExecutableInfo = true VkPhysicalDevicePrivateDataFeaturesEXT: --------------------------------------- privateData = true VkPhysicalDeviceProtectedMemoryFeatures: ---------------------------------------- protectedMemory = false VkPhysicalDeviceRobustness2FeaturesEXT: --------------------------------------- robustBufferAccess2 = true robustImageAccess2 = true nullDescriptor = true VkPhysicalDeviceSamplerYcbcrConversionFeatures: ----------------------------------------------- samplerYcbcrConversion = true VkPhysicalDeviceScalarBlockLayoutFeatures: ------------------------------------------ scalarBlockLayout = true VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures: ---------------------------------------------------- separateDepthStencilLayouts = true VkPhysicalDeviceShaderAtomicFloatFeaturesEXT: --------------------------------------------- shaderBufferFloat32Atomics = true shaderBufferFloat32AtomicAdd = false shaderBufferFloat64Atomics = false shaderBufferFloat64AtomicAdd = false shaderSharedFloat32Atomics = true shaderSharedFloat32AtomicAdd = false shaderSharedFloat64Atomics = false shaderSharedFloat64AtomicAdd = false shaderImageFloat32Atomics = true shaderImageFloat32AtomicAdd = false sparseImageFloat32Atomics = false sparseImageFloat32AtomicAdd = false VkPhysicalDeviceShaderAtomicInt64Features: ------------------------------------------ shaderBufferInt64Atomics = true shaderSharedInt64Atomics = false VkPhysicalDeviceShaderClockFeaturesKHR: --------------------------------------- shaderSubgroupClock = true shaderDeviceClock = false VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT: ---------------------------------------------------------- shaderDemoteToHelperInvocation = true VkPhysicalDeviceShaderDrawParametersFeatures: --------------------------------------------- shaderDrawParameters = true VkPhysicalDeviceShaderFloat16Int8Features: ------------------------------------------ shaderFloat16 = true shaderInt8 = true VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures: ---------------------------------------------------- shaderSubgroupExtendedTypes = true VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR: ----------------------------------------------------- shaderTerminateInvocation = true VkPhysicalDeviceSubgroupSizeControlFeaturesEXT: ----------------------------------------------- subgroupSizeControl = true computeFullSubgroups = true VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT: ------------------------------------------------ texelBufferAlignment = true VkPhysicalDeviceTimelineSemaphoreFeatures: ------------------------------------------ timelineSemaphore = true VkPhysicalDeviceTransformFeedbackFeaturesEXT: --------------------------------------------- transformFeedback = true geometryStreams = true VkPhysicalDeviceUniformBufferStandardLayoutFeatures: ---------------------------------------------------- uniformBufferStandardLayout = true VkPhysicalDeviceVariablePointersFeatures: ----------------------------------------- variablePointersStorageBuffer = true variablePointers = true VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT: -------------------------------------------------- vertexAttributeInstanceRateDivisor = true vertexAttributeInstanceRateZeroDivisor = true VkPhysicalDeviceVulkan11Features: --------------------------------- storageBuffer16BitAccess = true uniformAndStorageBuffer16BitAccess = true storagePushConstant16 = true storageInputOutput16 = false multiview = true multiviewGeometryShader = true multiviewTessellationShader = true variablePointersStorageBuffer = true variablePointers = true protectedMemory = false samplerYcbcrConversion = true shaderDrawParameters = true VkPhysicalDeviceVulkan12Features: --------------------------------- samplerMirrorClampToEdge = true drawIndirectCount = true storageBuffer8BitAccess = true uniformAndStorageBuffer8BitAccess = true storagePushConstant8 = true shaderBufferInt64Atomics = true shaderSharedInt64Atomics = false shaderFloat16 = true shaderInt8 = true descriptorIndexing = true shaderInputAttachmentArrayDynamicIndexing = false shaderUniformTexelBufferArrayDynamicIndexing = true shaderStorageTexelBufferArrayDynamicIndexing = true shaderUniformBufferArrayNonUniformIndexing = false shaderSampledImageArrayNonUniformIndexing = true shaderStorageBufferArrayNonUniformIndexing = true shaderStorageImageArrayNonUniformIndexing = true shaderInputAttachmentArrayNonUniformIndexing = false shaderUniformTexelBufferArrayNonUniformIndexing = true shaderStorageTexelBufferArrayNonUniformIndexing = true descriptorBindingUniformBufferUpdateAfterBind = false descriptorBindingSampledImageUpdateAfterBind = true descriptorBindingStorageImageUpdateAfterBind = true descriptorBindingStorageBufferUpdateAfterBind = true descriptorBindingUniformTexelBufferUpdateAfterBind = true descriptorBindingStorageTexelBufferUpdateAfterBind = true descriptorBindingUpdateUnusedWhilePending = true descriptorBindingPartiallyBound = true descriptorBindingVariableDescriptorCount = true runtimeDescriptorArray = true samplerFilterMinmax = true scalarBlockLayout = true imagelessFramebuffer = true uniformBufferStandardLayout = true shaderSubgroupExtendedTypes = true separateDepthStencilLayouts = true hostQueryReset = true timelineSemaphore = true bufferDeviceAddress = true bufferDeviceAddressCaptureReplay = true bufferDeviceAddressMultiDevice = false vulkanMemoryModel = true vulkanMemoryModelDeviceScope = true vulkanMemoryModelAvailabilityVisibilityChains = true shaderOutputViewportIndex = true shaderOutputLayer = true subgroupBroadcastDynamicId = true VkPhysicalDeviceVulkanMemoryModelFeatures: ------------------------------------------ vulkanMemoryModel = true vulkanMemoryModelDeviceScope = true vulkanMemoryModelAvailabilityVisibilityChains = true VkPhysicalDeviceYcbcrImageArraysFeaturesEXT: -------------------------------------------- ycbcrImageArrays = true ```

Arch Linux vulkan-icd-loader 1.2.172-1 vulkan-intel 20.3.4-3 nvidia 460.67-2 nvidia-utils 460.67-1 vulkan-tools 1.2.172-1 linux 5.11.8.arch1-1

charles-lunarg commented 3 years ago

@H5117 The [GF 108]GeForce GT 730 does not support vulkan Seems I was looking at the wrong GPU, the 208 indeed does support vulkan, I was looking at the 108 which doesn't. vulkaninfo requires at least one valid GPU to run. Except, the vulkan-loader is responsible for finding 'valid vulkan drivers' on the system. It seems that it considers the nvidia driver to be valid, which then this driver returns a valid VkPhysicalDevice, that vulkaninfo can use. vkGetPhysicalDeviceSurfaceFormats2KHR is crashing when using this physical device.

Can you set the env-var VK_LOADER_DEBUG=all, run vulkaninfo again, and return the output generated?

H5117 commented 3 years ago

@charles-lunarg Here is the output: vulkaninfo.txt. vkcube also works only with explicit selection of the Intel GPU. And segfaults by default:

$ vkcube
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

Selected GPU 1: NVIDIA GeForce GT 730, type: 2
Can't find our preferred formats... Falling back to first exposed format. Rendering may be incorrect.
Segmentation fault (core dumped)
charles-lunarg commented 3 years ago

This looks more and more like an issue with the driver. The Nvidia driver should either: not be found because it doesn't support vulkan or not report support for any physical devices. However I cannot rule out the possibility that a loader bug is causing this issue. But generally speaking, only SDK versions of the loader & tooling is validated. Using individual header updates means you are liable to include bugs that were introduced but fixed during SDK. Can you update to 1.2.176 and rerun the code?

pdaniell-nv commented 3 years ago

The "NVIDIA Corporation GK208B [GeForce GT 730]" device should support Vulkan. I would be interested in seeing the callstack for the crash.

H5117 commented 3 years ago

The same behavior with vulkan-icd-loader 1.2.176-1 and vulkan-tools 1.2.176-1.

Stack trace with -DCMAKE_BUILD_TYPE=Release ``` $ gdb vkcube GNU gdb (GDB) 10.2 <...> Reading symbols from vkcube... (No debugging symbols found in vkcube) (gdb) r Starting program: /usr/bin/vkcube [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [New Thread 0x7ffff108a640 (LWP 52872)] [New Thread 0x7fffebfff640 (LWP 52873)] [New Thread 0x7ffff0889640 (LWP 52874)] [New Thread 0x7fffeb7fe640 (LWP 52875)] MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0 Selected GPU 1: NVIDIA GeForce GT 730, type: 2 Can't find our preferred formats... Falling back to first exposed format. Rendering may be incorrect. Thread 1 "vkcube" received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) bt #0 0x0000000000000000 in ?? () #1 0x00007ffff401766f in ?? () from /usr/lib/libnvidia-eglcore.so.465.27 #2 0x00007ffff400adac in ?? () from /usr/lib/libnvidia-eglcore.so.465.27 #3 0x00007ffff4017ba3 in ?? () from /usr/lib/libnvidia-eglcore.so.465.27 #4 0x000055555555c2a4 in ?? () #5 0x0000555555558a1e in ?? () #6 0x00007ffff7c1eb25 in __libc_start_main () from /usr/lib/libc.so.6 #7 0x0000555555559cde in ?? () ```
Stack trace with -DCMAKE_BUILD_TYPE=Debug ``` $ gdb vkcube GNU gdb (GDB) 10.2 <...> Reading symbols from vkcube... (gdb) r Starting program: /usr/bin/vkcube [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [New Thread 0x7ffff108a640 (LWP 57310)] [New Thread 0x7ffff0889640 (LWP 57311)] [New Thread 0x7fffebfff640 (LWP 57312)] [New Thread 0x7fffeb7fe640 (LWP 57313)] MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0 Selected GPU 1: NVIDIA GeForce GT 730, type: 2 vkcube: /tmp/tools/src/Vulkan-Tools-1.2.176/cube/cube.c:3685: demo_init_vk_swapchain: Assertion `!err' failed. Thread 1 "vkcube" received signal SIGABRT, Aborted. 0x00007ffff7c33ef5 in raise () from /usr/lib/libc.so.6 (gdb) bt #0 0x00007ffff7c33ef5 in raise () from /usr/lib/libc.so.6 #1 0x00007ffff7c1d862 in abort () from /usr/lib/libc.so.6 #2 0x00007ffff7c1d747 in __assert_fail_base.cold () from /usr/lib/libc.so.6 #3 0x00007ffff7c2c646 in __assert_fail () from /usr/lib/libc.so.6 #4 0x0000555555559e4e in demo_init_vk_swapchain (demo=0x7fffffffd500) at /usr/src/debug/Vulkan-Tools-1.2.176/cube/cube.c:3685 #5 main (argc=, argv=) at /usr/src/debug/Vulkan-Tools-1.2.176/cube/cube.c:4202 ```
H5117 commented 3 years ago

Maybe it is worth to note that I don't have a monitor attached to the Nvidia card, it is used as OpenCL device only. But IMHO vulkaninfo should work in this case, and vkcube should not crash.

charles-lunarg commented 3 years ago

In this case, vkcube is crashing because a call to vkGetPhysicalDeviceSurfaceFormatsKHR is returning a non-success value, which indicates that something related to the surface isn't working. So its less crashing and more just failing an assert. https://github.com/KhronosGroup/Vulkan-Tools/blob/6149e30699b36901715d46a5cef8959625ef399b/cube/cube.c#L3685 I do agree that the error reporting could be better, but I assert (heh) that vkcube did what it could to verify that the system can support surfaces (by verifying if VK_KHR_surface and the platform specific surface extension are present and enabled), and then attempted to query the surface info (formats, support, capabilities, etc) and thats when it failed.

I am not the vkcube maintainer, so my experience with that codebase is limited, as such it is very feasible that vkcube could be doing more to ensure that it works.

As for vulkaninfo, that definitely is an issue, vulkaninfo should be more resilient to faults. Though, if there is an issue where the vulkan-loader reports support for surface extensions but crashes in calls to them (ie what vkcube could be suffering from), then vulkaninfo has the same limitation of only being able to check for those extensions to determine support.

kkartaltepe commented 3 years ago

The spec declares surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism and at this point vulkaninfo has in-fact not called vkGetPhysicalDeviceSurfaceSupportKHR.

If we do attempt to call vkGetPhysicalDeviceSurfaceSupportKHR for every queue when using nvidia's drivers we will find that nvidia is happy to report that present is not supported on any queue for some surface types. These are the surfaces for which errors are reported where vulkaninfo doesnt expect them.

I would imagine that this makes vkcube successfully presenting frames of this surface on a queue out of spec but I dont pretend to know the infinite wisdom of the spec authors and nvidia engineers. It seems vkcube uses a surface type chosen at compile time which nvidia does support present for and gives up complaining it couldnt find appropriate queues if you change to the troublesome surface type. If we instead give up on querying PhysicalDeviceSurface information in AppSurface if vkGetPhysicalDeviceSurfaceSupportKHR returns false for queue 0 (or maybe all of them) everything else completes successfully.