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

低レベル 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

SHIELD Android TV (Tegra X1) は OpenGL ES 3.2 対応

NVIDIA SHIELD Android TV はすでに OpenGL ES 3.2 の Context に対応していることがわかりました。

Android 5.1 Tegra X1 Maxwell (256)

GL_VERSION: OpenGL ES 3.2 NVIDIA 349.00
GL_RENDERER: NVIDIA Tegra
GL_VENDOR: NVIDIA Corporation
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.20

OpenGL ES 3.2 は ES 3.1 AEP が取り込まれており D3D11/OpenGL 4.x 相当の API となります。Android SDK が 3.2 に対応していないので現状ではあまり意味はありませんが、Desktop と共通のドライバが使われていることが読み取れます。

下記は Tegra K1 (Nexus 9 Driver 343.00) から追加された Extension です。

GL_EXT_discard_framebuffer
GL_EXT_draw_elements_base_vertex
GL_EXT_multi_draw_indirect
GL_EXT_post_depth_coverage
GL_EXT_raster_multisample
GL_EXT_shader_texture_lod
GL_KHR_context_flush_control
GL_KHR_robust_buffer_access_behavior
GL_KHR_robustness
GL_NV_conditional_render
GL_NV_conservative_raster
GL_NV_fill_rectangle
GL_NV_fragment_coverage_to_color
GL_NV_fragment_shader_interlock
GL_NV_framebuffer_mixed_samples
GL_NV_geometry_shader_passthrough
GL_NV_path_rendering_shared_edge
GL_NV_polygon_mode
GL_NV_sample_locations
GL_NV_sample_mask_override_coverage
GL_NV_shader_noperspective_interpolation
GL_NV_viewport_array
GL_NV_viewport_array2
GL_OES_copy_image
GL_OES_draw_buffers_indexed
GL_OES_draw_elements_base_vertex
GL_OES_texture_border_clamp
GL_OES_tessellation_point_size
GL_OES_tessellation_shader
GL_OES_texture_buffer
GL_OES_geometry_point_size
GL_OES_geometry_shader
GL_OES_gpu_shader5
GL_OES_shader_io_blocks
GL_OES_texture_view
GL_OES_primitive_bounding_box
GL_OES_texture_cube_map_array

↑ GL_NV_conservative_raster や GL_NV_fragment_shader_interlock など、Maxwell GM2xx で追加された D3D12 相当の機能も見えます。(参考)
↓ 他にも K1 との違いとして fp16 対応があります。

Precision:
 0: [15 15] 10       VS float  lowp
 1: [15 15] 10       VS float  mediump
 2: [127 127] 23     VS float  highp
 3: [31 30] 0        VS int    lowp
 4: [31 30] 0        VS int    mediump
 5: [31 30] 0        VS int    highp
 6: [15 15] 10       FS float  lowp
 7: [15 15] 10       FS float  mediump
 8: [127 127] 23     FS float  highp
 9: [31 30] 0        FS int    lowp
10: [31 30] 0        FS int    mediump
11: [31 30] 0        FS int    highp

詳細は下記に追加しました。

CPU/GPU OpenGL ES Extension (Mobile GPU)

公式サイトには Tegra X1 の CPU clock が載っていませんが、調べた限りでは 2.0GHz でした。ただし VFP Benchmark の実測では 2.1GHz 相当なので TB のような機能が働いているものと思われます。

VFP Benchmark Log

関連エントリ
Direct3D 12 GeForce GTX970 は FeatureLevel 12_1 対応、Resource Bind/Heap Tier は低い
NVIDIA SHIELD Tablet Tegra K1 は OpenGL ES 3.1 で Extension Pack 対応