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 ビットのサポートはしない、という仕様などは見た記憶はないので謎です。もし「仕様としてここに載っている」など情報をお持ちの方が居れば、教えて頂けたら幸いです。
コメント