日別アーカイブ: 2016年2月18日

低レベル Graphics API Vulkan 登場

新しい低レベル API Vulkan がリリースされました。

Khronos Releases Vulkan 1.0 Specification

これでようやく各プラットフォームの API が出揃ったことになります。対応は下記の通り。

               Desktop                  Mobile
-------------------------------------------------
Metal          OS X                     iOS
Direct3D 12    Windows 10
Vulkan         Windows 7~, Linux       Android

Vulkan 最大の特徴は Platform の枠を超えて利用できることです。Android, Linux だけでなく Windows でも動作します。

Windows にはすでに DirectX12 がありますが Windows 10 以降が必須となっています。Windows 7 でも使える Vulkan は Windows 環境でも十分魅力的に映るかもしれません。

すでに Beta 版ドライバが公開されているため、比較的すぐに試してみることができます。
現時点で対応している GPU は下記の通り。(分かる範囲のみ)

GeForce Kepler/Maxwell       Windows, Linux, Android
RADEON GCN                   Windows
Intel HD Graphics Gen8~     Linux

GCN すべてに対応しているかどうかは未確認です。
Mobile GPU の場合 Vulkan に対応できるのは、予想通り OpenGL ES 3.1 以降になるようです。

Intel HD Graphics と低レベル API の対応

Metal         Intel HD Graphics Gen 7~       Ivy Bridge 以降
Direct3D 12   Intel HD Graphics Gen 7.5~     Haswell 以降
Vulkan        Intel HD Graphics Gen 8~       Broadwell 以降

Vulkan が動いているかどうかは vulkaninfo コマンドで調べることができます。
GeForce の場合 driver と同時にコマンドも install されました。

下記は GeForce GTX 960 の抜粋です。

===========
VULKAN INFO
===========

Vulkan API Version: 1.0.3


~
VkPhysicalDeviceFeatures:
=========================
        robustBufferAccess                      = 1
        fullDrawIndexUint32                     = 1
        imageCubeArray                          = 1
        independentBlend                        = 1
        geometryShader                          = 1
        tessellationShader                      = 1
        sampleRateShading                       = 1
        dualSrcBlend                            = 1
        logicOp                                 = 1
        multiDrawIndirect                       = 1
        drawIndirectFirstInstance               = 1
        depthClamp                              = 1
        depthBiasClamp                          = 1
        fillModeNonSolid                        = 1
        depthBounds                             = 1
        wideLines                               = 1
        largePoints                             = 1
        textureCompressionETC2                  = 0
        textureCompressionASTC_LDR              = 0
        textureCompressionBC                    = 1
        occlusionQueryPrecise                   = 1
        pipelineStatisticsQuery                 = 1
        vertexSideEffects                       = 1
        tessellationSideEffects                 = 1
        geometrySideEffects                     = 1
        shaderImageGatherExtended               = 1
        shaderStorageImageExtendedFormats       = 1
        shaderStorageImageMultisample           = 1
        shaderStorageImageReadWithoutFormat     = 1
        shaderStorageImageWriteWithoutFormat    = 1
        shaderUniformBufferArrayDynamicIndexing = 1
        shaderSampledImageArrayDynamicIndexing  = 1
        shaderStorageBufferArrayDynamicIndexing = 1
        shaderStorageImageArrayDynamicIndexing  = 1
        shaderClipDistance                      = 1
        shaderCullDistance                      = 1
        shaderFloat64                           = 1
        shaderInt64                             = 1
        shaderInt16                             = 0
        shaderResourceResidency                 = 1
        shaderResourceMinLod                    = 1
        alphaToOne                              = 1
        sparseBinding                           = 1
        sparseResidencyBuffer                   = 1
        sparseResidencyImage2D                  = 1
        sparseResidencyImage3D                  = 1
        sparseResidency2Samples                 = 1
        sparseResidency4Samples                 = 1
        sparseResidency8Samples                 = 1
        sparseResidency16Samples                = 1
        sparseResidencyAliased                  = 1
        variableMultisampleRate                 = 1
        iheritedQueries                         = 1
~

ヘッダファイルやツール類は Open Source として GitHub からダウンロードする形になるようです。
Vulkan-LoaderAndValidationLayers に含まれています。

GitHub: The Khronos Group

ビルドもできます。build には cmake と Python3 が必要。例えば glslang の場合下記の通り。

cd glslang
mkdir build
cd build
cmake .. -G "Visual Studio 14 Win64"
start glslang.sln

関連エントリ
AEP を取り込んだ OpenGL ES 3.2 は機能面で Desktop に並ぶ, Android は Vulkan へ
3D 低レベル API の現状 Direct3D 12/Metal
CPU 負荷が低い 新しい 3D API

関連ページ
3D Low overhead API (Low Level API) Metal/D3D12/Vulkan