I'm running into a crash with the following config:
- UE4.14 Preview
- D3D12 RHI
- Level from VR Template in Editor
- Instanced Stereo enabled and Forward shading enabled in ini.
- Editor startup so instanced stereo drawing disabled.
What is happening is that in the base pass static mesh drawing for the level's TextRenderComponent:
FForwardLightingParameters::Set is not binding InstancedForwardGlobalLightData (CB slot 5) since instanced is false.
Pixel shader's CB Resource Count is 8.
D3D12 state cache's PipelineState::Common::CurrentShaderCBCounts[Pixel] is therefore 8.
D3D12 state cache's commit code (FD3D12StateCacheBase::ApplyState) assumes every slot is set when calculating dirty bind slots (local variable CurrentShaderDirtyCBVSlots)
Dirty array is then used to set constant buffer at index 5 (FD3D12DescriptorCache::SetConstantBuffers) but this hasn't been bound so GPU virtual address is 0 and check() fails.
Should the instanced data always be set in (1) or should the code in (4) take into account unbound CB slots?
Nov 02 '16 at 01:33 PM