Vulkan-Hpp
PhysicalDeviceFeatures.cpp
Go to the documentation of this file.
1 // Copyright(c) 2019, NVIDIA CORPORATION. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 // VulkanHpp Samples : PhysicalDeviceFeatures
16 // Get the fine-grained features of the physical devices that can be supported by an implementation.
17 
18 // ignore warning 4503: decorated name length exceeded, name was truncated
19 #if defined( _MSC_VER )
20 # pragma warning( disable : 4503 )
21 #elif defined( __GNUC__ )
22 // don't know how to switch off that warning here
23 #else
24 // unknow compiler... just ignore the warnings for yourselves ;)
25 #endif
26 
27 #include "../utils/utils.hpp"
28 
29 #include <vector>
30 
31 static char const * AppName = "PhysicalDeviceFeatures";
32 static char const * EngineName = "Vulkan.hpp";
33 
34 int main( int /*argc*/, char ** /*argv*/ )
35 {
36  try
37  {
38  vk::Instance instance = vk::su::createInstance( AppName, EngineName, {}, {}, VK_API_VERSION_1_1 );
39 #if !defined( NDEBUG )
41 #endif
42 
43  // enumerate the physicalDevices
44  std::vector<vk::PhysicalDevice> physicalDevices = instance.enumeratePhysicalDevices();
45 
46  /* VULKAN_KEY_START */
47 
48  std::cout << std::boolalpha;
49  for ( size_t i = 0; i < physicalDevices.size(); i++ )
50  {
51  // some features are only valid, if a corresponding extension is available!
52  std::vector<vk::ExtensionProperties> extensionProperties = physicalDevices[i].enumerateDeviceExtensionProperties();
53 
54  std::cout << "PhysicalDevice " << i << " :\n";
55  auto features2 = physicalDevices[i]
56  .getFeatures2<vk::PhysicalDeviceFeatures2,
107  vk::PhysicalDeviceFeatures const & features = features2.get<vk::PhysicalDeviceFeatures2>().features;
108  std::cout << "\tFeatures:\n";
109  std::cout << "\t\talphaToOne : " << !!features.alphaToOne << "\n";
110  std::cout << "\t\tdepthBiasClamp : " << !!features.depthBiasClamp << "\n";
111  std::cout << "\t\tdepthBounds : " << !!features.depthBounds << "\n";
112  std::cout << "\t\tdepthClamp : " << !!features.depthClamp << "\n";
113  std::cout << "\t\tdrawIndirectFirstInstance : " << !!features.drawIndirectFirstInstance << "\n";
114  std::cout << "\t\tdualSrcBlend : " << !!features.dualSrcBlend << "\n";
115  std::cout << "\t\tfillModeNonSolid : " << !!features.fillModeNonSolid << "\n";
116  std::cout << "\t\tfragmentStoresAndAtomics : " << !!features.fragmentStoresAndAtomics << "\n";
117  std::cout << "\t\tfullDrawIndexUint32 : " << !!features.fullDrawIndexUint32 << "\n";
118  std::cout << "\t\tgeometryShader : " << !!features.geometryShader << "\n";
119  std::cout << "\t\timageCubeArray : " << !!features.imageCubeArray << "\n";
120  std::cout << "\t\tindependentBlend : " << !!features.independentBlend << "\n";
121  std::cout << "\t\tinheritedQueries : " << !!features.inheritedQueries << "\n";
122  std::cout << "\t\tlargePoints : " << !!features.largePoints << "\n";
123  std::cout << "\t\tlogicOp : " << !!features.logicOp << "\n";
124  std::cout << "\t\tmultiDrawIndirect : " << !!features.multiDrawIndirect << "\n";
125  std::cout << "\t\tmultiViewport : " << !!features.multiViewport << "\n";
126  std::cout << "\t\tocclusionQueryPrecise : " << !!features.occlusionQueryPrecise << "\n";
127  std::cout << "\t\tpipelineStatisticsQuery : " << !!features.pipelineStatisticsQuery << "\n";
128  std::cout << "\t\trobustBufferAccess : " << !!features.robustBufferAccess << "\n";
129  std::cout << "\t\tsamplerAnisotropy : " << !!features.samplerAnisotropy << "\n";
130  std::cout << "\t\tsampleRateShading : " << !!features.sampleRateShading << "\n";
131  std::cout << "\t\tshaderClipDistance : " << !!features.shaderClipDistance << "\n";
132  std::cout << "\t\tshaderCullDistance : " << !!features.shaderCullDistance << "\n";
133  std::cout << "\t\tshaderFloat64 : " << !!features.shaderFloat64 << "\n";
134  std::cout << "\t\tshaderImageGatherExtended : " << !!features.shaderImageGatherExtended << "\n";
135  std::cout << "\t\tshaderInt16 : " << !!features.shaderInt16 << "\n";
136  std::cout << "\t\tshaderInt64 : " << !!features.shaderInt64 << "\n";
137  std::cout << "\t\tshaderResourceMinLod : " << !!features.shaderResourceMinLod << "\n";
138  std::cout << "\t\tshaderResourceResidency : " << !!features.shaderResourceResidency << "\n";
139  std::cout << "\t\tshaderSampledImageArrayDynamicIndexing : " << !!features.shaderSampledImageArrayDynamicIndexing << "\n";
140  std::cout << "\t\tshaderStorageBufferArrayDynamicIndexing : " << !!features.shaderStorageBufferArrayDynamicIndexing << "\n";
141  std::cout << "\t\tshaderStorageImageArrayDynamicIndexing : " << !!features.shaderStorageImageArrayDynamicIndexing << "\n";
142  std::cout << "\t\tshaderStorageImageExtendedFormats : " << !!features.shaderStorageImageExtendedFormats << "\n";
143  std::cout << "\t\tshaderStorageImageMultisample : " << !!features.shaderStorageImageMultisample << "\n";
144  std::cout << "\t\tshaderStorageImageReadWithoutFormat : " << !!features.shaderStorageImageReadWithoutFormat << "\n";
145  std::cout << "\t\tshaderStorageImageWriteWithoutFormat : " << !!features.shaderStorageImageWriteWithoutFormat << "\n";
146  std::cout << "\t\tshaderTessellationAndGeometryPointSize : " << !!features.shaderTessellationAndGeometryPointSize << "\n";
147  std::cout << "\t\tshaderUniformBufferArrayDynamicIndexing : " << !!features.shaderUniformBufferArrayDynamicIndexing << "\n";
148  std::cout << "\t\tsparseBinding : " << !!features.sparseBinding << "\n";
149  std::cout << "\t\tsparseResidency16Samples : " << !!features.sparseResidency16Samples << "\n";
150  std::cout << "\t\tsparseResidency2Samples : " << !!features.sparseResidency2Samples << "\n";
151  std::cout << "\t\tsparseResidency4Samples : " << !!features.sparseResidency4Samples << "\n";
152  std::cout << "\t\tsparseResidency8Samples : " << !!features.sparseResidency8Samples << "\n";
153  std::cout << "\t\tsparseResidencyAliased : " << !!features.sparseResidencyAliased << "\n";
154  std::cout << "\t\tsparseResidencyBuffer : " << !!features.sparseResidencyBuffer << "\n";
155  std::cout << "\t\tsparseResidencyImage2D : " << !!features.sparseResidencyImage2D << "\n";
156  std::cout << "\t\tsparseResidencyImage3D : " << !!features.sparseResidencyImage3D << "\n";
157  std::cout << "\t\ttessellationShader : " << !!features.tessellationShader << "\n";
158  std::cout << "\t\ttextureCompressionASTC_LDR : " << !!features.textureCompressionASTC_LDR << "\n";
159  std::cout << "\t\ttextureCompressionBC : " << !!features.textureCompressionBC << "\n";
160  std::cout << "\t\ttextureCompressionETC2 : " << !!features.textureCompressionETC2 << "\n";
161  std::cout << "\t\tvariableMultisampleRate : " << !!features.variableMultisampleRate << "\n";
162  std::cout << "\t\tvertexPipelineStoresAndAtomics : " << !!features.vertexPipelineStoresAndAtomics << "\n";
163  std::cout << "\t\twideLines : " << !!features.wideLines << "\n";
164  std::cout << "\n";
165 
166  vk::PhysicalDevice16BitStorageFeatures const & sixteenBitStorageFeatures = features2.get<vk::PhysicalDevice16BitStorageFeatures>();
167  std::cout << "\t16BitStorageFeatures:\n";
168  std::cout << "\t\tstorageBuffer16BitAccess : " << !!sixteenBitStorageFeatures.storageBuffer16BitAccess << "\n";
169  std::cout << "\t\tstorageInputOutput16 : " << !!sixteenBitStorageFeatures.storageInputOutput16 << "\n";
170  std::cout << "\t\tstoragePushConstant16 : " << !!sixteenBitStorageFeatures.storagePushConstant16 << "\n";
171  std::cout << "\t\tuniformAndStorageBuffer16BitAccess : " << !!sixteenBitStorageFeatures.uniformAndStorageBuffer16BitAccess << "\n";
172  std::cout << "\n";
173 
174  if ( vk::su::contains( extensionProperties, "VK_KHR_8bit_storage" ) )
175  {
176  vk::PhysicalDevice8BitStorageFeaturesKHR const & eightBitStorageFeatures = features2.get<vk::PhysicalDevice8BitStorageFeaturesKHR>();
177  std::cout << "\t8BitStorageFeatures:\n";
178  std::cout << "\t\tstorageBuffer8BitAccess : " << !!eightBitStorageFeatures.storageBuffer8BitAccess << "\n";
179  std::cout << "\t\tstoragePushConstant8 : " << !!eightBitStorageFeatures.storagePushConstant8 << "\n";
180  std::cout << "\t\tuniformAndStorageBuffer8BitAccess : " << !!eightBitStorageFeatures.uniformAndStorageBuffer8BitAccess << "\n";
181  std::cout << "\n";
182  }
183 
184  if ( vk::su::contains( extensionProperties, "VK_EXT_astc_decode_mode" ) )
185  {
186  vk::PhysicalDeviceASTCDecodeFeaturesEXT const & astcDecodeFeatures = features2.get<vk::PhysicalDeviceASTCDecodeFeaturesEXT>();
187  std::cout << "\tASTCDecodeFeature:\n";
188  std::cout << "\t\tdecodeModeSharedExponent : " << !!astcDecodeFeatures.decodeModeSharedExponent << "\n";
189  std::cout << "\n";
190  }
191 
192  if ( vk::su::contains( extensionProperties, "VK_EXT_blend_operation_advanced" ) )
193  {
194  vk::PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & blendOperationAdvancedFeatures =
196  std::cout << "\tBlendOperationAdvancedFeatures:\n";
197  std::cout << "\t\tadvancedBlendCoherentOperations : " << !!blendOperationAdvancedFeatures.advancedBlendCoherentOperations << "\n";
198  std::cout << "\n";
199  }
200 
201  if ( vk::su::contains( extensionProperties, "VK_EXT_buffer_device_address" ) )
202  {
203  vk::PhysicalDeviceBufferDeviceAddressFeaturesEXT const & bufferDeviceAddressFeatures =
205  std::cout << "\tBufferDeviceAddressFeatures:\n";
206  std::cout << "\t\tbufferDeviceAddress : " << !!bufferDeviceAddressFeatures.bufferDeviceAddress << "\n";
207  std::cout << "\t\tbufferDeviceAddressCaptureReplay : " << !!bufferDeviceAddressFeatures.bufferDeviceAddressCaptureReplay << "\n";
208  std::cout << "\t\tbufferDeviceAddressMultiDevice : " << !!bufferDeviceAddressFeatures.bufferDeviceAddressMultiDevice << "\n";
209  std::cout << "\n";
210  }
211 
212  if ( vk::su::contains( extensionProperties, "VK_AMD_device_coherent_memory" ) )
213  {
214  vk::PhysicalDeviceCoherentMemoryFeaturesAMD const & coherentMemoryFeatures = features2.get<vk::PhysicalDeviceCoherentMemoryFeaturesAMD>();
215  std::cout << "\tCoherentMemoryFeatures:\n";
216  std::cout << "\t\tdeviceCoherentMemory : " << !!coherentMemoryFeatures.deviceCoherentMemory << "\n";
217  std::cout << "\n";
218  }
219 
220  if ( vk::su::contains( extensionProperties, "VK_NV_compute_shader_derivatives" ) )
221  {
222  vk::PhysicalDeviceComputeShaderDerivativesFeaturesNV const & computeShaderDerivativesFeatures =
224  std::cout << "\tComputeShaderDerivativeFeatures:\n";
225  std::cout << "\t\tcomputeDerivativeGroupLinear : " << !!computeShaderDerivativesFeatures.computeDerivativeGroupLinear << "\n";
226  std::cout << "\t\tcomputeDerivativeGroupQuads : " << !!computeShaderDerivativesFeatures.computeDerivativeGroupQuads << "\n";
227  std::cout << "\n";
228  }
229 
230  if ( vk::su::contains( extensionProperties, "VK_EXT_conditional_rendering" ) )
231  {
232  vk::PhysicalDeviceConditionalRenderingFeaturesEXT const & conditionalRenderingFeatures =
234  std::cout << "\tConditionalRenderingFeatures:\n";
235  std::cout << "\t\tconditionalRendering : " << !!conditionalRenderingFeatures.conditionalRendering << "\n";
236  std::cout << "\t\tinheritedConditionalRendering : " << !!conditionalRenderingFeatures.inheritedConditionalRendering << "\n";
237  std::cout << "\n";
238  }
239 
240  if ( vk::su::contains( extensionProperties, "VK_NV_cooperative_matrix" ) )
241  {
242  vk::PhysicalDeviceCooperativeMatrixFeaturesNV const & cooperativeMatrixFeatures = features2.get<vk::PhysicalDeviceCooperativeMatrixFeaturesNV>();
243  std::cout << "\tCooperativeMatrixFeatures:\n";
244  std::cout << "\t\tcooperativeMatrix : " << !!cooperativeMatrixFeatures.cooperativeMatrix << "\n";
245  std::cout << "\t\tcooperativeMatrixRobustBufferAccess : " << !!cooperativeMatrixFeatures.cooperativeMatrixRobustBufferAccess << "\n";
246  std::cout << "\n";
247  }
248 
249  if ( vk::su::contains( extensionProperties, "VK_NV_corner_sampled_image" ) )
250  {
251  vk::PhysicalDeviceCornerSampledImageFeaturesNV const & cornerSampledImageFeatures = features2.get<vk::PhysicalDeviceCornerSampledImageFeaturesNV>();
252  std::cout << "\tCornerSampledImageFeatures:\n";
253  std::cout << "\t\tcornerSampledImage : " << !!cornerSampledImageFeatures.cornerSampledImage << "\n";
254  std::cout << "\n";
255  }
256 
257  if ( vk::su::contains( extensionProperties, "VK_NV_coverage_reduction_mode" ) )
258  {
259  vk::PhysicalDeviceCoverageReductionModeFeaturesNV const & coverageReductionModeFeatures =
261  std::cout << "\tCoverageReductionModeFeatures:\n";
262  std::cout << "\t\tcoverageReductionMode : " << !!coverageReductionModeFeatures.coverageReductionMode << "\n";
263  std::cout << "\n";
264  }
265 
266  if ( vk::su::contains( extensionProperties, "VK_NV_dedicated_allocation_image_aliasing" ) )
267  {
268  vk::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & dedicatedAllocationImageAliasingFeatures =
270  std::cout << "\tDedicatedAllocationAliasingFeatures:\n";
271  std::cout << "\t\tdedicatedAllocationImageAliasing : " << !!dedicatedAllocationImageAliasingFeatures.dedicatedAllocationImageAliasing << "\n";
272  std::cout << "\n";
273  }
274 
275  if ( vk::su::contains( extensionProperties, "VK_EXT_depth_clip_enable" ) )
276  {
277  vk::PhysicalDeviceDepthClipEnableFeaturesEXT const & depthClipEnabledFeatures = features2.get<vk::PhysicalDeviceDepthClipEnableFeaturesEXT>();
278  std::cout << "\tDepthClipEnabledFeatures:\n";
279  std::cout << "\t\tdepthClipEnable : " << !!depthClipEnabledFeatures.depthClipEnable << "\n";
280  std::cout << "\n";
281  }
282 
283  if ( vk::su::contains( extensionProperties, "VK_EXT_descriptor_indexing" ) )
284  {
285  vk::PhysicalDeviceDescriptorIndexingFeaturesEXT const & descriptorIndexingFeatures = features2.get<vk::PhysicalDeviceDescriptorIndexingFeaturesEXT>();
286  std::cout << "\tDescriptorIndexingFeatures:\n";
287  std::cout << "\t\tdescriptorBindingPartiallyBound : " << !!descriptorIndexingFeatures.descriptorBindingPartiallyBound << "\n";
288  std::cout << "\t\tdescriptorBindingSampledImageUpdateAfterBind : " << !!descriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind
289  << "\n";
290  std::cout << "\t\tdescriptorBindingStorageBufferUpdateAfterBind : " << !!descriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind
291  << "\n";
292  std::cout << "\t\tdescriptorBindingStorageImageUpdateAfterBind : " << !!descriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind
293  << "\n";
294  std::cout << "\t\tdescriptorBindingStorageTexelBufferUpdateAfterBind : "
295  << !!descriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind << "\n";
296  std::cout << "\t\tdescriptorBindingUniformBufferUpdateAfterBind : " << !!descriptorIndexingFeatures.descriptorBindingUniformBufferUpdateAfterBind
297  << "\n";
298  std::cout << "\t\tdescriptorBindingUniformTexelBufferUpdateAfterBind : "
299  << !!descriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind << "\n";
300  std::cout << "\t\tdescriptorBindingUpdateUnusedWhilePending : " << !!descriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending
301  << "\n";
302  std::cout << "\t\tdescriptorBindingVariableDescriptorCount : " << !!descriptorIndexingFeatures.descriptorBindingVariableDescriptorCount
303  << "\n";
304  std::cout << "\t\truntimeDescriptorArray : " << !!descriptorIndexingFeatures.runtimeDescriptorArray << "\n";
305  std::cout << "\t\tshaderInputAttachmentArrayDynamicIndexing : " << !!descriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing
306  << "\n";
307  std::cout << "\t\tshaderInputAttachmentArrayNonUniformIndexing : " << !!descriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing
308  << "\n";
309  std::cout << "\t\tshaderSampledImageArrayNonUniformIndexing : " << !!descriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing
310  << "\n";
311  std::cout << "\t\tshaderStorageBufferArrayNonUniformIndexing : " << !!descriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing
312  << "\n";
313  std::cout << "\t\tshaderStorageImageArrayNonUniformIndexing : " << !!descriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing
314  << "\n";
315  std::cout << "\t\tshaderStorageTexelBufferArrayDynamicIndexing : " << !!descriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing
316  << "\n";
317  std::cout << "\t\tshaderStorageTexelBufferArrayNonUniformIndexing : "
318  << !!descriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing << "\n";
319  std::cout << "\t\tshaderUniformBufferArrayNonUniformIndexing : " << !!descriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing
320  << "\n";
321  std::cout << "\t\tshaderUniformTexelBufferArrayDynamicIndexing : " << !!descriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing
322  << "\n";
323  std::cout << "\t\tshaderUniformTexelBufferArrayNonUniformIndexing : "
324  << !!descriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing << "\n";
325  std::cout << "\n";
326  }
327 
328  if ( vk::su::contains( extensionProperties, "VK_NV_scissor_exclusive" ) )
329  {
330  vk::PhysicalDeviceExclusiveScissorFeaturesNV const & exclusiveScissorFeatures = features2.get<vk::PhysicalDeviceExclusiveScissorFeaturesNV>();
331  std::cout << "\tExclusiveScissorFeatures:\n";
332  std::cout << "\t\texclusiveScissor : " << !!exclusiveScissorFeatures.exclusiveScissor << "\n";
333  std::cout << "\n";
334  }
335 
336  if ( vk::su::contains( extensionProperties, "VK_EXT_fragment_density_map" ) )
337  {
338  vk::PhysicalDeviceFragmentDensityMapFeaturesEXT const & fragmentDensityMapFeatures = features2.get<vk::PhysicalDeviceFragmentDensityMapFeaturesEXT>();
339  std::cout << "\tFragmentDensityMapFeatures:\n";
340  std::cout << "\t\tfragmentDensityMap : " << !!fragmentDensityMapFeatures.fragmentDensityMap << "\n";
341  std::cout << "\t\tfragmentDensityMapDynamic : " << !!fragmentDensityMapFeatures.fragmentDensityMapDynamic << "\n";
342  std::cout << "\t\tfragmentDensityMapNonSubsampledImages : " << !!fragmentDensityMapFeatures.fragmentDensityMapNonSubsampledImages << "\n";
343  std::cout << "\n";
344  }
345 
346  if ( vk::su::contains( extensionProperties, "VK_NV_fragment_shader_barycentric" ) )
347  {
348  vk::PhysicalDeviceFragmentShaderBarycentricFeaturesNV const & fragmentShaderBarycentricFeatures =
350  std::cout << "\tFragmentShaderBarycentricFeatures:\n";
351  std::cout << "\t\tfragmentShaderBarycentric : " << !!fragmentShaderBarycentricFeatures.fragmentShaderBarycentric << "\n";
352  std::cout << "\n";
353  }
354 
355  if ( vk::su::contains( extensionProperties, "VK_EXT_fragment_shader_interlock" ) )
356  {
357  vk::PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & fragmentShaderInterlockFeatures =
359  std::cout << "\tFragmentShaderInterlockFeatures:\n";
360  std::cout << "\t\tfragmentShaderPixelInterlock : " << !!fragmentShaderInterlockFeatures.fragmentShaderPixelInterlock << "\n";
361  std::cout << "\t\tfragmentShaderSampleInterlock : " << !!fragmentShaderInterlockFeatures.fragmentShaderSampleInterlock << "\n";
362  std::cout << "\t\tfragmentShaderShadingRateInterlock : " << !!fragmentShaderInterlockFeatures.fragmentShaderShadingRateInterlock << "\n";
363  std::cout << "\n";
364  }
365 
366  if ( vk::su::contains( extensionProperties, "VK_EXT_host_query_reset" ) )
367  {
368  vk::PhysicalDeviceHostQueryResetFeaturesEXT const & hostQueryResetFeatures = features2.get<vk::PhysicalDeviceHostQueryResetFeaturesEXT>();
369  std::cout << "\tHostQueryResetFeatures:\n";
370  std::cout << "\t\thostQueryReset : " << !!hostQueryResetFeatures.hostQueryReset << "\n";
371  std::cout << "\n";
372  }
373 
374  if ( vk::su::contains( extensionProperties, "VK_KHR_imageless_framebuffer" ) )
375  {
376  vk::PhysicalDeviceImagelessFramebufferFeaturesKHR const & imagelessFramebufferFeatures =
378  std::cout << "\tImagelessFramebufferFeatures:\n";
379  std::cout << "\t\timagelessFramebuffer : " << !!imagelessFramebufferFeatures.imagelessFramebuffer << "\n";
380  std::cout << "\n";
381  }
382 
383  if ( vk::su::contains( extensionProperties, "VK_EXT_index_type_uint8" ) )
384  {
385  vk::PhysicalDeviceIndexTypeUint8FeaturesEXT const & indexTypeUint8Features = features2.get<vk::PhysicalDeviceIndexTypeUint8FeaturesEXT>();
386  std::cout << "\tIndexTypeUint8Features:\n";
387  std::cout << "\t\tindexTypeUint8 : " << !!indexTypeUint8Features.indexTypeUint8 << "\n";
388  std::cout << "\n";
389  }
390 
391  if ( vk::su::contains( extensionProperties, "VK_EXT_inline_uniform_block" ) )
392  {
393  vk::PhysicalDeviceInlineUniformBlockFeaturesEXT const & inlineUniformBlockFeatures = features2.get<vk::PhysicalDeviceInlineUniformBlockFeaturesEXT>();
394  std::cout << "\tInlineUniformBlockFeatures:\n";
395  std::cout << "\t\tdescriptorBindingInlineUniformBlockUpdateAfterBind : "
396  << !!inlineUniformBlockFeatures.descriptorBindingInlineUniformBlockUpdateAfterBind << "\n";
397  std::cout << "\t\tinlineUniformBlock : " << !!inlineUniformBlockFeatures.inlineUniformBlock << "\n";
398  std::cout << "\n";
399  }
400 
401  if ( vk::su::contains( extensionProperties, "VK_EXT_line_rasterization" ) )
402  {
403  vk::PhysicalDeviceLineRasterizationFeaturesEXT const & lineRasterizationFeatures = features2.get<vk::PhysicalDeviceLineRasterizationFeaturesEXT>();
404  std::cout << "\tLineRasterizationFeatures:\n";
405  std::cout << "\t\tbresenhamLines : " << !!lineRasterizationFeatures.bresenhamLines << "\n";
406  std::cout << "\t\trectangularLines : " << !!lineRasterizationFeatures.rectangularLines << "\n";
407  std::cout << "\t\tsmoothLines : " << !!lineRasterizationFeatures.smoothLines << "\n";
408  std::cout << "\t\tstippledBresenhamLines : " << !!lineRasterizationFeatures.stippledBresenhamLines << "\n";
409  std::cout << "\t\tstippledRectangularLines : " << !!lineRasterizationFeatures.stippledRectangularLines << "\n";
410  std::cout << "\t\tstippledSmoothLines : " << !!lineRasterizationFeatures.stippledSmoothLines << "\n";
411  std::cout << "\n";
412  }
413 
414  if ( vk::su::contains( extensionProperties, "VK_EXT_memory_priority" ) )
415  {
416  vk::PhysicalDeviceMemoryPriorityFeaturesEXT const & memoryPriorityFeatures = features2.get<vk::PhysicalDeviceMemoryPriorityFeaturesEXT>();
417  std::cout << "\tMemoryPriorityFeatures:\n";
418  std::cout << "\t\tmemoryPriority : " << !!memoryPriorityFeatures.memoryPriority << "\n";
419  std::cout << "\n";
420  }
421 
422  if ( vk::su::contains( extensionProperties, "VK_NV_mesh_shader" ) )
423  {
424  vk::PhysicalDeviceMeshShaderFeaturesNV const & meshShaderFeatures = features2.get<vk::PhysicalDeviceMeshShaderFeaturesNV>();
425  std::cout << "\tMeshShaderFeatures:\n";
426  std::cout << "\t\tmeshShader : " << !!meshShaderFeatures.meshShader << "\n";
427  std::cout << "\t\ttaskShader : " << !!meshShaderFeatures.taskShader << "\n";
428  std::cout << "\n";
429  }
430 
431  vk::PhysicalDeviceMultiviewFeatures const & multiviewFeatures = features2.get<vk::PhysicalDeviceMultiviewFeatures>();
432  std::cout << "\tMultiviewFeatures:\n";
433  std::cout << "\t\tmultiview : " << !!multiviewFeatures.multiview << "\n";
434  std::cout << "\t\tmultiviewGeometryShader : " << !!multiviewFeatures.multiviewGeometryShader << "\n";
435  std::cout << "\t\tmultiviewTessellationShader : " << !!multiviewFeatures.multiviewTessellationShader << "\n";
436  std::cout << "\n";
437 
438  if ( vk::su::contains( extensionProperties, "VK_KHR_pipeline_executable_properties" ) )
439  {
440  vk::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & pipelineExecutablePropertiesFeatures =
442  std::cout << "\tPipelineExectuablePropertiesFeatures:\n";
443  std::cout << "\t\tpipelineExecutableInfo : " << !!pipelineExecutablePropertiesFeatures.pipelineExecutableInfo << "\n";
444  std::cout << "\n";
445  }
446 
447  vk::PhysicalDeviceProtectedMemoryFeatures const & protectedMemoryFeatures = features2.get<vk::PhysicalDeviceProtectedMemoryFeatures>();
448  std::cout << "\tProtectedMemoryFeatures:\n";
449  std::cout << "\t\tprotectedMemory : " << !!protectedMemoryFeatures.protectedMemory << "\n";
450  std::cout << "\n";
451 
452  if ( vk::su::contains( extensionProperties, "VK_NV_representative_fragment_test" ) )
453  {
454  vk::PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & representativeFragmentTestFeatures =
456  std::cout << "\tRepresentativeFragmentTestFeatures:\n";
457  std::cout << "\t\trepresentativeFragmentTest : " << !!representativeFragmentTestFeatures.representativeFragmentTest << "\n";
458  std::cout << "\n";
459  }
460 
461  vk::PhysicalDeviceSamplerYcbcrConversionFeatures const & samplerYcbcrConversionFeatures =
463  std::cout << "\tSamplerYcbcrConversionFeatures:\n";
464  std::cout << "\t\tsamplerYcbcrConversion : " << !!samplerYcbcrConversionFeatures.samplerYcbcrConversion << "\n";
465  std::cout << "\n";
466 
467  if ( vk::su::contains( extensionProperties, "VK_EXT_scalar_block_layout" ) )
468  {
469  vk::PhysicalDeviceScalarBlockLayoutFeaturesEXT const & scalarBlockLayoutFeatures = features2.get<vk::PhysicalDeviceScalarBlockLayoutFeaturesEXT>();
470  std::cout << "\tScalarBlockLayoutFeatures:\n";
471  std::cout << "\t\tscalarBlockLayout : " << !!scalarBlockLayoutFeatures.scalarBlockLayout << "\n";
472  std::cout << "\n";
473  }
474 
475  if ( vk::su::contains( extensionProperties, "VK_KHR_shader_atomic_int64" ) )
476  {
477  vk::PhysicalDeviceShaderAtomicInt64FeaturesKHR const & shaderAtomicInt64Features = features2.get<vk::PhysicalDeviceShaderAtomicInt64FeaturesKHR>();
478  std::cout << "\tShaderAtomicInt64Features:\n";
479  std::cout << "\t\tshaderBufferInt64Atomics : " << !!shaderAtomicInt64Features.shaderBufferInt64Atomics << "\n";
480  std::cout << "\t\tshaderSharedInt64Atomics : " << !!shaderAtomicInt64Features.shaderSharedInt64Atomics << "\n";
481  std::cout << "\n";
482  }
483 
484  if ( vk::su::contains( extensionProperties, "VK_EXT_shader_demote_to_helper_invocation" ) )
485  {
486  vk::PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & shaderDemoteToHelperInvocationFeatures =
488  std::cout << "\tShaderDemoteToHelperInvocationFeatures:\n";
489  std::cout << "\t\tshaderDemoteToHelperInvocation : " << !!shaderDemoteToHelperInvocationFeatures.shaderDemoteToHelperInvocation << "\n";
490  std::cout << "\n";
491  }
492 
493  vk::PhysicalDeviceShaderDrawParametersFeatures const & shaderDrawParametersFeature = features2.get<vk::PhysicalDeviceShaderDrawParametersFeatures>();
494  std::cout << "\tShaderDrawParametersFeature:\n";
495  std::cout << "\t\tshaderDrawParameters : " << !!shaderDrawParametersFeature.shaderDrawParameters << "\n";
496  std::cout << "\n";
497 
498  if ( vk::su::contains( extensionProperties, "VK_KHR_shader_float16_int8" ) )
499  {
500  vk::PhysicalDeviceShaderFloat16Int8FeaturesKHR const & shaderFloat16Int8Features = features2.get<vk::PhysicalDeviceShaderFloat16Int8FeaturesKHR>();
501  std::cout << "\tShaderFloat16Int8Features:\n";
502  std::cout << "\t\tshaderFloat16 : " << !!shaderFloat16Int8Features.shaderFloat16 << "\n";
503  std::cout << "\t\tshaderInt8 : " << !!shaderFloat16Int8Features.shaderInt8 << "\n";
504  std::cout << "\n";
505  }
506 
507  if ( vk::su::contains( extensionProperties, "VK_NV_shader_image_footprint" ) )
508  {
509  vk::PhysicalDeviceShaderImageFootprintFeaturesNV const & shaderImageFootprintFeatures =
511  std::cout << "\tShaderImageFootprintFeatures:\n";
512  std::cout << "\t\timageFootprint : " << !!shaderImageFootprintFeatures.imageFootprint << "\n";
513  std::cout << "\n";
514  }
515 
516  if ( vk::su::contains( extensionProperties, "VK_INTEL_shader_integer_functions2" ) )
517  {
518  vk::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & shaderIntegerFunctions2Features =
520  std::cout << "\tShaderIntegerFunctions2Features:\n";
521  std::cout << "\t\tshaderIntegerFunctions2 : " << !!shaderIntegerFunctions2Features.shaderIntegerFunctions2 << "\n";
522  std::cout << "\n";
523  }
524 
525  if ( vk::su::contains( extensionProperties, "VK_NV_shader_sm_builtins" ) )
526  {
527  vk::PhysicalDeviceShaderSMBuiltinsFeaturesNV const & shaderSMBuiltinsFeatures = features2.get<vk::PhysicalDeviceShaderSMBuiltinsFeaturesNV>();
528  std::cout << "\tShaderSMBuiltinsFeatures:\n";
529  std::cout << "\t\tshaderSMBuiltins : " << !!shaderSMBuiltinsFeatures.shaderSMBuiltins << "\n";
530  std::cout << "\n";
531  }
532 
533  if ( vk::su::contains( extensionProperties, "VK_KHR_shader_subgroup_extended_types" ) )
534  {
535  vk::PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR const & shaderSubgroupExtendedTypesFeatures =
537  std::cout << "\tShaderSubgroupExtendedTypeFeatures:\n";
538  std::cout << "\t\tshaderSubgroupExtendedTypes : " << !!shaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes << "\n";
539  std::cout << "\n";
540  }
541 
542  if ( vk::su::contains( extensionProperties, "VK_NV_shading_rate_image" ) )
543  {
544  vk::PhysicalDeviceShadingRateImageFeaturesNV const & shadingRateImageFeatures = features2.get<vk::PhysicalDeviceShadingRateImageFeaturesNV>();
545  std::cout << "\tShadingRateImageFeatures:\n";
546  std::cout << "\t\tshadingRateCoarseSampleOrder : " << !!shadingRateImageFeatures.shadingRateCoarseSampleOrder << "\n";
547  std::cout << "\t\tshadingRateImage : " << !!shadingRateImageFeatures.shadingRateImage << "\n";
548  std::cout << "\n";
549  }
550 
551  if ( vk::su::contains( extensionProperties, "VK_EXT_subgroup_size_control" ) )
552  {
553  vk::PhysicalDeviceSubgroupSizeControlFeaturesEXT const & subgroupSizeControlFeatures =
555  std::cout << "\tSubgroupSizeControlFeatures:\n";
556  std::cout << "\t\tcomputeFullSubgroups : " << !!subgroupSizeControlFeatures.computeFullSubgroups << "\n";
557  std::cout << "\t\tsubgroupSizeControl : " << !!subgroupSizeControlFeatures.subgroupSizeControl << "\n";
558  std::cout << "\n";
559  }
560 
561  if ( vk::su::contains( extensionProperties, "VK_EXT_texel_buffer_alignment" ) )
562  {
563  vk::PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & texelBufferAlignmentFeatures =
565  std::cout << "\tTexelBufferAlignmentFeatures:\n";
566  std::cout << "\t\ttexelBufferAlignment : " << !!texelBufferAlignmentFeatures.texelBufferAlignment << "\n";
567  std::cout << "\n";
568  }
569 
570  if ( vk::su::contains( extensionProperties, "VK_EXT_texture_compression_astc_hdr" ) )
571  {
572  vk::PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & textureCompressionASTCHDRFeatures =
574  std::cout << "\tTextureCompressionASTCHHRFeatures:\n";
575  std::cout << "\t\ttextureCompressionASTC_HDR : " << !!textureCompressionASTCHDRFeatures.textureCompressionASTC_HDR << "\n";
576  std::cout << "\n";
577  }
578 
579  if ( vk::su::contains( extensionProperties, "VK_KHR_timeline_semaphore" ) )
580  {
581  vk::PhysicalDeviceTimelineSemaphoreFeaturesKHR const & timelineSemaphoreFeatures = features2.get<vk::PhysicalDeviceTimelineSemaphoreFeaturesKHR>();
582  std::cout << "\tTimelineSemaphoreFeatures:\n";
583  std::cout << "\t\ttimelineSemaphore :" << !!timelineSemaphoreFeatures.timelineSemaphore << "\n";
584  std::cout << "\n";
585  }
586 
587  if ( vk::su::contains( extensionProperties, "VK_EXT_transform_feedback" ) )
588  {
589  vk::PhysicalDeviceTransformFeedbackFeaturesEXT const & transformFeedbackFeatures = features2.get<vk::PhysicalDeviceTransformFeedbackFeaturesEXT>();
590  std::cout << "\tTransformFeedbackFeatures:\n";
591  std::cout << "\t\tgeometryStreams : " << !!transformFeedbackFeatures.geometryStreams << "\n";
592  std::cout << "\t\ttransformFeedback : " << !!transformFeedbackFeatures.transformFeedback << "\n";
593  std::cout << "\n";
594  }
595 
596  if ( vk::su::contains( extensionProperties, "VK_KHR_uniform_buffer_standard_layout" ) )
597  {
598  vk::PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR const & uniformBufferStandardLayoutFeatures =
600  std::cout << "\tUniformBufferStandardLayoutFeatures:\n";
601  std::cout << "\t\tuniformBufferStandardLayout : " << !!uniformBufferStandardLayoutFeatures.uniformBufferStandardLayout << "\n";
602  std::cout << "\n";
603  }
604 
605  if ( vk::su::contains( extensionProperties, "VK_KHR_variable_pointers" ) )
606  {
607  vk::PhysicalDeviceVariablePointersFeatures const & variablePointersFeatures = features2.get<vk::PhysicalDeviceVariablePointersFeatures>();
608  std::cout << "\tVariablePointersFeatures:\n";
609  std::cout << "\t\tvariablePointers : " << !!variablePointersFeatures.variablePointers << "\n";
610  std::cout << "\t\tvariablePointersStorageBuffer : " << !!variablePointersFeatures.variablePointersStorageBuffer << "\n";
611  std::cout << "\n";
612  }
613 
614  if ( vk::su::contains( extensionProperties, "VK_EXT_vertex_attribute_divisor" ) )
615  {
616  vk::PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & vertexAttributeDivisorFeatures =
618  std::cout << "\tVertexAttributeDivisorFeature:\n";
619  std::cout << "\t\tvertexAttributeInstanceRateDivisor : " << !!vertexAttributeDivisorFeatures.vertexAttributeInstanceRateDivisor << "\n";
620  std::cout << "\t\tvertexAttributeInstanceRateZeroDivisor : " << !!vertexAttributeDivisorFeatures.vertexAttributeInstanceRateZeroDivisor << "\n";
621  std::cout << "\n";
622  }
623 
624  if ( vk::su::contains( extensionProperties, "VK_KHR_vulkan_memory_model" ) )
625  {
626  vk::PhysicalDeviceVulkanMemoryModelFeaturesKHR const & vulkanMemoryModelFeatures = features2.get<vk::PhysicalDeviceVulkanMemoryModelFeaturesKHR>();
627  std::cout << "\tVulkanMemoryModelFeatures:\n";
628  std::cout << "\t\tvulkanMemoryModel : " << !!vulkanMemoryModelFeatures.vulkanMemoryModel << "\n";
629  std::cout << "\t\tvulkanMemoryModelAvailabilityVisibilityChains : " << !!vulkanMemoryModelFeatures.vulkanMemoryModelAvailabilityVisibilityChains
630  << "\n";
631  std::cout << "\t\tvulkanMemoryModelDeviceScope : " << !!vulkanMemoryModelFeatures.vulkanMemoryModelDeviceScope << "\n";
632  std::cout << "\n";
633  }
634 
635  if ( vk::su::contains( extensionProperties, "VK_KHR_sampler_ycbcr_conversion" ) )
636  {
637  vk::PhysicalDeviceYcbcrImageArraysFeaturesEXT const & ycbcrImageArraysFeatures = features2.get<vk::PhysicalDeviceYcbcrImageArraysFeaturesEXT>();
638  std::cout << "\tYcbcrImageArraysFeatures:\n";
639  std::cout << "\t\tycbcrImageArrays : " << !!ycbcrImageArraysFeatures.ycbcrImageArrays << "\n";
640  std::cout << "\n";
641  }
642  }
643 
644  /* VULKAN_KEY_END */
645 
646 #if !defined( NDEBUG )
647  instance.destroyDebugUtilsMessengerEXT( debugUtilsMessenger );
648 #endif
649  instance.destroy();
650  }
651  catch ( vk::SystemError & err )
652  {
653  std::cout << "vk::SystemError: " << err.what() << std::endl;
654  exit( -1 );
655  }
656  catch ( std::exception & err )
657  {
658  std::cout << "std::exception: " << err.what() << std::endl;
659  exit( -1 );
660  }
661  catch ( ... )
662  {
663  std::cout << "unknown error\n";
664  exit( -1 );
665  }
666  return 0;
667 }
int main(int, char **)
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
Definition: vulkan.hpp:6206
vk::DebugUtilsMessengerCreateInfoEXT makeDebugUtilsMessengerCreateInfoEXT()
Definition: utils.cpp:1025
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)
Definition: utils.cpp:279
bool contains(std::vector< vk::ExtensionProperties > const &extensionProperties, std::string const &extensionName)
Definition: utils.cpp:54
PhysicalDeviceShaderSubgroupExtendedTypesFeatures PhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR
PhysicalDeviceScalarBlockLayoutFeatures PhysicalDeviceScalarBlockLayoutFeaturesEXT
PhysicalDeviceShaderDemoteToHelperInvocationFeatures PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
PhysicalDeviceFragmentShaderBarycentricFeaturesKHR PhysicalDeviceFragmentShaderBarycentricFeaturesNV
PhysicalDeviceSubgroupSizeControlFeatures PhysicalDeviceSubgroupSizeControlFeaturesEXT
PhysicalDeviceImagelessFramebufferFeatures PhysicalDeviceImagelessFramebufferFeaturesKHR
PhysicalDevice8BitStorageFeatures PhysicalDevice8BitStorageFeaturesKHR
PhysicalDeviceUniformBufferStandardLayoutFeatures PhysicalDeviceUniformBufferStandardLayoutFeaturesKHR
PhysicalDeviceTextureCompressionASTCHDRFeatures PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
PhysicalDeviceVertexAttributeDivisorFeaturesKHR PhysicalDeviceVertexAttributeDivisorFeaturesEXT
PhysicalDeviceVulkanMemoryModelFeatures PhysicalDeviceVulkanMemoryModelFeaturesKHR
PhysicalDeviceDescriptorIndexingFeatures PhysicalDeviceDescriptorIndexingFeaturesEXT
PhysicalDeviceInlineUniformBlockFeatures PhysicalDeviceInlineUniformBlockFeaturesEXT
PhysicalDeviceShaderAtomicInt64Features PhysicalDeviceShaderAtomicInt64FeaturesKHR
PhysicalDeviceHostQueryResetFeatures PhysicalDeviceHostQueryResetFeaturesEXT
PhysicalDeviceShaderFloat16Int8Features PhysicalDeviceShaderFloat16Int8FeaturesKHR
PhysicalDeviceTimelineSemaphoreFeatures PhysicalDeviceTimelineSemaphoreFeaturesKHR
#define VK_API_VERSION_1_1
Definition: vulkan_core.h:4854