

以下の警告文が出力ウィンドウに表示されます。

> D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set
> to OM RenderTarget slot 0 is still bound on input! [ STATE_SETTING WARNING
> #9: DEVICE_OMSETRENDERTARGETS_HAZARD]  
>  D3D11 WARNING:
> ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing PS
> shader resource slot 0 to NULL. [ STATE_SETTING WARNING #7:
> DEVICE_PSSETSHADERRESOURCES_HAZARD]

ググった所、OMSetRenderTargets()で設定しようとしているビューのリソースが、すでにピクセルシェーダのシェーダリソースビューとして割り当てられている為のようです。  
解決策として、OMSetRenderTarget()とPSSetShaderResources()にNULLを渡してステートをリセットすればいいみたいなことが書かれていました。

なので、OMSetRenderTarget()を呼び出す前に、

[code]

    ID3D11RenderTargetView* dummyRTVs[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT] = {nullptr};
    ID3D11ShaderResourceView* dummySRVs[D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT] = {nullptr};
    
    pImmediateContext->OMSetRenderTargets( _countof(dummyRTVs), dummyRTVs, nullptr);
    pImmediateContext->PSSetShaderResources( 0, _countof(dummySRVs), dummySRVs);
    
[/code]

という処理を実行しているのですが、相変わらずおなじ警告文を吐いてしまいます。  
何か他に原因があるのでしょうか。

よろしくお願いします。


CC BY-SA 3.0
2015-01-17T10:10:54.733
4737
2015-02-03T18:45:04.643
2015-01-17T10:42:38.403
3639
7499
question
c++ directx
D3D11のデバッグレイヤーで出る警告が取れない


この警告は同じリソースを同時にread/writeするときに発生します。  
例えばピクセルシェーダーで描き込もうとするレンダーターゲットをさらにテクスチャとしてピクセルシェーダーにバインドするとこのような警告が出ます。  
よくある例としてはバックバッファをテクスチャとして貼ったエフェクトや深度バッファを使ったシャドウマップなどです。  
リソースにNULLを設定したとしても同じタイミングで読み書きをしているパスがあると発生してしまうので丁寧にコードを調査する必要があります。  
コードをパスごとにコメントアウトして原因を絞り込み、そのような使い方をしているところがないか探してみてください。


CC BY-SA 3.0
2015-02-03T18:45:04.643
5897
2015-02-03T18:45:04.643
8028
4737
answer