🍎

32bitのbufferに10bit,10bit,10bitでパックされたintを取り出す

2022/06/09に公開

MeshShaderを使うとき

https://sites.google.com/site/monshonosuana/directxの話/directxの話-第16

やD3DExamplesのコードでcpp側で indexを32bitの型に3つ(10/10/10/2)詰めるというコードがあった。

それをシェーダーで使うときにはビッドシフトして一つずつ取り出すのだが、PIXでのデバッグ時にリソースの値を見てもきちんと値が渡せているかの確認ができなかった。

BufferFormatの機能はあるが10bitで分けるという柔軟なことはできなさそうだったのでとりあえずc++で書いてwandboxで実行して確認してみた。

// This file is a "Hello, world!" in C++ language by Clang for wandbox.
#include <iostream>
#include <cstdlib>
#include <stdint.h>

int main()
{
    int32_t indices = (int32_t)(0x00300001);
    int a = indices & 0x3FF;
    int b = (indices>>10) & 0x3FF;
    int c = (indices>>20) & 0x3FF;

    std::cout << "a = " << a << ","<<std::endl;
    std::cout << "b = " << b << ","<<std::endl;
    std::cout << "c = " << c << ","<<std::endl;

}

https://wandbox.org/permlink/jN9XIVZMerzchyJK

Discussion