問題タブ [direct3d12]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows-10-mobile - Direct3D 12 は Windows 10 Mobile (スマートフォン) でサポートされていますか?
Direct3D 12 は Windows 10 Mobile (スマートフォン) でサポートされていますか? 最近、Windows 10 Universal Apps のすべてのバージョンで動作するという印象を受けて、私の個人的なプロジェクトを Direct3D 12 にアップグレードしました。私の電話は古い Direct3D 11.1 コードを正常に実行しましたが、D3D12CreateDevice() は、指定された機能レベル (11_0、11_1、12_0、または 12_1) またはインターフェイス (ID3D12Device) がサポートされていないというエラーで失敗します。何か間違ったことをしているのですか、それとも D3D12 は電話でサポートされていないのですか? サポートされていない場合、サポートされる予定はありますか? 今のところ、PC で開発するだけでもかまいませんが、サポートされないことを知っておきたいと思います。
c++ - Direct3D12 の CPU/GPU 共有バッファー
私は Direct3D の経験がないので、間違った場所を見ているだけかもしれません。ただし、OpenGL (FreeGLUT を使用) で記述したプログラムを、Windows IoT 互換の UWP (Direct3D を実行、12 'だってクール) に変換したいと考えています。プログラムを Raspberry Pi 3 に移植しようとしていますが、Linux に変換したくありません。
Microsoft が提供する例を通じて、作業を開始するために知っておく必要があると思われることのほとんどを理解しましたが、CPU と GPU の間で動的データ バッファーを共有する方法がわかりません。
やり方を知りたい:
- CPU/GPU 共有循環バッファーを作成する
- GPU を使用した読み取りと描画
- セクションを CPU で書き込み / 置換
簡単な半疑似コード:
これは以前、OpenGL では、書き込まれていないときに配列内の各値に対して glBegin()/glEnd() および glVertex3f() を使用するだけで行われていました。
更新: 基本的に、glBufferSubData() を使用した OpenGL VBO 編集に相当する Direct3D12 が必要です。それがより理にかなっている場合。
更新 2: フレームごとに頂点バッファーを破棄し、新しいバッファーを GPU に再アップロードすることで回避できることがわかりました。フレームごとに 10,000 ~ 200,000 の double を転送すると予想されるように、かなりの量のオーバーヘッドがあります。そのため、定数バッファーを使用して 5 ~ 10 個の更新された頂点をシェーダーに移植する方法を見つけようとしています。そのため、シェーダーを使用して定数バッファーから頂点バッファーにコピーでき、フレームごとにマップ/アンマップを使用する必要はありません。 . このように、CPU 上の循環バッファーは、GPU で使用されているバッファーから独立していますが、定期的な更新を通じて両方が同じ情報を共有します。解決策が見つからない場合は、さらに調べて、シェーダーに関する別のより具体的な質問を投稿します。
graphics - D3D12 用の vkCmdBlitImage のようなものはありますか?
ベース イメージをミップ レベルにブリットして、2D テクスチャのミップマップ チェーンを作成したいと考えています。Vulkan ではvkCmdBlitImage
、画像を線形フィルタリングしながらこれを行うために使用できます (別の質問を参照してください)。D3D12で同じことを達成するにはどうすればよいですか?
directx-12 - D3D12 の SetGraphicsRootSignature のポイントは何ですか?
ID3D12GraphicsCommandList::SetGraphicsRootSignature
メソッドの存在について少し混乱しています。この MSDN pageについて私が理解していることからSetPipelineState
、パイプライン状態オブジェクトの作成時に提供されたのと同じルート署名を与えて、常に の後に呼び出すことが唯一の有効な使用法のようです。もしそうなら、それが暗黙的でないことにどんな利点があるのですか? この方法を使用する他の方法はありますか?
dxgi - 深度ステンシル バッファー リソースへのシェーダー リソース ビューに使用する形式はどれですか?
深度ステンシル バッファー リソースは、DXGI_FORMAT_D24_UNORM_S8_UINT
format として定義されます。
そのリソースにシェーダー リソース ビュー (SRV) を作成するには、ビュー形式を次のように記述する必要があると想定していました。
DXGI_FORMAT_R24_UNORM_X8_TYPELESS
赤のチャネルが深度値にアクセスする場所DXGI_FORMAT_R24G8_TYPELESS
赤のチャネルは深度にアクセスし、緑のチャネルはステンシル値にアクセスします
ただし、そのような SRV の作成は次のエラーで失敗します。
D3D12 エラー: ID3D12Device::CreateShaderResourceView: リソース形式 D24_UNORM_S8_UINT の場合、D3D ビューを作成するときに、ビューの形式名を R24_UNORM_X8_TYPELESS にすることはできません。リソース (またはその一部) がシェーダーにどのように表示されるかを決定する、このリソース形式の有効なビュー形式名のセットについては、ドキュメントを参照してください。[ STATE_CREATION エラー #28: CREATESHADERRESOURCEVIEW_INVALIDFORMAT]
API ドキュメントを調べると、次の情報が得られました。
リソースを表示する場合、リソース ビューの説明では、リソース形式と互換性のある型付き形式を指定する必要があります。つまり、名前に _TYPELESS を含む形式を使用してリソース ビューの説明を作成することはできません。ただし、ビューの型付き形式を指定することで、型のないリソースを表示できます。
型のない形式が許可されない理由と、代わりにどの形式を使用すればよいか、よくわかりません。
c++ - MSAA を使用したスワップ チェーンの作成が失敗する
MSAA をサポートするスワップ チェーンをセットアップしようとすると、DXGI_ERROR_INVALID_CALL
エラーが発生します。スワップ チェーンを作成するコードは次のとおりです。
利用可能な最適な MSAA 設定を見つける方法は次のようになります。
すべてが完璧に機能するのrsd.enableMSAA
はいつですか。false
私のデバイスは次のように作成されます (ハードウェア サポートがないため、ワープ アダプターを使用しています)。
私のログは言う:
directx-12 - ヒープタイプのアップロードで GPU リソースを更新する最良の方法は何ですか?
メソッドを使用しID3D12Resource::Map
て GPU リソースを更新しています。それが最も効率的な方法ですか?どのような代替案が存在しますか?
directx-12 - Intel グラフィック ハードで Direct x 12 画像のちらつき
Intel HD Graphics 530 でのみ奇妙な問題が発生しています
イメージをレンダリングすると、一部のピクセルの色がランダムに変化します。次の画像を参照してください: バグ
問題のあるピクセルについて、グラフィック デバッガーは、グラフィック パイプラインから出力された色が正しい色であることを示します。しかし、ピクセルの表示色が間違っています。参照:デバッガ
私の調査から、これらのピクセルが他の素材からの情報を使用しているように見えることがわかりました。私の資料情報は記述子ヒープによって処理されます。したがって、レンダリング ループ内のグラフィックス ルート記述子テーブル間の切り替えが問題のようです (オブジェクトを 1 つしか描画しない場合はすべて問題ありません)。
ここで私が使用するコードスニペット:
}
どうしたの ?