DirectX API (AMD의 드라이버)에 문제가 있음을 확인했습니다. 증분 크기로 createBuffer()를 사용하여 d3d 버퍼를 만들고 for 루프에서 릴리스하면 메모리 진단 도구는 프로세스의 개인 바이트 크기가 계속 증가하고 있음을 보여줍니다. GPU 맵핑 된 시스템 메모리가 절대로 릴리즈되지 않기 때문일 수도 있습니다. BTW, CPU 힙 크기가 안정적입니다. 1,000 반복 버퍼 크기다양한 크기의 d3dBuffer가 만들어지지 않았습니다.
- 가 MB
- CreateBuffer가 D3D11_USAGE_STAGING를 사용하여 1000 1킬로바이트 시작/D3D11_USAGE_DYNAMIC & D3D11_CPU_ACCESS_WRITE
- d3dbuffer.Release & d3dbuffer = nullptr
- 콘텍스트. cleastate()와 플러시() 동기 해제
for (unsigned long long totalSize = 1MB; totalSize <= 1000MB ; totalSize += 1MB)
{
// create
CComPtr<ID3D11Buffer> pd3dBuffer;
D3D11_BUFFER_DESC bufferDesc;
{
ZeroMemory(&bufferDesc, sizeof(bufferDesc));
bufferDesc.ByteWidth = static_cast<UINT>(bufferSize);
bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
bufferDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
bufferDesc.MiscFlags = 0;
bufferDesc.StructureByteStride = 0;
}
HRESULT hr = pd3dDevice->CreateBuffer(&bufferDesc, NULL, pd3dBuffer);
if (FAILED(hr)) break;
//release
pd3dBuffer.Release();
pd3dDeviceContext->ClearState();
pd3dDeviceContext->Flush();
}
d3dbuffer 프로세스 메모리 사용량이 올라가고 유지하고 결국 내 실제 메모리 16 기가 바이트 제한과 충돌에 도달하기 때문에. 이것은 생성 직후 버퍼를 동기식으로 해제하므로 이상합니다. 프로세스 메모리 사용은 비교적 안정적이어야합니다. DirectX 메모리 관리가 어떻게 작동하지 않는지 설명 할 수있는 사람이 있습니까?
잠깐 나는 문서를 살펴볼 것이다 –
버퍼를 맵핑 한 후에 맵핑 해제 중입니까? –
매핑 매핑 매핑이 없습니다. 그냥 동기화 삭제 (지연되지 않음). – shorttermmem