問題タブ [dxgi]
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.
c++ - DXGI で 1 つのモニターを全画面表示に切り替えると、他のモニターが真っ暗になる
モニターの 1 つをフルスクリーン モードに切り替えると、他のモニターが黒くなり、何も表示されないことがあります。私は何か間違ったことをしましたか、それとも単なるバグですか?
ウィンドウを作成し、そのウィンドウにバインドされたスワップチェーンを作成しました。そして、スワップチェーンの SetFullScreenState を最初のパラメーター true で呼び出し、2 番目のパラメーターでフルスクリーンに切り替えたいモニターの IDXGIOutput オブジェクトを呼び出しました。正常に動作することもありますが、他のすべてのモニターが失われることがあります (フルスクリーンのモニターのみが表示されます)。
私のグラフィック カードは Radeon HD6750 で、ドライバーのバージョンは 12.3 です。
MulitMon10 サンプルには同じ問題があることがわかりましたが、一部のゲームにはありません。または、スカイリムとテイルズ オブ モンキー アイランドは D3D または OpenGL を使用していますか?
c# - Swapchain.Present()に時間がかかりすぎて、ラグが発生する
私は最近、すべてのc#SlimDX DX11レンダリングコードをフォーム(はい、私は怠惰な開発者です)から特注のクラスに移動してから少し遅れています。私は自分のプログラムをEQATECProfilerに打ち込み、これを私のラグの主な原因として手に入れました。
ここで、postRender()にあるものが本当に貴重なミリ秒を占有していることは明らかです。実際、私がそこに持っているクレイジーで複雑なコードが何であれ、それ自体でフレームレートを実質的に最大15FPSに下げることができます。
では、postRender()には何が含まれていますか?たった1行のコード:
何が原因で速度が大幅に低下したのかわかりません。スワップチェーンコードに変更を加えたことはありません。私が変更したのは画面解像度(1680x1050)だけですが、それは絶対に問題ないはずです(参考までに、このマシンは、汗をかくことなく、その解像度で最大設定でcrysis2を実行できます)。
スワップチェーンの提示にこれほど時間がかかる原因や、次に問題を探す場所を誰かが知っていますか?
編集:
コードの構造を見ると、RenderFrame()関数は次のようになっています。
これらの関数の一部の結果は、以前の関数に基づいています(たとえば、DeferredRenderは、4つのレンダーターゲットを使用して、拡散反射光、法線、位置、および色をピクセルごとにキャプチャします。CompositeSceneは、それらをすべてまとめます。これには、 GPUは、続行する前に前のステップを計算しました。このプロセス全体が続行され、DoFはPostProcessの結果などを要求します。したがって、Swapchain.Present()を保持している可能性がある唯一のシェーダーは、で実行されるシェーダーである必要があります。関数DoFは、他のすべてのシェーダーが終了するまでCPUをロックするためです。正しいですか?
c++ - PIX DirectX 11 デバッグ ピクセル エラー
最近、デュアル モニター、デュアル ウィンドウのサポート用に DirectX 11 (C++) アプリケーションを更新しました。それ以来、PIX デバッガーでピクセルをデバッグしようとすると、次のエラーが発生します。
D3D11CreateDeviceAndSwapChain を使用しなくなりましたが、代わりに D3D11CreateDevice を使用してから CreateSwapChain を使用して、2 つのウィンドウ (モニターごとに 1 つ) のそれぞれに個別のスワップ チェーンを作成します。変更を行う際は、SDK サンプルの MultiMon10 を参照として使用しましたが、PIX を介して MultiMon10 サンプル プロジェクトを実行すると、エラーなくピクセルをデバッグできます。したがって、単に「CreateSwapChain」が PIX に適していないという問題ではありません。
このエラーの原因は何ですか? ピクセルのデバッグとシェーダーのステップ実行は、過去に私を大いに助けてくれました。その能力を失いたくありません。
direct3d - DXGIで「ライブオブジェクト警告」を有効にする
Direct3D 11では、次のような「ライブオブジェクト警告」を有効にできます。
私のデバッグビルドでは、リリースされていないオブジェクトを検出します。
DXGIについても同じことができますか?もしそうなら、どのように?
visual-c++ - DXGI を使用した Windows 8 デスクトップ複製の制限?
Windows 7 とその以前のバージョンで正常に動作するリモート デスクトップ アプリケーションに取り組んでいます。しかし、Windows 8 ではミラー ドライバーが削除されたため、DXGI を使用して同じリモート デスクトップ機能を開発する必要があります。ドキュメントを読みましたが、DXGI に制限はありますか?
Windows 8 でデスクトップ エミュレーションを作成しているときに何らかの制限が発生した場合は、共有してください。
c++ - エンディアンに関連して DXGI_FORMAT_ コードはどのように機能しますか?
私はフランク D. ルナの本「DirectX 10 を使用した 3D プログラミングの概要」を読んでいますが、問題の 1 つは使用から切り替えることです。
D3DXCOLOR カラー (128 ビット)
から UINT カラー (32 ビット)
おそらく使用するフォーマット コードは、DXGI_FORMAT_R8G8B8A8_UNORM です。
私の考えでは、これは、バイトレベルでチャネルに関する情報を正確な順序で持つ変数があることを意味します: RGBA (これは正しい解釈ですか?-RGBA が必要なときにそれを読んだことがあると確信しているため、尋ねます)実際には次のようなコードが必要です: A#R#G#B#ここでアルファチャンネルが最初に指定されます。
とにかく、私は次のことを選択しました(おそらくもっと良い方法があります):
WHITE が定義されている場合:const D3DXCOLOR WHITE(1.0f, 1.0f, 1.0f, 1.0f);
このキャストは、D3DXCOLOR の拡張機能で定義されています。
ただし、DXGI_FORMAT_R8G8B8A8_UNORM を UINT カラー変数と共に使用すると、間違った結果が得られます。ルナはこれをエンディアンに帰します。
これは、D3DXCOLOR からのキャストが RGBA 形式の UINT を生成するためですが、Intel x86 はリトル エンディアンを使用するため、バイト レベルでは実際に 'ABGR' が得られるためですか?? この変数が実際に解釈されると、シェーダーは RGBA ではなく ABGR を認識しますか? 上位ビットが小さいアドレスにあることをバイトを解釈するときに知っておくべきではありませんか? そして最後の質問: コードは DXGI_FORMAT_R8G8B8A8_UNORM と指定されているため、これは R が最小のアドレスで、A が最大のアドレスでなければならないということですか? 誤解が多いと思いますので、どうぞご自由に解いてください。
opengl - Windows 8でOpenGLを使用する場合のDXGI警告?
私はOpenGL(DirectXではない)を使用してCADアプリケーションを書いています。Windows 8 Pro(64ビット)でデバッグビルドを実行すると、アプリケーションが正しく終了する前に、次のメッセージがデバッガーのコンソールウィンドウに出力されます。
これがどこから来ているのかわかりません。DXGIは、私が使用していないDirectXに関連しているようです。ヒントはありますか?
アップデート
Paul-Janのアドバイスに従って、デバイスのデバッグを有効にしました。これにより、次のメッセージが生成されます。
graphics - DXGI_FORMAT の正確な色空間は何ですか?
DXGI_FORMAT の公式ドキュメントでは、_SRGB 列挙接尾辞を持つ形式のみが sRGB 色空間にあることがわかります。この接尾辞のない他の形式はすべて線形空間にあると思いました。しかし、DirectXTex ライブラリのフォーマット変換関数の非常に奇妙な動作を見つけました。( http://directxtex.codeplex.com/からダウンロードできます)
まず、NVIDIA Photoshop DDS Plugin を使用して、テクスチャ ファイルを DXGI_FORMAT_R32G32B32A32_FLOAT としてエクスポートしました。次に、このファイルを LoadFromDDSFile() 関数で読み込み、Convert() 関数でその形式を DXGI_FORMAT_R16G16B16A16_UNORM に変換します。(これら 2 つの関数はどちらも DirectXTex ライブラリによって提供されます。)
何だと思いますか?画像を DXGI_FORMAT_R16G16B16A16_UNORM に変換した後、すべてのピクセルの明るさも変更され、画像全体が以前よりも明るくなりました。
画像を DXGI_FORMAT_R16G16B16A16_UNORM 形式に変換した後で、ピクセル値を sRGB 空間から線形空間に手動で変換すると、結果のピクセル値は入力と同じになります。したがって、DirectXTex ライブラリは DXGI_FORMAT_R32G32B32A32_FLOAT をリニア色空間のフォーマットとして扱い、DXGI_FORMAT_R16G16B16A16_UNORM を sRGB 色空間のフォーマットとして扱い、リニア空間から sRGB 空間への色空間変換を行ったのだと思います。( Convert() 関数も色空間を変換する理由を調べようとしましたが、WIC によって実装されており、そのソース コードはありません。)
では、DirectXTex ライブラリにバグはありますか? それとも、DXGI_FORMAT の本当の標準ですか? いくつかの特別な DXGI_FORMAT に異なるカラー スペースがあった場合は、その仕様をどこで確認できるか教えてください。
どんな助けでも感謝します。ありがとう!
c++ - Direct3D YUVフォーマット?
Direct3D 11 for Windows 8のYUVテクスチャフォーマットはどのように機能しますか?ドキュメントは少しまばらで、例は見つかりませんでした。
シェーダーでそのようなテクスチャから読み取る場合、自動変換はtexture.rgb
同じ.yuv
ですか、それとも自動変換が行われますか?その場合、どの変換が使用されますか(ITU-R BT.601)SDまたは(ITU-R BT.701)HDですか、それともテクスチャサイズに基づいて自動的に選択されますか?
c++ - GetDC / ReleaseDCのIDXGISurface1スレッドセーフ/同期ルール?
IDXGISurface1
GetDC/ReleaseDC
で作成されたテクスチャのスレッドセーフルールは何D3D11_RESOURCE_MISC_GDI_COMPATIBLE
ですか?
暗黙的な同期によるデータの競合やブロッキングなしに、別のスレッドとの間で、および別のスレッド上でID3D11Device
対話ID3D11DeviceContext
できGetDC
ますか?または、GPUアイドリングがGDIレンダリングを実行するスレッド用に別のスレッドを作成し、それを「メイン」にコピーして戻すことをReleaseDC
回避するためですか?D3D11Device
D3D11Device
D3D11_RESOURCE_MISC_SHARED_KEYED_MUTEX
つまり、次は有効ですか?