Unity : Compute Shader에서 Failed to present D3D11 swapchain due to device reset/removed 해결 방법
2190 단어 ComputeShaderHLSLUnity
Compute Shader ( DirectCompute ) 에서는 현재 ( 2021 년 ) Runtime Error 적인 것을 토출 하지 않고 , 구문 에러 이외 의 런타임 에러 는 , 코멘트 아웃 을 하는 등 , 따를 필요 가 있습니다 . 이번에는 다음과 같은 오류가 발생하여 Unity Editor가 떨어졌습니다.
에러: Failed to present D3D11 swapchain
Failed to present D3D11 swapchain due to device reset/removed. This error can happen if you draw or dispatch very expensive workloads the GPU, which can cause Windows to detect a GPU Timeout and reset the device. If you believe this error is due to built in Unity functionality, please submit a bug This is an unrecoverable error and the editor will shut down.
해결책
CPU측에서 p2gMassBuffer, sortedP2gMassBuffer를 생성하고 있었습니다만, P2GMass라고 하는 구조체로 작성한 Compute Buffer였지만↓,
GridSortCS.SetBuffer(this.rearrangeParticlesKernel.Index, "_P2GMassBuffer", p2gMassBuffer);
GridSortCS.SetBuffer(this.rearrangeParticlesKernel.Index, "_SortedP2GMassBuffer", sortedP2gMassBuffer);
GPU측에서는, MpmParticle이라고 하는 다른 구조체로의 Compute Buffer에 넣어져 버렸습니다↓.
StructuredBuffer<MpmParticle> _P2GMassBuffer;
RWStructuredBuffer<MpmParticle> _SortedP2GMassBuffer;
따라서 다음과 같이 MpmParticle에서 P2GMass로 변경하면 오류가 발생하지 않습니다.
StructuredBuffer<P2GMass> _P2GMassBuffer;
RWStructuredBuffer<P2GMass> _SortedP2GMassBuffer;
마지막으로
Compute Shader는 배열에서 index가 튀어나오거나 이번과 같은 다른 구조체의 Compute Buffer를 사용하고 있어도 에러를 가르쳐주지 않기 때문에, 코멘트 아웃으로 어디가 에러의 근원을 2분 탐색 방식으로 찾아 갑자기 마지막으로 좁혀진 행을 보고 육안인지 확인하거나 Compute Buffer를 C# 측에 대고 디버깅할 수밖에 없으므로 시간을 들여 차분히 디버깅합시다!
Reference
이 문제에 관하여(Unity : Compute Shader에서 Failed to present D3D11 swapchain due to device reset/removed 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/supertask/items/c1ac5342a1af82983faa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)