トップページ > 記事閲覧
頂点シェーダーにおけるサンプラーが存在しない
名前:猫の湯飲み 日時: 2026/02/12 22:39

お世話になっております。 現在、SetUseTextureToShader を用いてハイトマップ(テクスチャ)を頂点シェーダーから参照し、頂点座標を変位させる処理を実装しています。 D3D11 デバッグレイヤーを有効(D3D11_CREATE_DEVICE_DEBUG)にした状態で描画すると、以下の警告が出力されました。 D3D11 WARNING: ID3D11DeviceContext::DrawIndexed: The Vertex Shader unit expects a Sampler to be set at Slot 0, but none is bound. This is perfectly valid, as a NULL Sampler maps to default Sampler state. However, the developer may not want to rely on the defaults. [ EXECUTION WARNING #352: DEVICE_DRAW_SAMPLER_NOT_SET] こちらは「NULL サンプラーはデフォルトのSamplerStateにマップされるため動作上は問題ない」という趣旨の警告だと理解しているのですが、 SetUseTextureToShaderでは頂点シェーダーに対して、サンプラーはライブラリ側でバインドされない仕様でしょうか? お手数をおかけしますが、よろしくお願いいたします。
メンテ

Page: 1 |

Re: 頂点シェーダーにおけるサンプラーが存在しない ( No.1 )
名前:管理人 日時:2026/02/13 21:48

すみません、頂点シェーダーのテクスチャ読み込みにもサンプラー設定ができることを知りませんでした サンプラー設定するように変更することは簡単にできたのですが、現在 Live2D 対応コード部分の大幅変更中で コンパイルが通らないので、修正版については暫くお待ちください m(_ _;m
メンテ
Re: 頂点シェーダーにおけるサンプラーが存在しない ( No.2 )
名前:猫の湯飲み 日時:2026/02/22 22:50

早々のご対応、ありがとうございました。 頂点シェーダーでもサンプラーが設定されるようになり、問題は解消しました。 関連してもう一点、D3D11 の警告について確認させてください。 現象 MakeScreen で作成したグラフィックハンドルをテクスチャとして設定し、頂点シェーダー/ジオメトリシェーダーで使用した後にSetUseTextureToShaderを用いて解除しているにもかかわらず、2フレーム目以降で「テクスチャが解除されていない」旨の警告が出ます。 発生する警告 D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing VS shader resource slot 6 to NULL. [ STATE_SETTING WARNING #3: DEVICE_VSSETSHADERRESOURCES_HAZARD] D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing GS shader resource slot 6 to NULL. [ STATE_SETTING WARNING #5: DEVICE_GSSETSHADERRESOURCES_HAZARD] 予想? DxLib のソース DxGraphicsD3D11.cpp 内 Graphics_D3D11_DeviceState_SetPSShaderResouceView を確認すると、以下のように VS / GS への SetShaderResources が、各シェーダーが有効なときのみ実行されるように見えます。 if( GSYS.DrawSetting.UserShaderRenderInfo.SetVertexShaderHandle != 0 ) { D3D11DeviceContext_VSSetShaderResources(...); } if( GSYS.DrawSetting.UserShaderRenderInfo.SetGeometryShaderHandle != 0 ) { D3D11DeviceContext_GSSetShaderResources(...); } この条件分岐の影響で、SetUseTextureToShader(slot, -1) を呼んでも VS/GS 側の SRV が NULL に更新されず、結果として同一テクスチャを「SRV のまま参照しつつ、RTV にも設定」してしまい、上記 hazard warning が出ているのではないかと考えています。 質問 この挙動(VS/GS の SRV が状況によって解除されない可能性があること)は、意図した仕様でしょうか?
メンテ
Re: 頂点シェーダーにおけるサンプラーが存在しない ( No.3 )
名前:管理人 日時:2026/02/23 23:12

> 早々のご対応、ありがとうございました。 > 頂点シェーダーでもサンプラーが設定されるようになり、問題は解消しました。 すみません、Live2D 関連の変更を無効化して SmokingWOLFさんの件の対応ビルドを作成したので DxGraphicsD3D11.cpp への変更も無効化されていた( 本件の対応のための変更も無効化されていた )と思っていたのですが、 Live2D 関連の変更に DxGraphicsD3D11.cpp は含まれていませんでした (・・; > この条件分岐の影響で、SetUseTextureToShader(slot, -1) を呼んでも VS/GS 側の SRV が NULL に更新されず、結果として同一テクスチャを「SRV のまま参照しつつ、RTV にも設定」してしまい、上記 hazard warning が出ているのではないかと考えています。 確か何か理由があって現在の形にした気がしますが、単に『ちょっと負荷軽減になるかも』と思った程度だった気もするので 常に VS / GS にもテクスチャを設定するようにしてみました よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存