Perforce は Workspace 毎に改行コードの変換ルールを設定することができます。設定は下記の 5種類です。

変換 Mode 改行 code
Local -- OS 依存
Unix LF OSX/macOS 含む
Mac CR Mac OS 9 以前
Win CR+LF Windows
Shared LF

git のような変換無しのモードは特に無く、text の場合は OS (改行コード) 毎に変換が行われているようです。サーバー上の改行コードは LF で統一されています。

"Local" は OS 依存で "Unix", "Mac", "Win" の何れかと同じ意味になります。"Mac" は OSX より古い OS 用のもので、現在の OSX/macOS は "Unix" に含まれます。

実際にどのように変換されるか調べてみました。下記はテキストファイルを Perforce サーバー経由で取得し直した結果です。

Mode        Local PC      Server(p4d)    Local PC
--------------------------------------------------
Unix        CRLF     ->   CRLF     ->    CRLF
Win         CRLF     ->   LF       ->    CRLF
Shared      CRLF     ->   LF       ->    LF

Unix        LF       ->   LF       ->    LF
Win         LF       ->   LF       ->    CRLF
Shared      LF       ->   LF       ->    LF

Unix                      CRLF     ->    CRLF
Win                       CRLF     ->    CRCRLF
Shared                    CRLF     ->    CRLF

"Unix" は改行コードを LF に統一しているわけではなく、単に何もしていないだけであることがわかります。

各モードの変換の動作をまとめると下記のとおりです。

変換 Mode PC → Server Server → PC
Win 変換あり CRLF → LF 変換あり LF → CRLF
Unix 変換無し 変換無し
Shared 変換あり CRLF → LF 変換無し

Perforce の変換モードと git との比較

Perforce の変換 Mode 対応する git の設定
Win autocrlf=true
Unix autocrlf=false
Shared autocrlf=input

Perforce ではサーバー上の改行コードは LF で統一されており、CRLF のファイルが存在することを想定していないようです。"Unix" は事実上無変換モードなので、CRLF の text ファイルもそのまま Uploard することができてしまいます。"Win" 設定で受け取ると余計な CR が挿入されてしまいます。


Direct3D 12 は Metal や Vulkan と同じ低レベル API に属します。新しい API Set ですが、GPU の世代更新に合わせたというよりも Direct3D 11 世代の再定義に近いものでした。ShaderModel は 5.1 のままで、GPU の新機能対応も当初は 11/12 両方に行われています。

D3D API ShaderModel OS Windows 10
Direct3D 11.0 5.0 Vista/7
Direct3D 11.1 5.0 7/8
Direct3D 11.2 5.0 7/8.1
Direct3D 11.3 5.1 10
Direct3D 11.4 5.1 10 (1511) November Update
Direct3D 12 5.1 10
Direct3D 12 6.0 10 (1607) Anniversary Update
Direct3D 12 6.1 10 (1709) Fall Creators Update
Direct3D 12 6.2 10 (1803) April 2018 Update


Direct3D 11 の Release は Windows 7 と同時ですが、Windows 10 になっても 11.3/11.4 と更新が続いていたことがわかります。しかしながら Windows 10 1607 以降は ShaderModel 6.0 も導入されており、機能面での違いも増えてきたように思います。

コメントで Vega の ShaderModel 6.0 の対応状況について情報を教えていただいたので、あらためてそれぞれの GPU で確認してみました。新しい世代の GPU はいずれも最新ドライバで 6.1 に対応していることがわかりました。

GPU FL SM Driver
GeForce GTX 1070 Pascal 12_1 6.1 397.44
GeForce GTX 960 Maxwell 2 12_1 6.1 398.11
GeForce GTX 750 Ti Maxwell 1 11_0 6.1 398.11
RADEON Vega 56 GCN 5 Vega 12_1 6.1 18.5.1
RADEON RX 480 GCN 4 Polaris 12_0 6.1 18.5.1
RADEON R7 (A10-7870K) GCN 2 (1.1) 12_0 6.1 18.5.1
Intel HD Graphcis 530 (i7-6700K) Gen 9 12_1 6.1 23.20.16.4973


下記は ShaderModel 6.0 の wave 命令の lane 数

GPU min max total
GeForce GTX 1070 Pascal 32 32 30720
GeForce GTX 960 Maxwell 2 32 32 16384
GeForce GTX 750 Ti Maxwell 1 32 32 10240
RADEON Vega 56 GCN 5 Vega 64 64 3584
RADEON RX 480 GCN 4 Polaris 64 64 2304
RADEON R7 (A10-7870K) GCN 2 (1.1) 64 64 512
Intel HD Graphcis 530 (i7-6700K) Gen 9 8 32 768


その他 GPU 毎の対応状況の詳細は下記のページに載せています。

Direct3D 12 (DirectX 12) Windows 詳細


GPU は頂点や Pixel のように大量のデータを扱います。これは並列化が容易なので、CPU の Multi Thread と同じように複数の Shader Core で分散実行しています。

CPU と異なっているのは、一定の Thread Group (wave) 毎に実行する命令 (Instruction) を共有していることです。同じ Instruction で同じ演算を行うという意味では SIMD に近いのですが、各 Thread はそれぞれ単一の Scalar 要素にだけアクセスできるようになっています。これは SIMT と呼ばれています。

例えば 4 並列の SIMT を考えてみると、Thread 0 は SIMD Vector Register の x だけ、Thread 1 は y だけ使って演算を行っていることになります。コード上は Scalar 演算と同等です。

ShaderModel 6.0 の wave 命令では、この Thread 毎の Scalar アクセスの制限が緩和されており、ある程度相互に情報をやり取りできるようになりました。先程の例でいえば、本来 Thread 0 しかアクセスできない x の要素を Thread 1~3 からも参照できることになります。

なお ShaderModel 6.0 からは ShaderCompiler が変更されているようです。5.1 までは fxc.exe (D3DCompiler_47.dll) ですが、6.0 以降は dxc.exe (dxcompiler.dll) を使います。

dxc shader.hlsl -T ps_6_0 -E pmain -Fo shader_ps.bin


dxc でコンパイルした bytecode はそのまま PipelineState (D3D12_GRAPHICS_PIPELINE_STATE_DESC) に渡すことができます。

PS_OUT  pmain( VS_OUT pin )
{
    PS_OUT  pout;
    float2  pos= pin.Position.xy;
    if( WaveIsFirstLane() ){
        pos.x*= 1.0f/500.0f;
        pos.y*= 1.0f/500.0f;
    }
    pos= WaveReadLaneFirst( pos );
    if( WaveIsFirstLane() ){
        pout.Color= float4( 0.0f, 0.0f, 1.0f, 1.0f );
    }else{
        pout.Color= float4( pos.x, pos.y, 0.0f, 1.0f );
    }
    return  pout;
}


少々わかりにくいですが、上の PixelShader で Wave Size (Lane 数) の違いを視覚化してみたものです。同一 Wave を同じカラーで塗りつぶします。

null

↑左から RADEON Vega56, Skylake (Intel HD Graphics 530), GeForce GTX1070

Vega が最も Lane 数が多いので tile の色分けがわかりやすくなっています。真ん中の Intel HD Graphcis が最も細かいことがわかります。


関連エントリ
AMD Vega と Direct3D 12
Direct3D 12 GPU GeForce GTX 1070 Pascal と RADEON RX 480 Polaris


VR
oga at 21:20
Gear VR は Oculus Go と互換性のある VR Platform です。Samsung のスマートフォン Galaxy と組み合わせて使います。Gear VR HMD の仕様をまとめていたら予想以上に種類が多かったので分かる範囲で違いをまとめてみました。SM-R320~R325 までの 6種類あります。

Gear VR Name FOV Vol Home TypeC MC Weight
SM-R320 Gear VR Innovator Edition 2014 96度 Y - - - 379g
SM-R321 Gear VR Innovator Edition 2015 96度 Y - - - 393g
SM-R322 Gear VR 2015 96度 Y - - - 318g
SM-R323 Galaxy Gear VR 2016 101度 Y Y Y - 345g
SM-R324 Gear VR With Controller 2017 101度 Y Y Y Y 345g
SM-R325 Gear VR With Controller 2017 101度 - Y Y Y 345g

・Vol = HMD に Volume button あり
・Home = HMD に Home button あり
・TypeC = USB Type-C コネクタ対応 (MicroUSB と両対応)
・MC = Motion Controller 付属

それぞれの対応 Galaxy 一覧

Gear VR S6/S6E S7/S7E/Note5/S6E+ S8/S8+/S9/S9+ Note8 A8/A8+
SM-R320 - - - - -
SM-R321 Y - - - -
SM-R322 Y Y - - -
SM-R323 Y Y Y - ?
SM-R324 Y Y Y - ?
SM-R325 Y Y Y Y Y

・S6E,S7E = S6 Edge, S7 Edge

SM-R320 は Note 4 のみ対応で、今の GearVR / Oculus Go Application とは互換性が無いようです。よって現在利用可能な GearVR は SM-R321 以降になります。

Galaxy A8/A8+ (2018) も GearVR 対応ですが、どの HMD から使えるのか明確な仕様が見つかりませんでした。明記されているのは SM-R325 のみでした。

GearVR Motion Controller は単体で別売りしているので、付属していない SM-R323 以前の HMD でも利用可能です。

重さは HMD だけです。利用時はこれにスマートフォン本体の重さが加わります。SM-R321 が一番重いですが、このモデルだけファンが内蔵されていたようです。ちなみに Oculus Go は 470g。

スペック的には一番新しいものを選んでおけば間違いないと思われます。コントローラ付きは 16000円くらいするので、23800円で買える Oculus Go が安いことがよく分かります。

スペックは下記のページにもまとめています。

HMD VR / AR Device spec 一覧


● 仕様の参考にしたページ

https://www.samsung.com/us/business/support/mobile/virtual-reality/headsets/
http://www.galaxymobile.jp/support/skp/faq/1138409/
http://www.iodata.jp/product/samsung/other/sm-r322nzwaxjp/spec.htm
http://www.iodata.jp/product/samsung/gear/sm-r323nbkaxjp/spec.htm
http://www.iodata.jp/product/samsung/gear/sm-r324nzaaxjp/spec.htm
http://www.iodata.jp/product/samsung/gear/sm-r325nzvaxjp/spec.htm
http://www.samsung.com/uk/wearables/gear-vr-innovator-edition-r320/


関連エントリ
各種 VR HMD と Volume 調節の仕方まとめ
VR で物が大きく見えたり小さく見えたりするわけ
Oculus Go は VR ができる新しい携帯ゲーム機
Oculus Go と VR デバイスの種類


先日各種モバイルデバイスから Desktop PC までビルド時間の比較を行いました。

前回の記事はこちら: 「 ARM CPU 上の開発環境とコンパイル時間の比較 」

最初測定したときは 8 core 16 thread の Ryzen 7 1800X でビルドが 60秒かかっていました。何度試しても変わりません。3年前のスマートフォン Galaxy S6 edge が 77.8秒なので、おかしいと調べたところアンチウィルスソフトが原因であることがわかりました。uninstall した状態では 22秒まで短縮しています。2.7倍も高速になりました。

Ryzen 7 1800X Windows 10 x64 ビルド時間
追加アンチウィルスソフトあり 60.0 秒
Windows Defender 22.2 秒

uninstall しても Windows 10 では Windows Defender, Windows Firewall が有効になるため、決して無防備になるわけではありません。

実は前に仕事でも全く同じような問題がありました。ビルド時間があまりに長いために、独自にビルドシステムを作って並列度を上げたり、キャッシュ化や分散ビルドシステムを開発したりと様々な試みを行ったことがあります。あとから、アンチウィルスソフト (上記とは別のソフト) を無効化しただけで 2倍前後ビルド時間が短縮することが分かりました。

2.7倍差は大きいので、CPU の core 数を増やすよりも効果あるかもしれません。


関連エントリ
ARM CPU 上の開発環境とコンパイル時間の比較
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較


VR
oga at 21:33
VR ゲームをプレイ中に音量調節する方法は機種によって様々です。専用の音量調節ボタンが用意されている場合もありますし、Home ボタンを使って専用のシステムメニューから調節するタイプもあります。HMD をかぶったままだとリアルの操作は難しいので、操作方法をまとめてみました。

VR ヘッドセットでゲーム中にボリューム調節する方法のまとめ

Device 専用
ボタン
Sys
Menu
Volume 調節方法
HTC Vive N Y Steam ボタンを押して右下のスライダで調節
Oculus Rift 新パッケージ N Y Oculus ボタン押して Volume アイコンから変更
Oculus Rift 初期パッケージ Y Y 付属ワイヤレスリモコンの Volume ボタン
Windows MR Odyssey Y Y HMD にボタンあり
Windows MR 各種 N Y Win ボタン → Win ボタン Menu → 音量アイコン
Sony PSVR ZVR2 新型 Y N HMD にボタンあり
Sony PSVR ZVR1 Y N ケーブルの途中にリモコンあり
Gear VR SM-R320~R324 Y N HMD にボタンあり
Gear VR SM-R325 Y N Motion Controller の Volume ボタン
Oculus Go Y Y HMD の Volume ボタン
Daydream Y N Motion Controller の Volume ボタン
Vive Focus Y ? Motion Controller の Volume ボタン


ソフトウエア設定のみ HTC Vive, Oculus Rift, Windows MR (Odysseyを除く)
コントローラに音量あり Daydream, GearVR, Vive Focus
HMD に音量ボタンあり PSVR ZVR2, GearVR SM-R320~R324, Odyssey, Oculus Go, Mirage Solo
リモコンのボタンあり PSVR ZVR1, Oculus Rift 初期パッケージ

専用のボタンが用意されている場合でも、HMD を付けたままだとボタンの位置をなかなか探せないことがあります。システムメニューが音量調節に対応している場合は、そちらを使った方がわかりやすいかもしれません。

Windows MR は音量調節に少々手間がかかります。Windows ボタンで Home に戻ったあと、もう一度 Windows ボタンでスタートメニューを表示させてから右上の音量アイコンで変更します。ボイスコマンドにも対応しているらしいのですが、Windows MR の大半は HMD に標準でマイクが付いていないので残念です。

Home からゲームに復帰するにも、メニューからアプリのアイコンを探すか配置してあるウィンドウまで移動してクリックしなければならず思ったより簡単ではありませんでした。SteamVR のタイトルを遊んでいる間はスティック押し込みで SteamVR の Steam Menu が使えるので、こちらの方がおすすめです。ゲームにも簡単に戻れます。

GearVR は使用する HMD によって異なっているようです。SM-R324 から Motion Controller が付属するようになり、SM-R325 から HMD 側のボリュームボタンが無くなっています。

Daydream は Controller 側の音量ボタンを使用します。メニューでは調節できませんがミュートがありました。


関連エントリ
VR で物が大きく見えたり小さく見えたりするわけ
Oculus Go は VR ができる新しい携帯ゲーム機
Oculus Go と VR デバイスの種類


| 次のページ(日付が古い方向)>>