必要になった時によく忘れているので纏めておきます。

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の定義

執筆中。