blob: fba7674cb4623a05ddb82d87edee48495169c3ef [file] [log] [blame]
/*
* Copyright 2020 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrD3DAMDMemoryAllocator_DEFINED
#define GrD3DAMDMemoryAllocator_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/gpu/d3d/GrD3DTypes.h"
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec"
#endif
#include "D3D12MemAlloc.h"
#if defined(__clang__)
#pragma clang diagnostic pop
#endif
class GrD3DAMDMemoryAllocator : public GrD3DMemoryAllocator {
public:
static sk_sp<GrD3DMemoryAllocator> Make(IDXGIAdapter* adapter, ID3D12Device* device);
~GrD3DAMDMemoryAllocator() override { fAllocator->Release(); }
gr_cp<ID3D12Resource> createResource(D3D12_HEAP_TYPE, const D3D12_RESOURCE_DESC*,
D3D12_RESOURCE_STATES initialResourceState,
sk_sp<GrD3DAlloc>* allocation,
const D3D12_CLEAR_VALUE*) override;
gr_cp<ID3D12Resource> createAliasingResource(sk_sp<GrD3DAlloc>& allocation,
uint64_t localOffset,
const D3D12_RESOURCE_DESC*,
D3D12_RESOURCE_STATES initialResourceState,
const D3D12_CLEAR_VALUE*) override;
class Alloc : public GrD3DAlloc {
public:
Alloc(D3D12MA::Allocation* allocation) : fAllocation(allocation) {}
~Alloc() override {
fAllocation->Release();
}
private:
friend class GrD3DAMDMemoryAllocator;
D3D12MA::Allocation* fAllocation;
};
private:
GrD3DAMDMemoryAllocator(D3D12MA::Allocator* allocator) : fAllocator(allocator) {}
D3D12MA::Allocator* fAllocator;
};
#endif