18 #include "../utils/utils.hpp"
25 static char const * AppName =
"PhysicalDeviceProperties";
26 static char const * EngineName =
"Vulkan.hpp";
49 if ( vendorID < 0x10000 )
53 case 0x1022:
return "Advanced Micro Devices";
54 case 0x10DE:
return "NVidia Corporation";
55 case 0x8086:
return "Intel Corporation";
83 os << std::setfill(
'0' ) << std::hex;
86 os << std::setw( 2 ) << static_cast<uint32_t>( uuid.
m_data[j] );
87 if ( j == 3 || j == 5 )
92 os << std::setfill(
' ' ) << std::dec;
103 #if !defined( NDEBUG )
113 for (
size_t i = 0; i < physicalDevices.size(); i++ )
116 std::vector<vk::ExtensionProperties> extensionProperties = physicalDevices[i].enumerateDeviceExtensionProperties();
118 std::cout <<
"PhysicalDevice " << i <<
"\n";
119 auto properties2 = physicalDevices[i]
156 std::cout << std::string(
"\t" ) <<
"Properties:\n";
158 std::cout << std::string(
"\t\t" ) <<
"driverVersion = " <<
decodeDriverVersion( properties.driverVersion, properties.vendorID ) <<
"\n";
160 std::cout << std::string(
"\t\t" ) <<
"deviceID = " << properties.deviceID <<
"\n";
162 std::cout << std::string(
"\t\t" ) <<
"deviceName = " << properties.deviceName <<
"\n";
163 std::cout << std::string(
"\t\t" ) <<
"pipelineCacheUUID = " <<
vk::su::UUID( properties.pipelineCacheUUID ) <<
"\n";
164 std::cout << std::string(
"\t\t" ) <<
"limits:\n";
165 std::cout << std::string(
"\t\t\t" ) <<
"bufferImageGranularity = " << properties.limits.bufferImageGranularity <<
"\n";
166 std::cout << std::string(
"\t\t\t" ) <<
"discreteQueuePriorities = " << properties.limits.discreteQueuePriorities <<
"\n";
168 <<
"framebufferColorSampleCounts = " <<
vk::to_string( properties.limits.framebufferColorSampleCounts ) <<
"\n";
170 <<
"framebufferDepthSampleCounts = " <<
vk::to_string( properties.limits.framebufferDepthSampleCounts ) <<
"\n";
172 <<
"framebufferNoAttachmentsSampleCounts = " <<
vk::to_string( properties.limits.framebufferNoAttachmentsSampleCounts ) <<
"\n";
174 <<
"framebufferStencilSampleCounts = " <<
vk::to_string( properties.limits.framebufferStencilSampleCounts ) <<
"\n";
175 std::cout << std::string(
"\t\t\t" ) <<
"lineWidthGranularity = " << properties.limits.lineWidthGranularity <<
"\n";
176 std::cout << std::string(
"\t\t\t" ) <<
"lineWidthRange = "
177 <<
"[" << properties.limits.lineWidthRange[0] <<
", " << properties.limits.lineWidthRange[1] <<
"]"
179 std::cout << std::string(
"\t\t\t" ) <<
"maxBoundDescriptorSets = " << properties.limits.maxBoundDescriptorSets <<
"\n";
180 std::cout << std::string(
"\t\t\t" ) <<
"maxClipDistances = " << properties.limits.maxClipDistances <<
"\n";
181 std::cout << std::string(
"\t\t\t" ) <<
"maxColorAttachments = " << properties.limits.maxColorAttachments <<
"\n";
182 std::cout << std::string(
"\t\t\t" ) <<
"maxCombinedClipAndCullDistances = " << properties.limits.maxCombinedClipAndCullDistances <<
"\n";
183 std::cout << std::string(
"\t\t\t" ) <<
"maxComputeSharedMemorySize = " << properties.limits.maxComputeSharedMemorySize <<
"\n";
184 std::cout << std::string(
"\t\t\t" ) <<
"maxComputeWorkGroupCount = "
185 <<
"[" << properties.limits.maxComputeWorkGroupCount[0] <<
", " << properties.limits.maxComputeWorkGroupCount[1] <<
", "
186 << properties.limits.maxComputeWorkGroupCount[2] <<
"]"
188 std::cout << std::string(
"\t\t\t" ) <<
"maxComputeWorkGroupInvocations = " << properties.limits.maxComputeWorkGroupInvocations <<
"\n";
189 std::cout << std::string(
"\t\t\t" ) <<
"maxComputeWorkGroupSize = "
190 <<
"[" << properties.limits.maxComputeWorkGroupSize[0] <<
", " << properties.limits.maxComputeWorkGroupSize[1] <<
", "
191 << properties.limits.maxComputeWorkGroupSize[2] <<
"]"
193 std::cout << std::string(
"\t\t\t" ) <<
"maxCullDistances = " << properties.limits.maxCullDistances <<
"\n";
194 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetInputAttachments = " << properties.limits.maxDescriptorSetInputAttachments
196 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetSampledImages = " << properties.limits.maxDescriptorSetSampledImages <<
"\n";
197 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetSamplers = " << properties.limits.maxDescriptorSetSamplers <<
"\n";
198 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetStorageBuffers = " << properties.limits.maxDescriptorSetStorageBuffers <<
"\n";
199 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetStorageBuffersDynamic = " << properties.limits.maxDescriptorSetStorageBuffersDynamic
201 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetStorageImages = " << properties.limits.maxDescriptorSetStorageImages <<
"\n";
202 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetUniformBuffers = " << properties.limits.maxDescriptorSetUniformBuffers <<
"\n";
203 std::cout << std::string(
"\t\t\t" ) <<
"maxDescriptorSetUniformBuffersDynamic = " << properties.limits.maxDescriptorSetUniformBuffersDynamic
205 std::cout << std::string(
"\t\t\t" ) <<
"maxDrawIndexedIndexValue = " << properties.limits.maxDrawIndexedIndexValue <<
"\n";
206 std::cout << std::string(
"\t\t\t" ) <<
"maxDrawIndirectCount = " << properties.limits.maxDrawIndirectCount <<
"\n";
207 std::cout << std::string(
"\t\t\t" ) <<
"maxFragmentCombinedOutputResources = " << properties.limits.maxFragmentCombinedOutputResources
209 std::cout << std::string(
"\t\t\t" ) <<
"maxFragmentDualSrcAttachments = " << properties.limits.maxFragmentDualSrcAttachments <<
"\n";
210 std::cout << std::string(
"\t\t\t" ) <<
"maxFragmentInputComponents = " << properties.limits.maxFragmentInputComponents <<
"\n";
211 std::cout << std::string(
"\t\t\t" ) <<
"maxFragmentOutputAttachments = " << properties.limits.maxFragmentOutputAttachments <<
"\n";
212 std::cout << std::string(
"\t\t\t" ) <<
"maxFramebufferHeight = " << properties.limits.maxFramebufferHeight <<
"\n";
213 std::cout << std::string(
"\t\t\t" ) <<
"maxFramebufferLayers = " << properties.limits.maxFramebufferLayers <<
"\n";
214 std::cout << std::string(
"\t\t\t" ) <<
"maxFramebufferWidth = " << properties.limits.maxFramebufferWidth <<
"\n";
215 std::cout << std::string(
"\t\t\t" ) <<
"maxGeometryInputComponents = " << properties.limits.maxGeometryInputComponents <<
"\n";
216 std::cout << std::string(
"\t\t\t" ) <<
"maxGeometryOutputComponents = " << properties.limits.maxGeometryOutputComponents <<
"\n";
217 std::cout << std::string(
"\t\t\t" ) <<
"maxGeometryOutputVertices = " << properties.limits.maxGeometryOutputVertices <<
"\n";
218 std::cout << std::string(
"\t\t\t" ) <<
"maxGeometryShaderInvocations = " << properties.limits.maxGeometryShaderInvocations <<
"\n";
219 std::cout << std::string(
"\t\t\t" ) <<
"maxGeometryTotalOutputComponents = " << properties.limits.maxGeometryTotalOutputComponents
221 std::cout << std::string(
"\t\t\t" ) <<
"maxImageArrayLayers = " << properties.limits.maxImageArrayLayers <<
"\n";
222 std::cout << std::string(
"\t\t\t" ) <<
"maxImageDimension1D = " << properties.limits.maxImageDimension1D <<
"\n";
223 std::cout << std::string(
"\t\t\t" ) <<
"maxImageDimension2D = " << properties.limits.maxImageDimension2D <<
"\n";
224 std::cout << std::string(
"\t\t\t" ) <<
"maxImageDimension3D = " << properties.limits.maxImageDimension3D <<
"\n";
225 std::cout << std::string(
"\t\t\t" ) <<
"maxImageDimensionCube = " << properties.limits.maxImageDimensionCube <<
"\n";
226 std::cout << std::string(
"\t\t\t" ) <<
"maxInterpolationOffset = " << properties.limits.maxInterpolationOffset <<
"\n";
227 std::cout << std::string(
"\t\t\t" ) <<
"maxMemoryAllocationCount = " << properties.limits.maxMemoryAllocationCount <<
"\n";
228 std::cout << std::string(
"\t\t\t" ) <<
"maxPerStageDescriptorInputAttachments = " << properties.limits.maxPerStageDescriptorInputAttachments
230 std::cout << std::string(
"\t\t\t" ) <<
"maxPerStageDescriptorSampledImages = " << properties.limits.maxPerStageDescriptorSampledImages
232 std::cout << std::string(
"\t\t\t" ) <<
"maxPerStageDescriptorSamplers = " << properties.limits.maxPerStageDescriptorSamplers <<
"\n";
233 std::cout << std::string(
"\t\t\t" ) <<
"maxPerStageDescriptorStorageBuffers = " << properties.limits.maxPerStageDescriptorStorageBuffers
235 std::cout << std::string(
"\t\t\t" ) <<
"maxPerStageDescriptorStorageImages = " << properties.limits.maxPerStageDescriptorStorageImages
237 std::cout << std::string(
"\t\t\t" ) <<
"maxPerStageDescriptorUniformBuffers = " << properties.limits.maxPerStageDescriptorUniformBuffers
239 std::cout << std::string(
"\t\t\t" ) <<
"maxPerStageResources = " << properties.limits.maxPerStageResources <<
"\n";
240 std::cout << std::string(
"\t\t\t" ) <<
"maxPushConstantsSize = " << properties.limits.maxPushConstantsSize <<
"\n";
241 std::cout << std::string(
"\t\t\t" ) <<
"maxSampleMaskWords = " << properties.limits.maxSampleMaskWords <<
"\n";
242 std::cout << std::string(
"\t\t\t" ) <<
"maxSamplerAllocationCount = " << properties.limits.maxSamplerAllocationCount <<
"\n";
243 std::cout << std::string(
"\t\t\t" ) <<
"maxSamplerAnisotropy = " << properties.limits.maxSamplerAnisotropy <<
"\n";
244 std::cout << std::string(
"\t\t\t" ) <<
"maxSamplerLodBias = " << properties.limits.maxSamplerLodBias <<
"\n";
245 std::cout << std::string(
"\t\t\t" ) <<
"maxStorageBufferRange = " << properties.limits.maxStorageBufferRange <<
"\n";
247 <<
"maxTessellationControlPerPatchOutputComponents = " << properties.limits.maxTessellationControlPerPatchOutputComponents <<
"\n";
249 <<
"maxTessellationControlPerVertexInputComponents = " << properties.limits.maxTessellationControlPerVertexInputComponents <<
"\n";
251 <<
"maxTessellationControlPerVertexOutputComponents = " << properties.limits.maxTessellationControlPerVertexOutputComponents <<
"\n";
253 <<
"maxTessellationControlTotalOutputComponents = " << properties.limits.maxTessellationControlTotalOutputComponents <<
"\n";
254 std::cout << std::string(
"\t\t\t" ) <<
"maxTessellationEvaluationInputComponents = " << properties.limits.maxTessellationEvaluationInputComponents
257 <<
"maxTessellationEvaluationOutputComponents = " << properties.limits.maxTessellationEvaluationOutputComponents <<
"\n";
258 std::cout << std::string(
"\t\t\t" ) <<
"maxTessellationGenerationLevel = " << properties.limits.maxTessellationGenerationLevel <<
"\n";
259 std::cout << std::string(
"\t\t\t" ) <<
"maxTessellationPatchSize = " << properties.limits.maxTessellationPatchSize <<
"\n";
260 std::cout << std::string(
"\t\t\t" ) <<
"maxTexelBufferElements = " << properties.limits.maxTexelBufferElements <<
"\n";
261 std::cout << std::string(
"\t\t\t" ) <<
"maxTexelGatherOffset = " << properties.limits.maxTexelGatherOffset <<
"\n";
262 std::cout << std::string(
"\t\t\t" ) <<
"maxTexelOffset = " << properties.limits.maxTexelOffset <<
"\n";
263 std::cout << std::string(
"\t\t\t" ) <<
"maxUniformBufferRange = " << properties.limits.maxUniformBufferRange <<
"\n";
264 std::cout << std::string(
"\t\t\t" ) <<
"maxVertexInputAttributeOffset = " << properties.limits.maxVertexInputAttributeOffset <<
"\n";
265 std::cout << std::string(
"\t\t\t" ) <<
"maxVertexInputAttributes = " << properties.limits.maxVertexInputAttributes <<
"\n";
266 std::cout << std::string(
"\t\t\t" ) <<
"maxVertexInputBindings = " << properties.limits.maxVertexInputBindings <<
"\n";
267 std::cout << std::string(
"\t\t\t" ) <<
"maxVertexInputBindingStride = " << properties.limits.maxVertexInputBindingStride <<
"\n";
268 std::cout << std::string(
"\t\t\t" ) <<
"maxVertexOutputComponents = " << properties.limits.maxVertexOutputComponents <<
"\n";
269 std::cout << std::string(
"\t\t\t" ) <<
"maxViewportDimensions = "
270 <<
"[" << properties.limits.maxViewportDimensions[0] <<
", " << properties.limits.maxViewportDimensions[1] <<
"]"
272 std::cout << std::string(
"\t\t\t" ) <<
"maxViewports = " << properties.limits.maxViewports <<
"\n";
273 std::cout << std::string(
"\t\t\t" ) <<
"minInterpolationOffset = " << properties.limits.minInterpolationOffset <<
"\n";
274 std::cout << std::string(
"\t\t\t" ) <<
"minMemoryMapAlignment = " << properties.limits.minMemoryMapAlignment <<
"\n";
275 std::cout << std::string(
"\t\t\t" ) <<
"minStorageBufferOffsetAlignment = " << properties.limits.minStorageBufferOffsetAlignment <<
"\n";
276 std::cout << std::string(
"\t\t\t" ) <<
"minTexelBufferOffsetAlignment = " << properties.limits.minTexelBufferOffsetAlignment <<
"\n";
277 std::cout << std::string(
"\t\t\t" ) <<
"minTexelGatherOffset = " << properties.limits.minTexelGatherOffset <<
"\n";
278 std::cout << std::string(
"\t\t\t" ) <<
"minTexelOffset = " << properties.limits.minTexelOffset <<
"\n";
279 std::cout << std::string(
"\t\t\t" ) <<
"minUniformBufferOffsetAlignment = " << properties.limits.minUniformBufferOffsetAlignment <<
"\n";
280 std::cout << std::string(
"\t\t\t" ) <<
"mipmapPrecisionBits = " << properties.limits.mipmapPrecisionBits <<
"\n";
281 std::cout << std::string(
"\t\t\t" ) <<
"nonCoherentAtomSize = " << properties.limits.nonCoherentAtomSize <<
"\n";
282 std::cout << std::string(
"\t\t\t" ) <<
"optimalBufferCopyOffsetAlignment = " << properties.limits.optimalBufferCopyOffsetAlignment
284 std::cout << std::string(
"\t\t\t" ) <<
"optimalBufferCopyRowPitchAlignment = " << properties.limits.optimalBufferCopyRowPitchAlignment
286 std::cout << std::string(
"\t\t\t" ) <<
"pointSizeGranularity = " << properties.limits.pointSizeGranularity <<
"\n";
287 std::cout << std::string(
"\t\t\t" ) <<
"pointSizeRange = "
288 <<
"[" << properties.limits.pointSizeRange[0] <<
", " << properties.limits.pointSizeRange[1] <<
"]"
291 <<
"sampledImageColorSampleCounts = " <<
vk::to_string( properties.limits.sampledImageColorSampleCounts ) <<
"\n";
293 <<
"sampledImageDepthSampleCounts = " <<
vk::to_string( properties.limits.sampledImageDepthSampleCounts ) <<
"\n";
295 <<
"sampledImageIntegerSampleCounts = " <<
vk::to_string( properties.limits.sampledImageIntegerSampleCounts ) <<
"\n";
297 <<
"sampledImageStencilSampleCounts = " <<
vk::to_string( properties.limits.sampledImageStencilSampleCounts ) <<
"\n";
298 std::cout << std::string(
"\t\t\t" ) <<
"sparseAddressSpaceSize = " << properties.limits.sparseAddressSpaceSize <<
"\n";
299 std::cout << std::string(
"\t\t\t" ) <<
"standardSampleLocations = " << !!properties.limits.standardSampleLocations <<
"\n";
301 <<
"storageImageSampleCounts = " <<
vk::to_string( properties.limits.storageImageSampleCounts ) <<
"\n";
302 std::cout << std::string(
"\t\t\t" ) <<
"strictLines = " << !!properties.limits.strictLines <<
"\n";
303 std::cout << std::string(
"\t\t\t" ) <<
"subPixelInterpolationOffsetBits = " << properties.limits.subPixelInterpolationOffsetBits <<
"\n";
304 std::cout << std::string(
"\t\t\t" ) <<
"subPixelPrecisionBits = " << properties.limits.subPixelPrecisionBits <<
"\n";
305 std::cout << std::string(
"\t\t\t" ) <<
"subTexelPrecisionBits = " << properties.limits.subTexelPrecisionBits <<
"\n";
306 std::cout << std::string(
"\t\t\t" ) <<
"timestampComputeAndGraphics = " << !!properties.limits.timestampComputeAndGraphics <<
"\n";
307 std::cout << std::string(
"\t\t\t" ) <<
"timestampPeriod = " << properties.limits.timestampPeriod <<
"\n";
308 std::cout << std::string(
"\t\t\t" ) <<
"viewportBoundsRange = "
309 <<
"[" << properties.limits.viewportBoundsRange[0] <<
", " << properties.limits.viewportBoundsRange[1] <<
"]"
311 std::cout << std::string(
"\t\t\t" ) <<
"viewportSubPixelBits = " << properties.limits.viewportSubPixelBits <<
"\n";
312 std::cout << std::string(
"\t\t" ) <<
"sparseProperties:\n";
313 std::cout << std::string(
"\t\t\t" ) <<
"residencyAlignedMipSize = " << !!properties.sparseProperties.residencyAlignedMipSize <<
"\n";
314 std::cout << std::string(
"\t\t\t" ) <<
"residencyNonResidentStrict = " << !!properties.sparseProperties.residencyNonResidentStrict
316 std::cout << std::string(
"\t\t\t" ) <<
"residencyStandard2DBlockShape = " << !!properties.sparseProperties.residencyStandard2DBlockShape
319 <<
"residencyStandard2DMultisampleBlockShape = " << !!properties.sparseProperties.residencyStandard2DMultisampleBlockShape <<
"\n";
320 std::cout << std::string(
"\t\t\t" ) <<
"residencyStandard3DBlockShape = " << !!properties.sparseProperties.residencyStandard3DBlockShape
324 if (
vk::su::contains( extensionProperties,
"VK_EXT_blend_operation_advanced" ) )
328 std::cout << std::string(
"\t" ) <<
"BlendOperationAdvancedProperties:\n";
344 if (
vk::su::contains( extensionProperties,
"VK_EXT_conservative_rasterization" ) )
348 std::cout << std::string(
"\t" ) <<
"ConservativeRasterizationProperties:\n";
376 std::cout << std::string(
"\t" ) <<
"CooperativeMatrixProperties:\n";
382 if (
vk::su::contains( extensionProperties,
"VK_KHR_depth_stencil_resolve" ) )
386 std::cout << std::string(
"\t" ) <<
"DepthStencilResolveProperties:\n";
396 if (
vk::su::contains( extensionProperties,
"VK_EXT_descriptor_indexing" ) )
400 std::cout << std::string(
"\t" ) <<
"DescriptorIndexingProperties:\n";
412 std::cout << std::string(
"\t\t" ) <<
"maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = "
420 std::cout << std::string(
"\t\t" ) <<
"maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = "
422 std::cout << std::string(
"\t\t" ) <<
"maxPerStageDescriptorUpdateAfterBindInputAttachments = "
424 std::cout << std::string(
"\t\t" ) <<
"maxPerStageDescriptorUpdateAfterBindSampledImages = "
429 std::cout << std::string(
"\t\t" ) <<
"maxPerStageDescriptorUpdateAfterBindStorageBuffers = "
431 std::cout << std::string(
"\t\t" ) <<
"maxPerStageDescriptorUpdateAfterBindStorageImages = "
433 std::cout << std::string(
"\t\t" ) <<
"maxPerStageDescriptorUpdateAfterBindUniformBuffers = "
443 std::cout << std::string(
"\t\t" ) <<
"shaderInputAttachmentArrayNonUniformIndexingNative = "
445 std::cout << std::string(
"\t\t" ) <<
"shaderSampledImageArrayNonUniformIndexingNative = "
447 std::cout << std::string(
"\t\t" ) <<
"shaderStorageBufferArrayNonUniformIndexingNative = "
449 std::cout << std::string(
"\t\t" ) <<
"shaderStorageImageArrayNonUniformIndexingNative = "
451 std::cout << std::string(
"\t\t" ) <<
"shaderUniformBufferArrayNonUniformIndexingNative = "
459 std::cout << std::string(
"\t" ) <<
"DiscardRectangleProperties:\n";
467 std::cout << std::string(
"\t" ) <<
"DriverProperties:\n";
469 std::cout << std::string(
"\t\t" ) <<
"driverName = " << driverProperties.
driverName <<
"\n";
470 std::cout << std::string(
"\t\t" ) <<
"driverInfo = " << driverProperties.
driverInfo <<
"\n";
478 if (
vk::su::contains( extensionProperties,
"VK_EXT_external_memory_host" ) )
482 std::cout << std::string(
"\t" ) <<
"ExternalMemoryHostProperties:\n";
487 if (
vk::su::contains( extensionProperties,
"VK_KHR_shader_float_controls" ) )
490 std::cout << std::string(
"\t" ) <<
"FloatControlsProperties:\n";
516 if (
vk::su::contains( extensionProperties,
"VK_EXT_fragment_density_map" ) )
520 std::cout << std::string(
"\t" ) <<
"FragmentDensityProperties:\n";
530 std::cout << std::string(
"\t" ) <<
"IDProperties:\n";
534 std::cout << std::string(
"\t\t" ) <<
"deviceNodeMask = " << std::hex << idProperties.
deviceNodeMask << std::dec <<
"\n";
538 if (
vk::su::contains( extensionProperties,
"VK_EXT_inline_uniform_block" ) )
542 std::cout << std::string(
"\t" ) <<
"InlineUniformBlockProperties:\n";
545 std::cout << std::string(
"\t\t" ) <<
"maxDescriptorSetUpdateAfterBindInlineUniformBlocks = "
552 std::cout << std::string(
"\t\t" ) <<
"maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = "
561 std::cout << std::string(
"\t" ) <<
"LineRasterizationProperties:\n";
567 std::cout << std::string(
"\t" ) <<
"Maintenance3Properties:\n";
575 std::cout << std::string(
"\t" ) <<
"MeshShaderProperties:\n";
582 std::cout << std::string(
"\t\t" ) <<
"maxMeshWorkGroupSize = "
589 std::cout << std::string(
"\t\t" ) <<
"maxTaskWorkGroupSize = "
598 if (
vk::su::contains( extensionProperties,
"VK_NVX_multiview_per_view_attributes" ) )
602 std::cout << std::string(
"\t" ) <<
"MultiviewPerViewAttributesProperties:\n";
608 std::cout << std::string(
"\t" ) <<
"MultiviewProperties:\n";
616 std::cout << std::string(
"\t" ) <<
"PCIBusInfoProperties:\n";
617 std::cout << std::string(
"\t\t" ) <<
"pciDomain = " << pciBusInfoProperties.
pciDomain <<
"\n";
618 std::cout << std::string(
"\t\t" ) <<
"pciBus = " << pciBusInfoProperties.
pciBus <<
"\n";
619 std::cout << std::string(
"\t\t" ) <<
"pciDevice = " << pciBusInfoProperties.
pciDevice <<
"\n";
620 std::cout << std::string(
"\t\t" ) <<
"pciFunction = " << pciBusInfoProperties.
pciFunction <<
"\n";
627 std::cout << std::string(
"\t" ) <<
"PointClippingProperties:\n";
633 std::cout << std::string(
"\t" ) <<
"ProtectedMemoryProperties:\n";
640 std::cout << std::string(
"\t" ) <<
"PushDescriptorProperties:\n";
648 std::cout << std::string(
"\t" ) <<
"RayTracingProperties:\n";
664 std::cout << std::string(
"\t" ) <<
"SampleLocationProperties:\n";
667 std::cout << std::string(
"\t\t" ) <<
"sampleLocationCoordinateRange = "
678 if (
vk::su::contains( extensionProperties,
"VK_EXT_sampler_filter_minmax" ) )
682 std::cout << std::string(
"\t" ) <<
"SamplerFilterMinmaxProperties:\n";
690 if (
vk::su::contains( extensionProperties,
"VK_AMD_shader_core_properties2" ) )
693 std::cout << std::string(
"\t" ) <<
"ShaderCoreProperties2:\n";
699 if (
vk::su::contains( extensionProperties,
"VK_AMD_shader_core_properties2" ) )
702 std::cout << std::string(
"\t" ) <<
"ShaderCoreProperties:\n";
709 std::cout << std::string(
"\t\t" ) <<
"sgprsPerSimd = " << shaderCoreProperties.
sgprsPerSimd <<
"\n";
714 std::cout << std::string(
"\t\t" ) <<
"vgprsPerSimd = " << shaderCoreProperties.
vgprsPerSimd <<
"\n";
723 std::cout << std::string(
"\t" ) <<
"ShaderSMBuiltinsProperties:\n";
724 std::cout << std::string(
"\t\t" ) <<
"shaderSMCount = " << shaderSMBuiltinsProperties.
shaderSMCount <<
"\n";
732 std::cout << std::string(
"\t" ) <<
"ShadingRateImageProperties:\n";
735 std::cout << std::string(
"\t\t" ) <<
"shadingRatePaletteSize = "
742 std::cout << std::string(
"\t" ) <<
"SubgroupProperties:\n";
749 if (
vk::su::contains( extensionProperties,
"VK_EXT_subgroup_size_control" ) )
753 std::cout << std::string(
"\t" ) <<
"SubgroupSizeControlProperties:\n";
755 std::cout << std::string(
"\t\t" ) <<
"maxSubgroupSize = " << subgroupSizeControlProperties.
maxSubgroupSize <<
"\n";
756 std::cout << std::string(
"\t\t" ) <<
"minSubgroupSize = " << subgroupSizeControlProperties.
minSubgroupSize <<
"\n";
766 std::cout << std::string(
"\t" ) <<
"TimelineSemaphoreProperties:\n";
772 if (
vk::su::contains( extensionProperties,
"VK_EXT_texel_buffer_alignment" ) )
776 std::cout << std::string(
"\t" ) <<
"TexelBufferAlignmentProperties:\n";
794 std::cout << std::string(
"\t" ) <<
"TransformFeedbackProperties:\n";
817 if (
vk::su::contains( extensionProperties,
"VK_EXT_vertex_attribute_divisor" ) )
821 std::cout << std::string(
"\t" ) <<
"VertexAttributeDivisorProperties:\n";
829 #if !defined( NDEBUG )
839 catch ( std::exception & err )
std::string decodeVendorID(uint32_t vendorID)
std::string decodeAPIVersion(uint32_t apiVersion)
std::string decodeDriverVersion(uint32_t driverVersion, uint32_t vendorID)
void cout(vk::SurfaceCapabilitiesKHR const &surfaceCapabilities)
VULKAN_HPP_NODISCARD Result createDebugUtilsMessengerEXT(const vk::DebugUtilsMessengerCreateInfoEXT *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::DebugUtilsMessengerEXT *pMessenger, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroy(const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result enumeratePhysicalDevices(uint32_t *pPhysicalDeviceCount, vk::PhysicalDevice *pPhysicalDevices, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroyDebugUtilsMessengerEXT(vk::DebugUtilsMessengerEXT messenger, const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
virtual const char * what() const VULKAN_HPP_NOEXCEPT
vk::DebugUtilsMessengerCreateInfoEXT makeDebugUtilsMessengerCreateInfoEXT()
std::ostream & operator<<(std::ostream &os, LUID const &uuid)
vk::Instance createInstance(std::string const &appName, std::string const &engineName, std::vector< std::string > const &layers, std::vector< std::string > const &extensions, uint32_t apiVersion)
bool contains(std::vector< vk::ExtensionProperties > const &extensionProperties, std::string const &extensionName)
PhysicalDeviceSubgroupSizeControlProperties PhysicalDeviceSubgroupSizeControlPropertiesEXT
VULKAN_HPP_INLINE std::string to_string(FormatFeatureFlags value)
PhysicalDeviceSamplerFilterMinmaxProperties PhysicalDeviceSamplerFilterMinmaxPropertiesEXT
PhysicalDeviceTexelBufferAlignmentProperties PhysicalDeviceTexelBufferAlignmentPropertiesEXT
PhysicalDeviceFloatControlsProperties PhysicalDeviceFloatControlsPropertiesKHR
PhysicalDeviceTimelineSemaphoreProperties PhysicalDeviceTimelineSemaphorePropertiesKHR
PhysicalDeviceDescriptorIndexingProperties PhysicalDeviceDescriptorIndexingPropertiesEXT
PhysicalDeviceInlineUniformBlockProperties PhysicalDeviceInlineUniformBlockPropertiesEXT
PhysicalDeviceDepthStencilResolveProperties PhysicalDeviceDepthStencilResolvePropertiesKHR
PhysicalDeviceDriverProperties PhysicalDeviceDriverPropertiesKHR
vk::Bool32 advancedBlendIndependentBlend
vk::Bool32 advancedBlendCorrelatedOverlap
uint32_t advancedBlendMaxColorAttachments
vk::Bool32 advancedBlendAllOperations
vk::Bool32 advancedBlendNonPremultipliedSrcColor
vk::Bool32 advancedBlendNonPremultipliedDstColor
vk::Bool32 primitiveUnderestimation
float maxExtraPrimitiveOverestimationSize
vk::Bool32 degenerateTrianglesRasterized
vk::Bool32 degenerateLinesRasterized
float primitiveOverestimationSize
float extraPrimitiveOverestimationSizeGranularity
vk::Bool32 fullyCoveredFragmentShaderInputVariable
vk::Bool32 conservativePointAndLineRasterization
vk::Bool32 conservativeRasterizationPostDepthCoverage
vk::ShaderStageFlags cooperativeMatrixSupportedStages
vk::ResolveModeFlags supportedDepthResolveModes
vk::Bool32 independentResolve
vk::ResolveModeFlags supportedStencilResolveModes
vk::Bool32 independentResolveNone
uint32_t maxPerStageUpdateAfterBindResources
uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages
uint32_t maxDescriptorSetUpdateAfterBindSampledImages
vk::Bool32 shaderStorageImageArrayNonUniformIndexingNative
uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers
vk::Bool32 shaderUniformBufferArrayNonUniformIndexingNative
uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers
uint32_t maxUpdateAfterBindDescriptorsInAllPools
uint32_t maxDescriptorSetUpdateAfterBindSamplers
uint32_t maxDescriptorSetUpdateAfterBindInputAttachments
vk::Bool32 quadDivergentImplicitLod
vk::Bool32 shaderInputAttachmentArrayNonUniformIndexingNative
vk::Bool32 shaderSampledImageArrayNonUniformIndexingNative
uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers
uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments
uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers
uint32_t maxDescriptorSetUpdateAfterBindStorageImages
vk::Bool32 shaderStorageBufferArrayNonUniformIndexingNative
uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages
uint32_t maxPerStageDescriptorUpdateAfterBindSamplers
vk::Bool32 robustBufferAccessUpdateAfterBind
uint32_t maxDiscardRectangles
vk::ArrayWrapper1D< char, VK_MAX_DRIVER_INFO_SIZE > driverInfo
vk::ConformanceVersion conformanceVersion
vk::ArrayWrapper1D< char, VK_MAX_DRIVER_NAME_SIZE > driverName
vk::DeviceSize minImportedHostPointerAlignment
vk::Bool32 shaderDenormFlushToZeroFloat16
vk::Bool32 shaderSignedZeroInfNanPreserveFloat32
vk::Bool32 shaderRoundingModeRTZFloat64
vk::Bool32 shaderDenormPreserveFloat64
vk::Bool32 shaderRoundingModeRTEFloat32
vk::Bool32 shaderSignedZeroInfNanPreserveFloat16
vk::Bool32 shaderDenormFlushToZeroFloat64
vk::Bool32 shaderDenormFlushToZeroFloat32
vk::Bool32 shaderDenormPreserveFloat32
vk::Bool32 shaderRoundingModeRTZFloat32
vk::ShaderFloatControlsIndependence denormBehaviorIndependence
vk::ShaderFloatControlsIndependence roundingModeIndependence
vk::Bool32 shaderRoundingModeRTZFloat16
vk::Bool32 shaderDenormPreserveFloat16
vk::Bool32 shaderRoundingModeRTEFloat16
vk::Bool32 shaderSignedZeroInfNanPreserveFloat64
vk::Bool32 shaderRoundingModeRTEFloat64
vk::Bool32 fragmentDensityInvocations
vk::Extent2D maxFragmentDensityTexelSize
vk::Extent2D minFragmentDensityTexelSize
vk::ArrayWrapper1D< uint8_t, VK_UUID_SIZE > deviceUUID
vk::Bool32 deviceLUIDValid
vk::ArrayWrapper1D< uint8_t, VK_UUID_SIZE > driverUUID
vk::ArrayWrapper1D< uint8_t, VK_LUID_SIZE > deviceLUID
uint32_t lineSubPixelPrecisionBits
uint32_t maxPerSetDescriptors
vk::DeviceSize maxMemoryAllocationSize
uint32_t maxTaskTotalMemorySize
uint32_t maxTaskWorkGroupInvocations
uint32_t maxMeshWorkGroupInvocations
vk::ArrayWrapper1D< uint32_t, 3 > maxTaskWorkGroupSize
vk::ArrayWrapper1D< uint32_t, 3 > maxMeshWorkGroupSize
uint32_t meshOutputPerPrimitiveGranularity
uint32_t maxMeshMultiviewViewCount
uint32_t maxDrawMeshTasksCount
uint32_t maxMeshOutputVertices
uint32_t maxMeshTotalMemorySize
uint32_t maxTaskOutputCount
uint32_t maxMeshOutputPrimitives
uint32_t meshOutputPerVertexGranularity
vk::Bool32 perViewPositionAllComponents
uint32_t maxMultiviewViewCount
uint32_t maxMultiviewInstanceIndex
vk::PointClippingBehavior pointClippingBehavior
vk::Bool32 protectedNoFault
uint32_t maxPushDescriptors
uint32_t maxRecursionDepth
uint64_t maxTriangleCount
uint32_t maxShaderGroupStride
uint32_t shaderGroupBaseAlignment
uint64_t maxGeometryCount
uint32_t maxDescriptorSetAccelerationStructures
uint64_t maxInstanceCount
uint32_t shaderGroupHandleSize
vk::SampleCountFlags sampleLocationSampleCounts
vk::Extent2D maxSampleLocationGridSize
vk::ArrayWrapper1D< float, 2 > sampleLocationCoordinateRange
vk::Bool32 variableSampleLocations
uint32_t sampleLocationSubPixelBits
vk::Bool32 filterMinmaxImageComponentMapping
vk::Bool32 filterMinmaxSingleComponentFormats
uint32_t activeComputeUnitCount
vk::ShaderCorePropertiesFlagsAMD shaderCoreFeatures
uint32_t vgprAllocationGranularity
uint32_t minSgprAllocation
uint32_t wavefrontsPerSimd
uint32_t shaderEngineCount
uint32_t simdPerComputeUnit
uint32_t maxVgprAllocation
uint32_t minVgprAllocation
uint32_t sgprAllocationGranularity
uint32_t computeUnitsPerShaderArray
uint32_t maxSgprAllocation
uint32_t shaderArraysPerEngineCount
uint32_t shaderWarpsPerSM
uint32_t shadingRateMaxCoarseSamples
uint32_t shadingRatePaletteSize
vk::Extent2D shadingRateTexelSize
vk::SubgroupFeatureFlags supportedOperations
vk::ShaderStageFlags supportedStages
vk::Bool32 quadOperationsInAllStages
uint32_t maxComputeWorkgroupSubgroups
vk::ShaderStageFlags requiredSubgroupSizeStages
vk::Bool32 storageTexelBufferOffsetSingleTexelAlignment
vk::DeviceSize uniformTexelBufferOffsetAlignmentBytes
vk::DeviceSize storageTexelBufferOffsetAlignmentBytes
vk::Bool32 uniformTexelBufferOffsetSingleTexelAlignment
uint64_t maxTimelineSemaphoreValueDifference
uint32_t maxVertexAttribDivisor
LUID(uint8_t const data[VK_LUID_SIZE])
uint8_t m_data[VK_LUID_SIZE]
#define VK_VERSION_MAJOR(version)
#define VK_VERSION_PATCH(version)
#define VK_VERSION_MINOR(version)
#define VK_API_VERSION_1_1