Direct3D: Be sure to set correct heaps for current descriptor tables.

When binding descriptor tables, their associated heaps need to be bound
as well. Previously we would bind those heaps when allocating from them.
However, if we re-use a descriptor table later, its heap may no longer
be bound. So we need to be sure to bind heaps for the current set.

To avoid unnecessary refs, rather than store a
sk_sp<GrD3DDescriptorTableManager::Heap> in each descriptor table, we
only store its ID3D12DescriptorHeap pointer. The Heap only needs to be
added to the command list once, when it is first used to allocate for
the current submit.

Bug: skia:12359
Change-Id: I70018368e4f08bf7757969b9e878b0ff42059486
Commit-Queue: Jim Van Verth <>
Reviewed-by: Greg Daniel <>
5 files changed