浮動小数点 – チートシート
必要になった時によく忘れているので纏めておきます。
keyword
- IEEE754 : 浮動小数点に関する標準
- 符号部
- 仮数部
- 指数部
- NaN : Not a Number
- bfloat16 : IEE754に準じたハーフフロート
- 単精度: 1-8-23bit
- 桁落ち
ざっくりだが指数部と仮数部で数値を表現するため23bit分しか小数点部分を表現できない
R10G10B10A2_Unormのダンプ結果
LE CPU での r,g,b,a = 1.f,0.f,0.f,1.fの時のダンプ値 0xc0 00 03 ff
メモリ上では LSB c0 00 03 ff MSB となる。
ビット列にしてコンポーネント毎に区切ってみる。
A B G R
LSB 11| 00 0000 0000| 0000 0000 00 | 11 1111 1111 MSB
これを GPU にロードする時に 8bit 単位ではなくコンポーネント単位で入れ替わるのは何か変じゃないですか?。R10G10B10A2_Unorm のメモリ上の表現はどう定義されていましたっけ?->ググっても出てこないのでメモリレイアウトは DXGI では定義していないんだと思う。
参考:VK_FORMAT_A2B10G10R10_UINT_PACK32 は 30-31bit が alpha と定義されている。つまり左から MSB となっている。DXGI FORMATも左からMSBでしょこれは。
参考:GPUのTRMでは内部フォーマットの定義はメモリのLower AddressからRGBAと並ぶと言うように定義されています。
Unorm/Snormの定義
執筆中。
コメントを残す