/* * 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 Make(IDXGIAdapter* adapter, ID3D12Device* device); ~GrD3DAMDMemoryAllocator() override { fAllocator->Release(); } gr_cp createResource(D3D12_HEAP_TYPE, const D3D12_RESOURCE_DESC*, D3D12_RESOURCE_STATES initialResourceState, sk_sp* allocation, const D3D12_CLEAR_VALUE*) override; gr_cp createAliasingResource(sk_sp& 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