message: Add sanity check that direct-heap access has a heap bound
diff: @@ -1394,6 +1394,8 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
  element->views.clear();
  }
  if(curUsage->bindType == BindType::Sampler)
  + {
  + if(samplerHeap)
  {
  D3D12Descriptor *desc =
  (D3D12Descriptor *)samplerHeap->GetCPUDescriptorHandleForHeapStart().ptr;
  @@ -1405,7 +1407,14 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
  samp.tableIndex = curUsage->descIndex;
  element->dynamicallyUsedCount++;
  }
  + else
  + {
  + RDCERR("Access to sampler heap detected with no sampler heap bound");
  + }
  + }
  else if(curUsage->bindType == BindType::ConstantBuffer)
  + {
  + if(resourceHeap)
  {
  D3D12Descriptor *desc =
  (D3D12Descriptor *)resourceHeap->GetCPUDescriptorHandleForHeapStart().ptr;
  @@ -1421,6 +1430,13 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
  element->dynamicallyUsedCount++;
  }
  else
  + {
  + RDCERR("Access to resource heap detected with no resource heap bound");
  + }
  + }
  + else
  + {
  + if(resourceHeap)
  {
  D3D12Descriptor *desc =
  (D3D12Descriptor *)resourceHeap->GetCPUDescriptorHandleForHeapStart().ptr;
  @@ -1431,6 +1447,11 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
  element->views.push_back(view);
  element->dynamicallyUsedCount++;
  }
  + else
  + {
  + RDCERR("Access to resource heap detected with no resource heap bound");
  + }
  + }
  curUsage++;
  }
  }
  