[D3D12] Fix mid-frame pool destruction (in case of device losses)
This commit is contained in:
parent
e6bd8f37aa
commit
a9e83872eb
|
@ -22,7 +22,19 @@ namespace d3d12 {
|
||||||
UploadBufferPool::UploadBufferPool(D3D12Context* context, uint32_t page_size)
|
UploadBufferPool::UploadBufferPool(D3D12Context* context, uint32_t page_size)
|
||||||
: context_(context), page_size_(page_size) {}
|
: context_(context), page_size_(page_size) {}
|
||||||
|
|
||||||
UploadBufferPool::~UploadBufferPool() { ClearCache(); }
|
UploadBufferPool::~UploadBufferPool() {
|
||||||
|
// Allow mid-frame destruction in cases like device loss.
|
||||||
|
if (current_mapping_ != nullptr) {
|
||||||
|
// Don't care about the written range - destroying anyway.
|
||||||
|
D3D12_RANGE written_range;
|
||||||
|
written_range.Begin = 0;
|
||||||
|
written_range.End = 0;
|
||||||
|
unsent_->buffer->Unmap(0, &written_range);
|
||||||
|
current_mapping_ = nullptr;
|
||||||
|
}
|
||||||
|
current_size_ = 0;
|
||||||
|
ClearCache();
|
||||||
|
}
|
||||||
|
|
||||||
void UploadBufferPool::BeginFrame() {
|
void UploadBufferPool::BeginFrame() {
|
||||||
// Recycle submitted pages not used by the GPU anymore.
|
// Recycle submitted pages not used by the GPU anymore.
|
||||||
|
@ -195,7 +207,11 @@ DescriptorHeapPool::DescriptorHeapPool(D3D12Context* context,
|
||||||
uint32_t page_size)
|
uint32_t page_size)
|
||||||
: context_(context), type_(type), page_size_(page_size) {}
|
: context_(context), type_(type), page_size_(page_size) {}
|
||||||
|
|
||||||
DescriptorHeapPool::~DescriptorHeapPool() { ClearCache(); }
|
DescriptorHeapPool::~DescriptorHeapPool() {
|
||||||
|
// Allow mid-frame destruction in cases like device loss.
|
||||||
|
current_size_ = 0;
|
||||||
|
ClearCache();
|
||||||
|
}
|
||||||
|
|
||||||
void DescriptorHeapPool::BeginFrame() {
|
void DescriptorHeapPool::BeginFrame() {
|
||||||
// Don't hold old pages if few descriptors are written, also make 0 usable as
|
// Don't hold old pages if few descriptors are written, also make 0 usable as
|
||||||
|
|
Loading…
Reference in New Issue