ユーザ用ツール

サイト用ツール


metal

文書の過去の版を表示しています。


Metal (iOS/OS X)

  • Apple 独自の API (Objective-C)
  • Direct3D, Vulkan 同様 CPU 負荷が小さい低レベル API (Low Overhead API)
  • シェーダー言語は C++ (GLSL でも hlsl でもない)

対応 GPU の機能グループは 4 種類

Family Group Platform PVRTCv1/ETC2 ASTC DXT(BC) CubeArray GPU
iOS GPUFamily1 PowerVR Series 6 (Rogue) iOS Apple A7 Y N N N PowerVR G6430
iOS GPUFamily2 PowerVR Series 6XT iOS Apple A8/A8X Y Y N N PowerVR GX6450/GX6850
iOS GPUFamily3 iOS Apple A9/A9X
OSX GPUFamily1 Desktop GPUs Mac OS X N N Y Y GeForce/RADEON/Intel HD Grahics

Mac OS X 10.11 El Capitan 以降で対応します。 ただし D3D10 世代の GPU 搭載機種では動きませんでした。

GPU ごとの違い

GPU Family D32F_S8 D24_S8 ThreadGroup
PowerVR G6430 iOS GPUFamily1 Y N 512/512
PowerVR GX6450/GX6850 iOS GPUFamily2 Y N 512/512
GeForce Kepler OSX GPUFamily1 Y Y 1024/1024
Intel HD Graphics OSX GPUFamily1 Y N 512/512

API Set

Metal の API は Objective-C です。 OpenGL とは違い C/C++ から直接呼び出すことはできません。

Metal Framework

MetalKit

iOS と OS X の違い

iOS 版 Metal はハードウエアが PowerVR Series 6/6XT のみなので、API 構造が PowerVR の仕様に従っています。 OS X 版も基本的に iOS 版を踏襲しているものの、 Intel HD Graphcis / GeForce / RADEON 等多くの GPU で動作させるためか、一部汎用的な仕様に改められています。

  • 使用できる PixelFormat が異なる
    • 圧縮テクスチャ
      • iOS の圧縮テクスチャは PVRTCv1, ETC2(EAC), ASTC の 3種類のみ
      • OS X は DirectX と全く同じ BC1〜BC7 (DXT) が採用
    • Depth Format の種類が多く、Depth と Stencil がパックされた D24Unorm + S8 が追加。
      • iOS 側にも Depth と Stencil を同時に設定できる D32Float + S8 が逆輸入されている。

ConsntaBuffer (UniformBuffer) は 256byte alignment が必要。(Direct3D 12 にも全く同様の制限があります)

OS X 版の OpenGL 4.x との違い

Mobile 向け API 、しかも特定の PowerVR 向けに設計された API なので若干仕様に偏りがあります。 想定 GPU が OpenGL ES 3.1 相当なので、ComputeShader はあるものの GeometryShader/Tessellator 等の OpenGL 4.x 相当の機能がありません。 OpenGL 4.x の完全な代わりとしては物足りない部分がいろいろ出てくる可能性があります。 iOS 向け Application の移植が当面の用途になるかもしれません。

Texture の転送

iOS では UMA 前提なので、他の低レベル API と違い Metal のリソース転送は即座に行われます。 OSX では Discrete GPU も存在するため DMA 転送が必要です。iOS の API との互換性を保つために、Default で Managed Resource が用いられます。 直接転送命令を意識せずに更新できるので、他の低レベル API よりも扱いが簡単になっています。 他の低レベル API の Copy に相当するのが Blt API です。これらを用いて自分でリソースを転送することもできます。

metal.1442421896.txt.gz · 最終更新: 2015/09/17 01:44 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki