本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

32ビットアプリでは DXR は使えない?

DirectX Raytracing (DXR) のコードをゼロから書き始めて、気付いた点になります。 32bit アプリ (x86 ビルド設定) で以下のコードを実行したら、DXR をサポートしていないと返ってきました。

hr = D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&m_d3d12Device));
if (FAILED(hr)) {
    return false;
}

// DXR サポートしているか確認.
D3D12_FEATURE_DATA_D3D12_OPTIONS5 options{};
hr = m_d3d12Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS5, &options, UINT(sizeof(options)));
if (FAILED(hr) || options.RaytracingTier == D3D12_RAYTRACING_TIER_NOT_SUPPORTED) {

   throw std::runtime_error("DirectX Raytracing not supported.");
}

以下はそのときのキャプチャ画像です。

アドレスが 32bit なので x86 ビルドなのは分かると思います。また m_d3d12Device は ID3D12Device5 のインターフェースを期待するものになっているのですが、ID3D12Device4 が得られている時点でもすこし怪しいです。

ちなみに x64 ビルドを行うと、このコードは全く問題なく動作 (DXR はサポートされている) と判断され動作します。

DXR は 64 ビットのみのサポートで 32 ビットのサポートはしない、という仕様などは見た記憶はないので謎です。もし「仕様としてここに載っている」など情報をお持ちの方が居れば、教えて頂けたら幸いです。

DirectXプログラミング
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました