Hey all!
I am using Instanced Static Mesh Components to display a large amount of simple meshes (quads).
Some times, everything seems to work with no issue. However, the editor will occasionally CTD while creating instances.
I am unfamiliar with any of the classes involved with the crash report, I am using the base 4.19 engine, with no modifications to the source. Here is the call stack:
LoginId:b0121628477510970195d6b999aee516
EpicAccountId:02cc666aca8b4011827bec90696857e7
Assertion failed: Size == CreateInfo.ResourceArray->GetResourceDataSize() [File:D:\Build\++UE4+Release-4.19+Compile\Sync\Engine\Source\Runtime\Windows\D3D11RHI\Private\D3D11VertexBuffer.cpp] [Line: 70] DebugName: (null), GPU Size: 1360, CPU Size: 1376, Is Dynamic: No
UE4Editor_Core!FDebug::AssertFailed() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:419]
UE4Editor_D3D11RHI!FD3D11DynamicRHI::RHICreateVertexBuffer() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\windows\d3d11rhi\private\d3d11vertexbuffer.cpp:67]
UE4Editor_RHI!FDynamicRHI::CreateVertexBuffer_RenderThread() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\rhi\private\rhicommandlist.cpp:2039]
UE4Editor_RHI!FRHICommandListImmediate::CreateVertexBuffer() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\rhi\public\rhicommandlist.h:3824]
UE4Editor_Engine!RHICreateVertexBuffer() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\rhi\public\rhicommandlist.h:4668]
UE4Editor_Engine!FStaticMeshInstanceBuffer::CreateVertexBuffer() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\instancedstaticmesh.cpp:294]
UE4Editor_Engine!FStaticMeshInstanceBuffer::InitRHI() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\instancedstaticmesh.cpp:257]
UE4Editor_Engine!FStaticMeshInstanceBuffer::UpdateRHIVertexBuffer() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\instancedstaticmesh.cpp:370]
UE4Editor_Engine!TGraphTask<TEnqueueUniqueRenderCommandType<`FInstancedStaticMeshRenderData::UpdatePerInstanceRenderData'::`10'::FPerInstanceRenderDataBufferUpdateName,<lambda_b0aae14aa00b4337f0d9cfc793c3a457> > >::ExecuteTask() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\public\async\taskgraphinterfaces.h:830]
UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\async\taskgraph.cpp:665]
UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\async\taskgraph.cpp:574]
UE4Editor_RenderCore!RenderingThreadMain() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\rendercore\private\renderingthread.cpp:331]
UE4Editor_RenderCore!FRenderingThread::Run() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\rendercore\private\renderingthread.cpp:465]
UE4Editor_Core!FRunnableThreadWin::Run() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:76]
Here is the code where the error message at the top is created:
if(CreateInfo.ResourceArray)
{
checkf(Size == CreateInfo.ResourceArray->GetResourceDataSize(),
TEXT("DebugName: %s, GPU Size: %d, CPU Size: %d, Is Dynamic: %s"),
CreateInfo.DebugName, Size, CreateInfo.ResourceArray->GetResourceDataSize(),
InUsage & BUF_AnyDynamic ? TEXT("Yes") : TEXT("No"));
InitData.pSysMem = CreateInfo.ResourceArray->GetResourceData();
InitData.SysMemPitch = Size;
InitData.SysMemSlicePitch = 0;
pInitData = &InitData;
}
Clearly, whatever GPU Size and CPU size are, they should to be the same and they aren’t. I am not sure what affects those two values, or how to avoid this from happening. Any ideas?