Objects in depth buffer are always black (0.0)
That's how I used to initialize viewport (CD3DX12_VIEWPORT). But I didn't realize that there are two additional fields minDepth and maxDepth. Therefore, I have min/max depth set to 0.0 and objects rendered to depth buffer are always black:
m_viewport.TopLeftY = 0.0f;
m_viewport.TopLeftX = 0.0f;
m_viewport.Width = static_cast&lt;float&gt;(m_windowSize.x);
m_viewport.Height = static_cast&lt;float&gt;(m_windowSize.y);

Fixed that by simply using constructor which default minDepth to 0.0 and maxDepth to 1.0:
m_viewport = CD3DX12_VIEWPORT{ 0.0f, 0.0f, static_cast&lt;float&gt;(m_windowSize.x), static_cast&lt;float&gt;(m_windowSize.y) };