There should be this line (at line 3560):
pRenderTarget->mDescriptors = pDesc->mDescriptors;
Without this line, when removing an array/3d render target, d3d12_removeRenderTarget will calculate an incorrect handleCount without multiplying by depthOrArraySize (because these flags don't exist even though they maybe should: DESCRIPTOR_TYPE_RENDER_TARGET_ARRAY_SLICES or DESCRIPTOR_TYPE_RENDER_TARGET_DEPTH_SLICES). And over time the maximum RTV descriptor count of 512 can be used up and cause a crash.
The same seems to be a problem in Direct3D11.cpp at line 1732, and possibly Vulkan etc.
After these lines: pRenderTarget->mWidth = pDesc->mWidth; pRenderTarget->mHeight = pDesc->mHeight; pRenderTarget->mArraySize = pDesc->mArraySize; pRenderTarget->mDepth = pDesc->mDepth; pRenderTarget->mMipLevels = pDesc->mMipLevels; pRenderTarget->mSampleCount = pDesc->mSampleCount; pRenderTarget->mSampleQuality = pDesc->mSampleQuality; pRenderTarget->mFormat = pDesc->mFormat; pRenderTarget->mClearValue = pDesc->mClearValue;
There should be this line (at line 3560): pRenderTarget->mDescriptors = pDesc->mDescriptors;
Without this line, when removing an array/3d render target, d3d12_removeRenderTarget will calculate an incorrect handleCount without multiplying by depthOrArraySize (because these flags don't exist even though they maybe should: DESCRIPTOR_TYPE_RENDER_TARGET_ARRAY_SLICES or DESCRIPTOR_TYPE_RENDER_TARGET_DEPTH_SLICES). And over time the maximum RTV descriptor count of 512 can be used up and cause a crash.
The same seems to be a problem in Direct3D11.cpp at line 1732, and possibly Vulkan etc.