WaitForSingleObject 함수가의 WaitForSingleObject는 RSSetScissorRects가 호출되는 경우 액세스 위반이 발생
예외 DrawTexturedCube.exe에서 0x00007FFA02794AD0 (d3d12warp.dll)에서 발생 다음과 같은 오류가 발생합니다가 0xc0000005를 : 액세스 위반 위치 0x0000000000000000
읽기 이전 프레임이 완료되기를 기다리는 동안 이 코드는 MSDN DirectX12 예제 코드 (https://msdn.microsoft.com/en-us/library/windows/desktop/dn899189%28v=vs.85%29.aspx)에서 가져온 것입니다.
void D3D12RenderSystem::waitForPreviousFrame() {
const UINT fence = fenceValue_;
ThrowIfFailed(commandQueue_->Signal(fence.Get(), fence));
fenceValue_++;
if (fence_->GetCompletedValue() < fence) {
ThrowIfFailed(fence_->SetEventOnCompletion(fence, fenceEvent_));
WaitForSingleObject(fenceEvent_, INFINITE);
}
frameIndex_ = swapChain_->GetCurrentBackBufferIndex();
}
이 오류는 4 가지 테스트 케이스 중 하나에서만 발생합니다. 여기에 설명 된대로 구조화 된 paintEvent 루프에서 다음 함수에 대한 호출을 제거하면 액세스 위반이 사라집니다 (그러나 이미지가 뷰포트에 렌더링 됨). (https://msdn.microsoft.com/de-de/library/windows/desktop/dn903899%28v=vs.85%29.aspx)
VS2015를 사용하고 있으며 모든 테스트 케이스에서 디버거가 fenceEvent_ 변수를 NULL로 표시하지 않고 디스 어셈블리가 어떻게 표시합니까 ?? ?? 핸들이 모든 테스트 케이스에서 가리키는 메모리에 대해. 내 셰이더는 기하학 셰이더를 사용하지 않습니다.
그래서 지금은이 개 질문이 :
- 어떻게 할 만 한 4 중 거의 동일한 테스트 케이스에서 액세스 위반 WaitForSingleObject 함수 리드?
- RSSetScissorRects 함수와 WaitForSingleObject 함수는 서로 어떻게 관련되어 있습니까?
'fenceEvent_'는 NULL입니다. 이것을 확인할 수 있습니까? –
이미 디버거에서 확인했지만, 두 경우 모두 null이 아니지만 디스 어셈블리 만 제공합니까 ?? ?? 두 경우 모두 값으로 사용됩니다. – TioZ
MCVE를 표시하십시오 –