Game Develop

[DirectX11] 리소스 바인딩 관련 에러 본문

ComputerGraphics/DirectX

[DirectX11] 리소스 바인딩 관련 에러

MaxLevel 2022. 2. 14. 23:16

1. D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM RenderTarget slot 0 is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD]


2. D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing CS shader resource slot 0 to NULL. [ STATE_SETTING WARNING #2097316: DEVICE_CSSETSHADERRESOURCES_HAZARD]

 

 

 

컬러피킹을 해야하기때문에 씬에서 컴퓨트셰이더를 사용하고있는데 콘솔출력창에 위와같은 경고가 계속 출력됐다.

대충 구글번역을 돌려보니 아래와 같다. 

 

1. CS 셰이더 리소스 슬롯 0을 NULL로 강제 설정합니다.
2. OM RenderTarget 슬롯 0으로 설정된 리소스는 여전히 입력에 바인딩되어 있습니다!

 

위 내용으로만 추측해보면서 고쳐보려했지만 잘 되지않았다. 렌더타겟클리어코드를 렌더타겟셋을 하기 직전에 전부 작성해봤지만 딱히 해결되지는 않았다. 그래서 구글링을 좀 해서 알아본 결과 셰이더에 SRV(ShaderResourceView)를 바인딩 해서 사용한 다음 null을 세팅을 해줘야한단다.. 약간 초기화하는 그런 느낌이다. 알고 나니 왜 에러가 저렇게 뜨는지 대충 알것같긴 하다.(100%는 아니다). 

 

코드는 아래와 같다.

1
2
3
4
5
6
DEVICECONTEXT->CSSetShaderResources(01&mRenderTargetTexture->GetSRV()); // CS 0번 레지스터에 바인딩.
DEVICECONTEXT->CSSetUnorderedAccessViews(01&mComputeStructuredBuffer->GetUAV(), nullptr);
DEVICECONTEXT->Dispatch(111);
 
// 추가한 코드. CS의 0번 레지스터에 NULL값 SRV 셋팅
ID3D11ShaderResourceView* pSRV = NULL;
DEVICECONTEXT->CSSetShaderResources(01&pSRV);
cs

 

컴퓨트셰이더의 0번레지스터에 렌더타겟의 텍스쳐를 세팅하고 실행시킨 다음, NULL값으로 다시 세팅해준 상태다.

만약 관련되서 경고가 뜨는 분들은 위처럼 사용 후에 NULL값을 세팅해주면 해결할 수도 있다.