VK-Z 0.1.0 0.1.2: Simple Vulkan API Capabilities and Extensions Viewer

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

Geeks3D 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:


VK-Z Vulkan API 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!):

VK-Z Vulkan error on AMD

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


VK-Z Vulkan error on AMD

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!


VK-Z with AMD Radeon driver

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):


VK-Z with AMD Radeon driver

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

12 thoughts on “VK-Z 0.1.0 0.1.2: Simple Vulkan API Capabilities and Extensions Viewer”

    1. azazello

      Fermi missing GL_NV_draw_vulkan_image extension for now – so looks like mix GL/VK code is not possible

  1. tapcio

    NOTE: AMD Vlulkan driver is only compatible with SDK 1.0.2 not latest 1.0.3.

  2. Kartenlehrling

    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]

  3. Athlonite

    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

  4. ParticlePeter

    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.

Comments are closed.