To start Vulkan programming, there’s nothing better than coding a capabilities and extensions viewer.
Yesterday Khronos has officially launched the first version of Vulkan, the new API for cross-platform graphics programming and computing.
Of course, I will add Vulkan support in GeeXLab and in GpuTest (by the way, GpuTest will be renamed…). But before that, playing with a simple information viewer is an easy way to have a first contact with Vulkan entities: instance, devices…
I appreciate Vulkan C API. It’s easy to use and you can setup a C/C++ project in no time once you have found the Vulkan headers (it took me some time to find them, I don’t know why they are not in the Vulkan homepage, like OpenGL ones). And where are simple code samples? All those big launching projects with ton of files, classes, helpers, abstraction layers, I find them a bit messy… I want simple C-based examples!
VK-Z is my first Vulkan project: a capabilities and extensions viewer. VK-Z creates a Vulkan instance and fetches all possible data from that instance (extensions, physical devices). On some aspects, Vulkan looks like OpenCL: a Vulkan instance has some extensions (like an OpenCL platform) and each physical device belonging to an instance has its own extensions and capabilities (like OpenCL compute devices).
VK-Z 0.1.2 Download

The changelog is available HERE.
VK-Z version 0.1.2 works fine with AMD Radeon drivers.
VK-Z homepage can be found HERE.
VK-Z is a command line utility and is currently available for Windows platforms only (32 and 64-bit). I will code the Linux version as soon as possible…
Using VK-Z is really simple: open a terminal in VK-Z folder and run vkz32.exe or vkz64.exe. On my system with a GeForce GTX 960 and a GTX 750, VK-Z displays the following information:

And the capabilities ????
Since there are lot of caps per device, they are not displayed by default. To display the hardware capabilities (device limits) of every physical device, just add the -a command line parameter:
vkz64 -a
Here is the full report of my system with NVIDIA R356.39 Vulkan drivers:
========================================================== VK-Z 0.1.0 ========================================================== Vulkan capabilities and extensions viewer (C)2016 Geeks3D - http://www.geeks3d.com/vkz/ Instance extensions: 3 - 1/ VK_KHR_surface (spec version: 0.0.25) - 2/ VK_KHR_win32_surface (spec version: 0.0.5) - 3/ VK_EXT_debug_report (spec version: 0.0.1) # Vulkan devices: 2 [ Device 1 ]-------------------------------------- - Device name: GTX 750 - DeviceID: 10DE-1381 - Raw driver version: 1493811200 - NVIDIA driver version: R356... - Vulkan API version: 1.0.3 - Device type: VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU - Memory heap count: 2 heap 0 - size: 1024 MB heap 1 - size: 16357 MB - Device extensions: 2 1/ VK_KHR_swapchain (spec version: 0.0.67) 2/ VK_NV_glsl_shader (spec version: 0.0.1) - Device limits: maxImageDimension1D: 16384 maxImageDimension2D: 16384 maxImageDimension3D: 2048 maxImageDimensionCube: 16384 maxImageArrayLayers: 2048 maxTexelBufferElements: 134217728 maxUniformBufferRange: 65536 maxStorageBufferRange: 2147483647 maxPushConstantsSize: 256 maxMemoryAllocationCount: 4096 maxSamplerAllocationCount: 4000 bufferImageGranularity: 65536 sparseAddressSpaceSize: 18446744073709551615 maxBoundDescriptorSets: 4 maxPerStageDescriptorSamplers: 4000 maxPerStageDescriptorUniformBuffers: 12 maxPerStageDescriptorSampledImages: 8192 maxPerStageDescriptorStorageImages: 8192 maxPerStageDescriptorInputAttachments: 8 maxPerStageResources: 24612 maxDescriptorSetSamplers: 4000 maxDescriptorSetUniformBuffers: 72 maxDescriptorSetUniformBuffersDynamic: 72 maxDescriptorSetStorageBuffers: 96 maxDescriptorSetStorageBuffersDynamic: 96 maxDescriptorSetSampledImages: 49152 maxDescriptorSetStorageImages: 49152 maxDescriptorSetInputAttachments: 8 maxVertexInputAttributes: 16 maxVertexInputBindings: 16 maxVertexInputAttributeOffset: 2047 maxVertexInputBindingStride: 2048 maxVertexOutputComponents: 128 maxTessellationGenerationLevel: 64 maxTessellationPatchSize: 32 maxTessellationControlPerVertexInputComponents: 128 maxTessellationControlPerVertexOutputComponents: 128 maxTessellationControlPerPatchOutputComponents: 120 maxTessellationControlTotalOutputComponents: 4216 maxTessellationEvaluationInputComponents: 128 maxTessellationEvaluationOutputComponents: 128 maxGeometryShaderInvocations: 32 maxGeometryInputComponents: 128 maxGeometryOutputComponents: 128 maxGeometryOutputVertices: 1024 maxGeometryTotalOutputComponents: 1024 maxFragmentInputComponents: 128 maxFragmentOutputAttachments: 8 maxFragmentDualSrcAttachments: 1 maxFragmentCombinedOutputResources: 16 maxComputeSharedMemorySize: 49152 maxComputeWorkGroupCount: [2147483647; 65535; 65535] maxComputeWorkGroupInvocations: 1536 maxComputeWorkGroupSize: [1536; 1024; 64] subPixelPrecisionBits: 8 subTexelPrecisionBits: 8 mipmapPrecisionBits: 8 maxDrawIndexedIndexValue: 4294967295 maxDrawIndirectCount: 4294967295 maxSamplerLodBias: 15.000000 maxSamplerAnisotropy: 16.000000 maxViewports: 16 maxViewportDimensions: 16384 x 16384 viewportBoundsRange: -32768.000000 x 32768.000000 viewportSubPixelBits: 8 minMemoryMapAlignment: 64 minTexelBufferOffsetAlignment: 16 minUniformBufferOffsetAlignment: 256 minStorageBufferOffsetAlignment: 32 minTexelOffset: 4294967288 maxTexelOffset: 7 minTexelGatherOffset: 4294967264 maxTexelGatherOffset: 31 minInterpolationOffset: -0.500000 maxInterpolationOffset: 0.437500 subPixelInterpolationOffsetBits: 4 maxFramebufferWidth: 16384 maxFramebufferHeight: 16384 maxFramebufferLayers: 2048 framebufferColorSampleCounts: 15 framebufferDepthSampleCounts: 15 framebufferStencilSampleCounts: 15 framebufferNoAttachmentsSampleCounts: 15 maxColorAttachments: 8 sampledImageColorSampleCounts: 15 sampledImageIntegerSampleCounts: 15 sampledImageDepthSampleCounts: 15 sampledImageStencilSampleCounts: 15 storageImageSampleCounts: 15 maxSampleMaskWords: 1 timestampComputeAndGraphics: 1 timestampPeriod: 1.000000 maxClipDistances: 8 maxCullDistances: 8 maxCombinedClipAndCullDistances: 8 discreteQueuePriorities: 2 pointSizeRange: [1.000000 ; 189.875000] lineWidthRange: [0.500000 ; 10.000000] pointSizeGranularity: 0.125000 lineWidthGranularity: 0.125000 strictLines: 1 standardSampleLocations: 1 optimalBufferCopyOffsetAlignment: 1 optimalBufferCopyRowPitchAlignment: 1 nonCoherentAtomSize: 64 [ Device 2 ]-------------------------------------- - Device name: GTX 960 - DeviceID: 10DE-1401 - Raw driver version: 1493811200 - NVIDIA driver version: R356... - Vulkan API version: 1.0.3 - Device type: VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU - Memory heap count: 2 heap 0 - size: 4096 MB heap 1 - size: 16357 MB - Device extensions: 2 1/ VK_KHR_swapchain (spec version: 0.0.67) 2/ VK_NV_glsl_shader (spec version: 0.0.1) - Device limits: maxImageDimension1D: 16384 maxImageDimension2D: 16384 maxImageDimension3D: 2048 maxImageDimensionCube: 16384 maxImageArrayLayers: 2048 maxTexelBufferElements: 134217728 maxUniformBufferRange: 65536 maxStorageBufferRange: 2147483647 maxPushConstantsSize: 256 maxMemoryAllocationCount: 4096 maxSamplerAllocationCount: 4000 bufferImageGranularity: 65536 sparseAddressSpaceSize: 18446744073709551615 maxBoundDescriptorSets: 4 maxPerStageDescriptorSamplers: 4000 maxPerStageDescriptorUniformBuffers: 12 maxPerStageDescriptorSampledImages: 8192 maxPerStageDescriptorStorageImages: 8192 maxPerStageDescriptorInputAttachments: 8 maxPerStageResources: 24612 maxDescriptorSetSamplers: 4000 maxDescriptorSetUniformBuffers: 72 maxDescriptorSetUniformBuffersDynamic: 72 maxDescriptorSetStorageBuffers: 96 maxDescriptorSetStorageBuffersDynamic: 96 maxDescriptorSetSampledImages: 49152 maxDescriptorSetStorageImages: 49152 maxDescriptorSetInputAttachments: 8 maxVertexInputAttributes: 16 maxVertexInputBindings: 16 maxVertexInputAttributeOffset: 2047 maxVertexInputBindingStride: 2048 maxVertexOutputComponents: 128 maxTessellationGenerationLevel: 64 maxTessellationPatchSize: 32 maxTessellationControlPerVertexInputComponents: 128 maxTessellationControlPerVertexOutputComponents: 128 maxTessellationControlPerPatchOutputComponents: 120 maxTessellationControlTotalOutputComponents: 4216 maxTessellationEvaluationInputComponents: 128 maxTessellationEvaluationOutputComponents: 128 maxGeometryShaderInvocations: 32 maxGeometryInputComponents: 128 maxGeometryOutputComponents: 128 maxGeometryOutputVertices: 1024 maxGeometryTotalOutputComponents: 1024 maxFragmentInputComponents: 128 maxFragmentOutputAttachments: 8 maxFragmentDualSrcAttachments: 1 maxFragmentCombinedOutputResources: 16 maxComputeSharedMemorySize: 49152 maxComputeWorkGroupCount: [2147483647; 65535; 65535] maxComputeWorkGroupInvocations: 1536 maxComputeWorkGroupSize: [1536; 1024; 64] subPixelPrecisionBits: 8 subTexelPrecisionBits: 8 mipmapPrecisionBits: 8 maxDrawIndexedIndexValue: 4294967295 maxDrawIndirectCount: 4294967295 maxSamplerLodBias: 15.000000 maxSamplerAnisotropy: 16.000000 maxViewports: 16 maxViewportDimensions: 16384 x 16384 viewportBoundsRange: -32768.000000 x 32768.000000 viewportSubPixelBits: 8 minMemoryMapAlignment: 64 minTexelBufferOffsetAlignment: 16 minUniformBufferOffsetAlignment: 256 minStorageBufferOffsetAlignment: 32 minTexelOffset: 4294967288 maxTexelOffset: 7 minTexelGatherOffset: 4294967264 maxTexelGatherOffset: 31 minInterpolationOffset: -0.500000 maxInterpolationOffset: 0.437500 subPixelInterpolationOffsetBits: 4 maxFramebufferWidth: 16384 maxFramebufferHeight: 16384 maxFramebufferLayers: 2048 framebufferColorSampleCounts: 15 framebufferDepthSampleCounts: 15 framebufferStencilSampleCounts: 31 framebufferNoAttachmentsSampleCounts: 15 maxColorAttachments: 8 sampledImageColorSampleCounts: 15 sampledImageIntegerSampleCounts: 15 sampledImageDepthSampleCounts: 15 sampledImageStencilSampleCounts: 31 storageImageSampleCounts: 15 maxSampleMaskWords: 1 timestampComputeAndGraphics: 1 timestampPeriod: 1.000000 maxClipDistances: 8 maxCullDistances: 8 maxCombinedClipAndCullDistances: 8 discreteQueuePriorities: 2 pointSizeRange: [1.000000 ; 189.875000] lineWidthRange: [0.500000 ; 10.000000] pointSizeGranularity: 0.125000 lineWidthGranularity: 0.125000 strictLines: 1 standardSampleLocations: 1 optimalBufferCopyOffsetAlignment: 1 optimalBufferCopyRowPitchAlignment: 1 nonCoherentAtomSize: 64 --- More news about Vulkan: http://www.geeks3d.com/category/technologies/vulkan/
On a testbed with AMD Radeon and their beta Vulkan driver, VK-Z didn’t work as expected (surprising!):

I thought it was my Vulkan code that had an issue, but the vulkaninfo utility shows the same thing:

And what is that deprecated function? vkGetInstanceProcAddr is already deprecated ???
There are similar error report with AMD drivers like this one on AnandTech…
I think we have to wait for another alpha/beta Vulkan driver, unless there is the same bug in VK-Z and vulkaninfo (which is possible)…
(2016.02.18) UPDATE 1 – v0.1.2 fixes the AMD bug
VK-Z 0.1.2 fixes the bug with AMD Radeon driver. A new command line option has been added to force the version of the Vulkan API to 1.0.2: -102. AMD drivers supports only Vulkan 1.0.2, not yet Vulkan 1.0.3 like NVIDIA drivers.
Thanks tapcio for the tip!
Let’s try:
vkz64 -102
Yeah!

And now the complete report:
vkz64 -102 -a
========================================================== VK-Z 0.1.2 ========================================================== Vulkan capabilities and extensions viewer (C)2016 Geeks3D - http://www.geeks3d.com/vkz/ Instance extensions: 4 - 1/ VK_KHR_swapchain (spec version: 0.0.67) - 2/ VK_KHR_surface (spec version: 0.0.25) - 3/ VK_KHR_win32_surface (spec version: 0.0.5) - 4/ VK_EXT_debug_report (spec version: 0.0.1) # Vulkan devices: 1 [ Device 1 ]-------------------------------------- - Device name: AMD Radeon R9 200 / HD 7900 Series - DeviceID: 1002-6798 - Raw driver version: 1 - Vulkan API version: 0.0.1 - Device type: VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU - Memory heap count: 3 heap 0 - size: 2816 MB heap 1 - size: 256 MB heap 2 - size: 3804 MB - Device extensions: 1 1/ VK_KHR_swapchain (spec version: 0.0.67) - Device limits: maxImageDimension1D: 16384 maxImageDimension2D: 16384 maxImageDimension3D: 8192 maxImageDimensionCube: 16384 maxImageArrayLayers: 2048 maxTexelBufferElements: 4294967295 maxUniformBufferRange: 4294967295 maxStorageBufferRange: 4294967295 maxPushConstantsSize: 128 maxMemoryAllocationCount: 4096 maxSamplerAllocationCount: 1048576 bufferImageGranularity: 1 sparseAddressSpaceSize: 68719476735 maxBoundDescriptorSets: 32 maxPerStageDescriptorSamplers: 4294967295 maxPerStageDescriptorUniformBuffers: 4294967295 maxPerStageDescriptorSampledImages: 4294967295 maxPerStageDescriptorStorageImages: 4294967295 maxPerStageDescriptorInputAttachments: 4294967295 maxPerStageResources: 4294967295 maxDescriptorSetSamplers: 4294967295 maxDescriptorSetUniformBuffers: 4294967295 maxDescriptorSetUniformBuffersDynamic: 8 maxDescriptorSetStorageBuffers: 4294967295 maxDescriptorSetStorageBuffersDynamic: 8 maxDescriptorSetSampledImages: 4294967295 maxDescriptorSetStorageImages: 4294967295 maxDescriptorSetInputAttachments: 4294967295 maxVertexInputAttributes: 4294967295 maxVertexInputBindings: 32 maxVertexInputAttributeOffset: 4294967295 maxVertexInputBindingStride: 16383 maxVertexOutputComponents: 128 maxTessellationGenerationLevel: 64 maxTessellationPatchSize: 32 maxTessellationControlPerVertexInputComponents: 128 maxTessellationControlPerVertexOutputComponents: 128 maxTessellationControlPerPatchOutputComponents: 120 maxTessellationControlTotalOutputComponents: 4096 maxTessellationEvaluationInputComponents: 128 maxTessellationEvaluationOutputComponents: 128 maxGeometryShaderInvocations: 127 maxGeometryInputComponents: 128 maxGeometryOutputComponents: 128 maxGeometryOutputVertices: 1024 maxGeometryTotalOutputComponents: 16384 maxFragmentInputComponents: 64 maxFragmentOutputAttachments: 8 maxFragmentDualSrcAttachments: 1 maxFragmentCombinedOutputResources: 4294967295 maxComputeSharedMemorySize: 32768 maxComputeWorkGroupCount: [65535; 65535; 65535] maxComputeWorkGroupInvocations: 256 maxComputeWorkGroupSize: [256; 256; 256] subPixelPrecisionBits: 8 subTexelPrecisionBits: 8 mipmapPrecisionBits: 8 maxDrawIndexedIndexValue: 4294967295 maxDrawIndirectCount: 4294967295 maxSamplerLodBias: 15.996094 maxSamplerAnisotropy: 16.000000 maxViewports: 16 maxViewportDimensions: 16384 x 16384 viewportBoundsRange: -16384.000000 x 16383.000000 viewportSubPixelBits: 8 minMemoryMapAlignment: 64 minTexelBufferOffsetAlignment: 1 minUniformBufferOffsetAlignment: 16 minStorageBufferOffsetAlignment: 4 minTexelOffset: 4294967232 maxTexelOffset: 63 minTexelGatherOffset: -32 maxTexelGatherOffset: 31 minInterpolationOffset: -2.000000 maxInterpolationOffset: 2.000000 subPixelInterpolationOffsetBits: 8 maxFramebufferWidth: 16384 maxFramebufferHeight: 16384 maxFramebufferLayers: 2048 framebufferColorSampleCounts: 15 framebufferDepthSampleCounts: 15 framebufferStencilSampleCounts: 15 framebufferNoAttachmentsSampleCounts: 0 maxColorAttachments: 8 sampledImageColorSampleCounts: 0 sampledImageIntegerSampleCounts: 0 sampledImageDepthSampleCounts: 0 sampledImageStencilSampleCounts: 15 storageImageSampleCounts: 0 maxSampleMaskWords: 1 timestampComputeAndGraphics: 0 timestampPeriod: 37.037037 maxClipDistances: 8 maxCullDistances: 8 maxCombinedClipAndCullDistances: 8 discreteQueuePriorities: 2 pointSizeRange: [0.000000 ; 8191.875000] lineWidthRange: [0.000000 ; 8191.875000] pointSizeGranularity: 0.125000 lineWidthGranularity: 0.125000 strictLines: 0 standardSampleLocations: 1 optimalBufferCopyOffsetAlignment: 1 optimalBufferCopyRowPitchAlignment: 1 nonCoherentAtomSize: 128 --- More news about Vulkan: http://www.geeks3d.com/category/technologies/vulkan/
(2016.02.18) UPDATE 2 – AMD Radeon driver Feb17
AMD has fixed some bugs and their new Vulkan Radeon driver (you can download it from this page) labeled with Feb17 works properly with VK-Z (no need to add the -102 param):

The Vuklan API version is not correct, it should be 1.0.3 (see NVIDIA driver).
VK-Z changelog
v0.1.2 - 2016.02.18 ------------------- + added command line parameter -102 to use Vulkan API version 1.0.2 v0.1.1 - 2016.02.17 ------------------- * fixed a bug in the display of the following device limit: minTexelGatherOffset v0.1.0 - 2016.02.17 ------------------- . first public release
http://vulkan.gpuinfo.org/displayreport.php?id=41
Fermi has Vulkan support eventhough Nvidia says only Kepler and Maxwell is supported for Vulkan.
Fermi missing GL_NV_draw_vulkan_image extension for now – so looks like mix GL/VK code is not possible
There is a bug in vkz64 at least at minTexelGatherOffset: according to https://www.khronos.org/registry/vulkan/specs/1.0/apispec.html it is int32_t (so the correct value should be -32?). Similar for other variables…
Thanks, I’m fixing the bug…
Bug fixed in v0.1.1 😉
vulkaninfo works for me with AMD Vulkan driver on R7 360:
http://pastebin.com/mt0QrVfA
NOTE: AMD Vlulkan driver is only compatible with SDK 1.0.2 not latest 1.0.3.
Thanks!
Now VK-Z 0.1.2 works fine with AMD Radeon drivers!
The new driver update run now the AMD on the old version vk.1.01
[QUOTE] Highlights von … AMD-Vulkan-Radeon-Software-Beta-Feb17
VulkanSDK v1.0.3.1 – Compatibility issues addressed
The Talos Principle – SSAO Fixes[/QUOTE]
Yes the new driver Feb17 works fine.
All I get is an “access denied ” msg before hit any key at the pause no matter which bat file I run
or Windows can not find the specified file
I think you’re displaying the extension spec versions wrong. As per Specification (currently 1.0.11) in chapter 30.2. “Extended Functionality – Extensions” it is mentioned that:
“specVersion is the version of this extension. It is an integer, incremented with backward compatible changes.”
contrary to chapter 30.1 “Extended Functionality – Layers”:
“specVersion is the Vulkan version the layer was written to, encoded as described in the API Version Numbers and Semantics section.”
I might be wrong but the way I understand it is that for Extensions specVersion there is only one integral number.