diff --git a/.gitignore b/.gitignore index d01ec3a..3722ac6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ build/ -docs/html/ diff --git a/README.md b/README.md index 49d9ec3..6ef4331 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Easy to integrate memory allocation library for Direct3D 12. +**Documentation:** See [D3D12 Memory Allocator](https://gpuopen-librariesandsdks.github.io/D3D12MemoryAllocator/html/) (generated from Doxygen-style comments in [src/D3D12MemAlloc.h](src/D3D12MemAlloc.h)) + **License:** MIT. See [LICENSE.txt](LICENSE.txt) **Changelog:** See [CHANGELOG.md](CHANGELOG.md) @@ -87,15 +89,6 @@ With this one function call: The release comes with precompiled binary executable for "D3D12Sample" application which contains test suite. It is compiled using Visual Studio 2019, so it requires appropriate libraries to work, including "MSVCP140.dll", "VCRUNTIME140.dll", "VCRUNTIME140_1.dll". If its launch fails with error message telling about those files missing, please download and install [Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads), "x64" version. -# Documentation - -Documentation is provided together with the library in form of Doxygen-style comments inside the code, in file "src/D3D12MemAlloc.h". They can be read directly or turned into HTML and other convenient to read formats. Unfortunately we can't provide pregenerated version browseable online. You can generate it on your own by following these steps: - -1. Install [Doxygen](http://www.doxygen.nl/). -2. Open command line and enter "src" directory. -3. Type command: `doxygen` -4. Open following file in a web browser: "docs/html/index.html". - # Copyright notice This software package uses third party software: diff --git a/docs/html/_d3_d12_mem_alloc_8h.html b/docs/html/_d3_d12_mem_alloc_8h.html new file mode 100644 index 0000000..103e065 --- /dev/null +++ b/docs/html/_d3_d12_mem_alloc_8h.html @@ -0,0 +1,219 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MemAlloc.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Classes | +Namespaces | +Macros | +Typedefs | +Enumerations | +Functions | +Variables
+
+
D3D12MemAlloc.h File Reference
+
+
+
#include <d3d12.h>
+#include <dxgi1_4.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  D3D12MA::ALLOCATION_CALLBACKS
 Custom callbacks to CPU memory allocation functions. More...
 
struct  D3D12MA::ALLOCATION_DESC
 Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource. More...
 
class  D3D12MA::Allocation
 Represents single memory allocation. More...
 
struct  D3D12MA::POOL_DESC
 Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool. More...
 
class  D3D12MA::Pool
 Custom memory pool. More...
 
struct  D3D12MA::ALLOCATOR_DESC
 Parameters of created Allocator object. To be used with CreateAllocator(). More...
 
struct  D3D12MA::StatInfo
 Calculated statistics of memory usage in entire allocator. More...
 
struct  D3D12MA::Stats
 General statistics from the current state of the allocator. More...
 
struct  D3D12MA::Budget
 Statistics of current memory usage and available budget, in bytes, for GPU or CPU memory. More...
 
class  D3D12MA::Allocator
 Represents main object of this library initialized for particular ID3D12Device. More...
 
struct  D3D12MA::VIRTUAL_BLOCK_DESC
 Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock(). More...
 
struct  D3D12MA::VIRTUAL_ALLOCATION_DESC
 Parameters of created virtual allocation to be passed to VirtualBlock::Allocate(). More...
 
struct  D3D12MA::VIRTUAL_ALLOCATION_INFO
 Parameters of an existing virtual allocation, returned by VirtualBlock::GetAllocationInfo(). More...
 
class  D3D12MA::VirtualBlock
 Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory. More...
 
+ + + +

+Namespaces

 D3D12MA
 
+ + + + + +

+Macros

#define D3D12MA_DXGI_1_4   0
 
#define D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT   1
 
+ + + + + + + + + + + + + +

+Typedefs

typedef void *(* D3D12MA::ALLOCATE_FUNC_PTR) (size_t Size, size_t Alignment, void *pUserData)
 Pointer to custom callback function that allocates CPU memory. More...
 
typedef void(* D3D12MA::FREE_FUNC_PTR) (void *pMemory, void *pUserData)
 Pointer to custom callback function that deallocates CPU memory. More...
 
typedef enum D3D12MA::ALLOCATION_FLAGS D3D12MA::ALLOCATION_FLAGS
 Bit flags to be used with ALLOCATION_DESC::Flags. More...
 
typedef enum D3D12MA::ALLOCATOR_FLAGS D3D12MA::ALLOCATOR_FLAGS
 Bit flags to be used with ALLOCATOR_DESC::Flags. More...
 
+ + + + + + + +

+Enumerations

enum  D3D12MA::ALLOCATION_FLAGS { D3D12MA::ALLOCATION_FLAG_NONE = 0 +, D3D12MA::ALLOCATION_FLAG_COMMITTED = 0x1 +, D3D12MA::ALLOCATION_FLAG_NEVER_ALLOCATE = 0x2 +, D3D12MA::ALLOCATION_FLAG_WITHIN_BUDGET = 0x4 + }
 Bit flags to be used with ALLOCATION_DESC::Flags. More...
 
enum  D3D12MA::ALLOCATOR_FLAGS { D3D12MA::ALLOCATOR_FLAG_NONE = 0 +, D3D12MA::ALLOCATOR_FLAG_SINGLETHREADED = 0x1 +, D3D12MA::ALLOCATOR_FLAG_ALWAYS_COMMITTED = 0x2 + }
 Bit flags to be used with ALLOCATOR_DESC::Flags. More...
 
+ + + + + + + +

+Functions

HRESULT D3D12MA::CreateAllocator (const ALLOCATOR_DESC *pDesc, Allocator **ppAllocator)
 Creates new main D3D12MA::Allocator object and returns it through ppAllocator. More...
 
HRESULT D3D12MA::CreateVirtualBlock (const VIRTUAL_BLOCK_DESC *pDesc, VirtualBlock **ppVirtualBlock)
 Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock. More...
 
+ + + + +

+Variables

const UINT D3D12MA::HEAP_TYPE_COUNT = 4
 Number of D3D12 memory heap types supported. More...
 
+

Macro Definition Documentation

+ +

◆ D3D12MA_DXGI_1_4

+ +
+
+ + + + +
#define D3D12MA_DXGI_1_4   0
+
+ +
+
+ +

◆ D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT

+ +
+
+ + + + +
#define D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT   1
+
+ +
+
+
+ + + + diff --git a/docs/html/_d3_d12_mem_alloc_8h_source.html b/docs/html/_d3_d12_mem_alloc_8h_source.html new file mode 100644 index 0000000..ae851b7 --- /dev/null +++ b/docs/html/_d3_d12_mem_alloc_8h_source.html @@ -0,0 +1,670 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MemAlloc.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
D3D12MemAlloc.h
+
+
+Go to the documentation of this file.
1 //
+
2 // Copyright (c) 2019-2021 Advanced Micro Devices, Inc. All rights reserved.
+
3 //
+
4 // Permission is hereby granted, free of charge, to any person obtaining a copy
+
5 // of this software and associated documentation files (the "Software"), to deal
+
6 // in the Software without restriction, including without limitation the rights
+
7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
8 // copies of the Software, and to permit persons to whom the Software is
+
9 // furnished to do so, subject to the following conditions:
+
10 //
+
11 // The above copyright notice and this permission notice shall be included in
+
12 // all copies or substantial portions of the Software.
+
13 //
+
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+
20 // THE SOFTWARE.
+
21 //
+
22 
+
23 #pragma once
+
24 
+
684 // If using this library on a platform different than Windows PC or want to use different version of DXGI,
+
685 // you should include D3D12-compatible headers before this library on your own and define this macro.
+
686 #ifndef D3D12MA_D3D12_HEADERS_ALREADY_INCLUDED
+
687  #include <d3d12.h>
+
688  #include <dxgi1_4.h>
+
689 #endif
+
690 
+
691 // Define this macro to 0 to disable usage of DXGI 1.4 (needed for IDXGIAdapter3 and query for memory budget).
+
692 #ifndef D3D12MA_DXGI_1_4
+
693  #ifdef __IDXGIAdapter3_INTERFACE_DEFINED__
+
694  #define D3D12MA_DXGI_1_4 1
+
695  #else
+
696  #define D3D12MA_DXGI_1_4 0
+
697  #endif
+
698 #endif
+
699 
+
700 /*
+
701 When defined to value other than 0, the library will try to use
+
702 D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT or D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT
+
703 for created textures when possible, which can save memory because some small textures
+
704 may get their alignment 4K and their size a multiply of 4K instead of 64K.
+
705 
+
706 #define D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT 0
+
707  Disables small texture alignment.
+
708 #define D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT 1
+
709  Enables conservative algorithm that will use small alignment only for some textures
+
710  that are surely known to support it.
+
711 #define D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT 2
+
712  Enables query for small alignment to D3D12 (based on Microsoft sample) which will
+
713  enable small alignment for more textures, but will also generate D3D Debug Layer
+
714  error #721 on call to ID3D12Device::GetResourceAllocationInfo, which you should just
+
715  ignore.
+
716 */
+
717 #ifndef D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT
+
718  #define D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT 1
+
719 #endif
+
720 
+
722 
+
723 #define D3D12MA_CLASS_NO_COPY(className) \
+
724  private: \
+
725  className(const className&) = delete; \
+
726  className(className&&) = delete; \
+
727  className& operator=(const className&) = delete; \
+
728  className& operator=(className&&) = delete;
+
729 
+
730 // To be used with MAKE_HRESULT to define custom error codes.
+
731 #define FACILITY_D3D12MA 3542
+
732 
+
734 
+
735 namespace D3D12MA
+
736 {
+
737 
+
739 class AllocatorPimpl;
+
740 class PoolPimpl;
+
741 class NormalBlock;
+
742 class BlockVector;
+
743 class CommittedAllocationList;
+
744 class JsonWriter;
+
745 class VirtualBlockPimpl;
+
747 
+
748 class Pool;
+
749 class Allocator;
+
750 struct StatInfo;
+
751 
+
753 typedef void* (*ALLOCATE_FUNC_PTR)(size_t Size, size_t Alignment, void* pUserData);
+
759 typedef void (*FREE_FUNC_PTR)(void* pMemory, void* pUserData);
+
760 
+ +
763 {
+ + +
769  void* pUserData;
+
770 };
+
771 
+
773 typedef enum ALLOCATION_FLAGS
+
774 {
+ +
777 
+ +
784 
+ +
795 
+ + +
801 
+ +
804 {
+ +
813  D3D12_HEAP_TYPE HeapType;
+
829  D3D12_HEAP_FLAGS ExtraHeapFlags;
+ +
836 };
+
837 
+ +
853 {
+
854 public:
+
860  void Release();
+
861 
+
870  UINT64 GetOffset() const;
+
871 
+
880  UINT64 GetSize() const { return m_Size; }
+
881 
+
886  ID3D12Resource* GetResource() const { return m_Resource; }
+
887 
+
892  ID3D12Heap* GetHeap() const;
+
893 
+
901  void SetName(LPCWSTR Name);
+
902 
+
909  LPCWSTR GetName() const { return m_Name; }
+
910 
+
928  BOOL WasZeroInitialized() const { return m_PackedData.WasZeroInitialized(); }
+
929 
+
930 private:
+
931  friend class AllocatorPimpl;
+
932  friend class BlockVector;
+ +
934  friend class JsonWriter;
+ +
936  template<typename T> friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS&, T*);
+
937  template<typename T> friend class PoolAllocator;
+
938 
+
939  enum Type
+
940  {
+
941  TYPE_COMMITTED,
+
942  TYPE_PLACED,
+
943  TYPE_HEAP,
+
944  TYPE_COUNT
+
945  };
+
946 
+
947  AllocatorPimpl* m_Allocator;
+
948  UINT64 m_Size;
+
949  ID3D12Resource* m_Resource;
+
950  UINT m_CreationFrameIndex;
+
951  wchar_t* m_Name;
+
952 
+
953  union
+
954  {
+
955  struct
+
956  {
+ + + + +
961 
+
962  struct
+
963  {
+
964  UINT64 offset;
+
965  NormalBlock* block;
+ +
967 
+
968  struct
+
969  {
+
970  // Beginning must be compatible with m_Committed.
+ +
972  Allocation* prev;
+
973  Allocation* next;
+
974  ID3D12Heap* heap;
+ +
976  };
+
977 
+
978  struct PackedData
+
979  {
+
980  public:
+
981  PackedData() :
+
982  m_Type(0), m_ResourceDimension(0), m_ResourceFlags(0), m_TextureLayout(0), m_WasZeroInitialized(0) { }
+
983 
+
984  Type GetType() const { return (Type)m_Type; }
+
985  D3D12_RESOURCE_DIMENSION GetResourceDimension() const { return (D3D12_RESOURCE_DIMENSION)m_ResourceDimension; }
+
986  D3D12_RESOURCE_FLAGS GetResourceFlags() const { return (D3D12_RESOURCE_FLAGS)m_ResourceFlags; }
+
987  D3D12_TEXTURE_LAYOUT GetTextureLayout() const { return (D3D12_TEXTURE_LAYOUT)m_TextureLayout; }
+
988  BOOL WasZeroInitialized() const { return (BOOL)m_WasZeroInitialized; }
+
989 
+
990  void SetType(Type type);
+
991  void SetResourceDimension(D3D12_RESOURCE_DIMENSION resourceDimension);
+
992  void SetResourceFlags(D3D12_RESOURCE_FLAGS resourceFlags);
+
993  void SetTextureLayout(D3D12_TEXTURE_LAYOUT textureLayout);
+
994  void SetWasZeroInitialized(BOOL wasZeroInitialized) { m_WasZeroInitialized = wasZeroInitialized ? 1 : 0; }
+
995 
+
996  private:
+
997  UINT m_Type : 2; // enum Type
+
998  UINT m_ResourceDimension : 3; // enum D3D12_RESOURCE_DIMENSION
+
999  UINT m_ResourceFlags : 24; // flags D3D12_RESOURCE_FLAGS
+
1000  UINT m_TextureLayout : 9; // enum D3D12_TEXTURE_LAYOUT
+
1001  UINT m_WasZeroInitialized : 1; // BOOL
+
1002  } m_PackedData;
+
1003 
+
1004  Allocation(AllocatorPimpl* allocator, UINT64 size, BOOL wasZeroInitialized);
+
1005  ~Allocation();
+
1006  void InitCommitted(CommittedAllocationList* list);
+
1007  void InitPlaced(UINT64 offset, UINT64 alignment, NormalBlock* block);
+
1008  void InitHeap(CommittedAllocationList* list, ID3D12Heap* heap);
+
1009  template<typename D3D12_RESOURCE_DESC_T>
+
1010  void SetResource(ID3D12Resource* resource, const D3D12_RESOURCE_DESC_T* pResourceDesc);
+
1011  void FreeName();
+
1012 
+
1013  D3D12MA_CLASS_NO_COPY(Allocation)
+
1014 };
+
1015 
+ +
1018 {
+
1024  D3D12_HEAP_PROPERTIES HeapProperties;
+
1035  D3D12_HEAP_FLAGS HeapFlags;
+
1042  UINT64 BlockSize;
+ + + +
1061 };
+
1062 
+
1071 class Pool
+
1072 {
+
1073 public:
+
1079  void Release();
+
1080 
+ +
1086 
+
1089  void CalculateStats(StatInfo* pStats);
+
1090 
+
1098  void SetName(LPCWSTR Name);
+
1099 
+
1106  LPCWSTR GetName() const;
+
1107 
+
1108 private:
+
1109  friend class Allocator;
+
1110  friend class AllocatorPimpl;
+
1111  template<typename T> friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS&, T*);
+
1112 
+
1113  PoolPimpl* m_Pimpl;
+
1114 
+
1115  Pool(Allocator* allocator, const POOL_DESC &desc);
+
1116  ~Pool();
+
1117 
+
1118  D3D12MA_CLASS_NO_COPY(Pool)
+
1119 };
+
1120 
+
1122 typedef enum ALLOCATOR_FLAGS
+
1123 {
+ +
1126 
+ +
1135 
+ + +
1142 
+ +
1145 {
+ +
1148 
+
1153  ID3D12Device* pDevice;
+
1154 
+ +
1160 
+ +
1166 
+
1171  IDXGIAdapter* pAdapter;
+
1172 };
+
1173 
+
1177 const UINT HEAP_TYPE_COUNT = 4;
+
1178 
+
1182 struct StatInfo
+
1183 {
+ + + +
1191  UINT64 UsedBytes;
+
1193  UINT64 UnusedBytes;
+ + + + + + +
1200 };
+
1201 
+
1205 struct Stats
+
1206 {
+ + +
1214 };
+
1215 
+
1218 struct Budget
+
1219 {
+
1222  UINT64 BlockBytes;
+
1223 
+ +
1231 
+
1240  UINT64 UsageBytes;
+
1241 
+
1251  UINT64 BudgetBytes;
+
1252 };
+
1253 
+ +
1264 {
+
1265 public:
+
1271  void Release();
+
1272 
+
1274  const D3D12_FEATURE_DATA_D3D12_OPTIONS& GetD3D12Options() const;
+
1282  BOOL IsUMA() const;
+
1290  BOOL IsCacheCoherentUMA() const;
+
1291 
+ +
1321  const ALLOCATION_DESC* pAllocDesc,
+
1322  const D3D12_RESOURCE_DESC* pResourceDesc,
+
1323  D3D12_RESOURCE_STATES InitialResourceState,
+
1324  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
+
1325  Allocation** ppAllocation,
+
1326  REFIID riidResource,
+
1327  void** ppvResource);
+
1328 
+
1329 #ifdef __ID3D12Device4_INTERFACE_DEFINED__
+ +
1338  const ALLOCATION_DESC* pAllocDesc,
+
1339  const D3D12_RESOURCE_DESC* pResourceDesc,
+
1340  D3D12_RESOURCE_STATES InitialResourceState,
+
1341  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
+
1342  ID3D12ProtectedResourceSession *pProtectedSession,
+
1343  Allocation** ppAllocation,
+
1344  REFIID riidResource,
+
1345  void** ppvResource);
+
1346 #endif // #ifdef __ID3D12Device4_INTERFACE_DEFINED__
+
1347 
+
1348 #ifdef __ID3D12Device8_INTERFACE_DEFINED__
+ +
1356  const ALLOCATION_DESC* pAllocDesc,
+
1357  const D3D12_RESOURCE_DESC1* pResourceDesc,
+
1358  D3D12_RESOURCE_STATES InitialResourceState,
+
1359  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
+
1360  ID3D12ProtectedResourceSession *pProtectedSession,
+
1361  Allocation** ppAllocation,
+
1362  REFIID riidResource,
+
1363  void** ppvResource);
+
1364 #endif // #ifdef __ID3D12Device4_INTERFACE_DEFINED__
+
1365 
+ +
1386  const ALLOCATION_DESC* pAllocDesc,
+
1387  const D3D12_RESOURCE_ALLOCATION_INFO* pAllocInfo,
+
1388  Allocation** ppAllocation);
+
1389 
+
1390 #ifdef __ID3D12Device4_INTERFACE_DEFINED__
+ +
1399  const ALLOCATION_DESC* pAllocDesc,
+
1400  const D3D12_RESOURCE_ALLOCATION_INFO* pAllocInfo,
+
1401  ID3D12ProtectedResourceSession *pProtectedSession,
+
1402  Allocation** ppAllocation);
+
1403 #endif // #ifdef __ID3D12Device4_INTERFACE_DEFINED__
+
1404 
+ +
1428  Allocation* pAllocation,
+
1429  UINT64 AllocationLocalOffset,
+
1430  const D3D12_RESOURCE_DESC* pResourceDesc,
+
1431  D3D12_RESOURCE_STATES InitialResourceState,
+
1432  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
+
1433  REFIID riidResource,
+
1434  void** ppvResource);
+
1435 
+
1438  HRESULT CreatePool(
+
1439  const POOL_DESC* pPoolDesc,
+
1440  Pool** ppPool);
+
1441 
+
1446  void SetCurrentFrameIndex(UINT frameIndex);
+
1447 
+
1450  void CalculateStats(Stats* pStats);
+
1451 
+
1463  void GetBudget(Budget* pGpuBudget, Budget* pCpuBudget);
+
1464 
+
1466 
+
1469  void BuildStatsString(WCHAR** ppStatsString, BOOL DetailedMap) const;
+
1470 
+
1472  void FreeStatsString(WCHAR* pStatsString) const;
+
1473 
+
1474 private:
+
1475  friend HRESULT CreateAllocator(const ALLOCATOR_DESC*, Allocator**);
+
1476  template<typename T> friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS&, T*);
+
1477  friend class Pool;
+
1478 
+
1479  Allocator(const ALLOCATION_CALLBACKS& allocationCallbacks, const ALLOCATOR_DESC& desc);
+
1480  ~Allocator();
+
1481 
+
1482  AllocatorPimpl* m_Pimpl;
+
1483 
+
1484  D3D12MA_CLASS_NO_COPY(Allocator)
+
1485 };
+
1486 
+ +
1489 {
+
1495  UINT64 Size;
+ +
1501 };
+
1502 
+ +
1505 {
+
1510  UINT64 Size;
+
1515  UINT64 Alignment;
+
1520  void* pUserData;
+
1521 };
+
1522 
+ +
1525 {
+
1530  UINT64 size;
+
1535  void* pUserData;
+
1536 };
+
1537 
+ +
1547 {
+
1548 public:
+
1553  void Release();
+
1554 
+
1557  BOOL IsEmpty() const;
+
1560  void GetAllocationInfo(UINT64 offset, VIRTUAL_ALLOCATION_INFO* pInfo) const;
+
1561 
+
1567  HRESULT Allocate(const VIRTUAL_ALLOCATION_DESC* pDesc, UINT64* pOffset);
+
1570  void FreeAllocation(UINT64 offset);
+
1573  void Clear();
+
1576  void SetAllocationUserData(UINT64 offset, void* pUserData);
+
1577 
+
1580  void CalculateStats(StatInfo* pInfo) const;
+
1581 
+
1585  void BuildStatsString(WCHAR** ppStatsString) const;
+
1586 
+
1589  void FreeStatsString(WCHAR* pStatsString) const;
+
1590 
+
1591 private:
+ +
1593  template<typename T> friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS&, T*);
+
1594 
+
1595  VirtualBlockPimpl* m_Pimpl;
+
1596 
+
1597  VirtualBlock(const ALLOCATION_CALLBACKS& allocationCallbacks, const VIRTUAL_BLOCK_DESC& desc);
+
1598  ~VirtualBlock();
+
1599 
+
1600  D3D12MA_CLASS_NO_COPY(VirtualBlock)
+
1601 };
+
1602 
+
1607 HRESULT CreateAllocator(const ALLOCATOR_DESC* pDesc, Allocator** ppAllocator);
+
1608 
+
1613 HRESULT CreateVirtualBlock(const VIRTUAL_BLOCK_DESC* pDesc, VirtualBlock** ppVirtualBlock);
+
1614 
+
1615 } // namespace D3D12MA
+
1616 
+
1618 DEFINE_ENUM_FLAG_OPERATORS(D3D12MA::ALLOCATION_FLAGS);
+
1619 DEFINE_ENUM_FLAG_OPERATORS(D3D12MA::ALLOCATOR_FLAGS);
+
Represents single memory allocation.
Definition: D3D12MemAlloc.h:853
+
friend class BlockVector
Definition: D3D12MemAlloc.h:932
+
BOOL WasZeroInitialized() const
Returns TRUE if the memory of the allocation was filled with zeros when the allocation was created.
Definition: D3D12MemAlloc.h:928
+
struct D3D12MA::Allocation::@0::@3 m_Placed
+
friend struct CommittedAllocationListItemTraits
Definition: D3D12MemAlloc.h:935
+
NormalBlock * block
Definition: D3D12MemAlloc.h:965
+
UINT64 GetOffset() const
Returns offset in bytes from the start of memory heap.
+
friend class CommittedAllocationList
Definition: D3D12MemAlloc.h:933
+
ID3D12Heap * heap
Definition: D3D12MemAlloc.h:974
+
struct D3D12MA::Allocation::@0::@2 m_Committed
+
ID3D12Resource * GetResource() const
Returns D3D12 resource associated with this object.
Definition: D3D12MemAlloc.h:886
+
LPCWSTR GetName() const
Returns the name associated with the allocation object.
Definition: D3D12MemAlloc.h:909
+
Allocation * next
Definition: D3D12MemAlloc.h:959
+
friend class AllocatorPimpl
Definition: D3D12MemAlloc.h:931
+
UINT64 offset
Definition: D3D12MemAlloc.h:964
+
UINT64 GetSize() const
Returns size in bytes of the allocation.
Definition: D3D12MemAlloc.h:880
+
friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)
+
friend class JsonWriter
Definition: D3D12MemAlloc.h:934
+
CommittedAllocationList * list
Definition: D3D12MemAlloc.h:957
+
ID3D12Heap * GetHeap() const
Returns memory heap that the resource is created in.
+
void Release()
Deletes this object.
+
Allocation * prev
Definition: D3D12MemAlloc.h:958
+
struct D3D12MA::Allocation::@0::@4 m_Heap
+
void SetName(LPCWSTR Name)
Associates a name with the allocation object. This name is for use in debug diagnostics and tools.
+
friend class PoolAllocator
Definition: D3D12MemAlloc.h:937
+
Represents main object of this library initialized for particular ID3D12Device.
Definition: D3D12MemAlloc.h:1264
+
BOOL IsCacheCoherentUMA() const
Returns true if D3D12_FEATURE_DATA_ARCHITECTURE1::CacheCoherentUMA was found to be true.
+
void BuildStatsString(WCHAR **ppStatsString, BOOL DetailedMap) const
Builds and returns statistics as a string in JSON format.
+
void SetCurrentFrameIndex(UINT frameIndex)
Sets the index of the current frame.
+
HRESULT AllocateMemory1(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation)
Similar to Allocator::AllocateMemory, but supports additional parameter pProtectedSession.
+
friend HRESULT CreateAllocator(const ALLOCATOR_DESC *, Allocator **)
Creates new main D3D12MA::Allocator object and returns it through ppAllocator.
+
void FreeStatsString(WCHAR *pStatsString) const
Frees memory of a string returned from Allocator::BuildStatsString.
+
const D3D12_FEATURE_DATA_D3D12_OPTIONS & GetD3D12Options() const
Returns cached options retrieved from D3D12 device.
+
friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)
+
BOOL IsUMA() const
Returns true if D3D12_FEATURE_DATA_ARCHITECTURE1::UMA was found to be true.
+
HRESULT CreateResource(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)
Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation functi...
+
HRESULT CreatePool(const POOL_DESC *pPoolDesc, Pool **ppPool)
Creates custom pool.
+
HRESULT CreateAliasingResource(Allocation *pAllocation, UINT64 AllocationLocalOffset, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riidResource, void **ppvResource)
Creates a new resource in place of an existing allocation. This is useful for memory aliasing.
+
void GetBudget(Budget *pGpuBudget, Budget *pCpuBudget)
Retrieves information about current memory budget.
+
HRESULT AllocateMemory(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, Allocation **ppAllocation)
Allocates memory without creating any resource placed in it.
+
HRESULT CreateResource2(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC1 *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)
Similar to Allocator::CreateResource1, but supports new structure D3D12_RESOURCE_DESC1.
+
void CalculateStats(Stats *pStats)
Retrieves statistics from the current state of the allocator.
+
void Release()
Deletes this object.
+
HRESULT CreateResource1(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)
Similar to Allocator::CreateResource, but supports additional parameter pProtectedSession.
+
Custom memory pool.
Definition: D3D12MemAlloc.h:1072
+
void SetName(LPCWSTR Name)
Associates a name with the pool. This name is for use in debug diagnostics and tools.
+
void Release()
Deletes pool object, frees D3D12 heaps (memory blocks) managed by it. Allocations and resources must ...
+
LPCWSTR GetName() const
Returns the name associated with the pool object.
+
friend class AllocatorPimpl
Definition: D3D12MemAlloc.h:1110
+
void CalculateStats(StatInfo *pStats)
Retrieves statistics from the current state of this pool.
+
friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)
+
POOL_DESC GetDesc() const
Returns copy of parameters of the pool.
+
Represents pure allocation algorithm and a data structure with allocations in some memory block,...
Definition: D3D12MemAlloc.h:1547
+
void FreeAllocation(UINT64 offset)
Frees the allocation at given offset.
+
void CalculateStats(StatInfo *pInfo) const
Retrieves statistics from the current state of the block.
+
void SetAllocationUserData(UINT64 offset, void *pUserData)
Changes custom pointer for an allocation at given offset to a new value.
+
void Release()
Destroys this object and frees it from memory.
+
void GetAllocationInfo(UINT64 offset, VIRTUAL_ALLOCATION_INFO *pInfo) const
Returns information about an allocation at given offset - its size and custom pointer.
+
void FreeStatsString(WCHAR *pStatsString) const
Frees memory of a string returned from VirtualBlock::BuildStatsString.
+
BOOL IsEmpty() const
Returns true if the block is empty - contains 0 allocations.
+
void BuildStatsString(WCHAR **ppStatsString) const
Builds and returns statistics as a string in JSON format, including the list of allocations with thei...
+
friend void D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)
+
HRESULT Allocate(const VIRTUAL_ALLOCATION_DESC *pDesc, UINT64 *pOffset)
Creates new allocation.
+
friend HRESULT CreateVirtualBlock(const VIRTUAL_BLOCK_DESC *, VirtualBlock **)
Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.
+
void Clear()
Frees all the allocations.
+
Definition: D3D12MemAlloc.h:736
+
void *(* ALLOCATE_FUNC_PTR)(size_t Size, size_t Alignment, void *pUserData)
Pointer to custom callback function that allocates CPU memory.
Definition: D3D12MemAlloc.h:753
+
void(* FREE_FUNC_PTR)(void *pMemory, void *pUserData)
Pointer to custom callback function that deallocates CPU memory.
Definition: D3D12MemAlloc.h:759
+
HRESULT CreateAllocator(const ALLOCATOR_DESC *pDesc, Allocator **ppAllocator)
Creates new main D3D12MA::Allocator object and returns it through ppAllocator.
+
const UINT HEAP_TYPE_COUNT
Number of D3D12 memory heap types supported.
Definition: D3D12MemAlloc.h:1177
+
ALLOCATION_FLAGS
Bit flags to be used with ALLOCATION_DESC::Flags.
Definition: D3D12MemAlloc.h:774
+
@ ALLOCATION_FLAG_NONE
Zero.
Definition: D3D12MemAlloc.h:776
+
@ ALLOCATION_FLAG_COMMITTED
Definition: D3D12MemAlloc.h:783
+
@ ALLOCATION_FLAG_NEVER_ALLOCATE
Definition: D3D12MemAlloc.h:794
+
@ ALLOCATION_FLAG_WITHIN_BUDGET
Definition: D3D12MemAlloc.h:799
+
ALLOCATOR_FLAGS
Bit flags to be used with ALLOCATOR_DESC::Flags.
Definition: D3D12MemAlloc.h:1123
+
@ ALLOCATOR_FLAG_ALWAYS_COMMITTED
Definition: D3D12MemAlloc.h:1140
+
@ ALLOCATOR_FLAG_SINGLETHREADED
Definition: D3D12MemAlloc.h:1134
+
@ ALLOCATOR_FLAG_NONE
Zero.
Definition: D3D12MemAlloc.h:1125
+
HRESULT CreateVirtualBlock(const VIRTUAL_BLOCK_DESC *pDesc, VirtualBlock **ppVirtualBlock)
Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.
+
Custom callbacks to CPU memory allocation functions.
Definition: D3D12MemAlloc.h:763
+
FREE_FUNC_PTR pFree
Dellocation function.
Definition: D3D12MemAlloc.h:767
+
ALLOCATE_FUNC_PTR pAllocate
Allocation function.
Definition: D3D12MemAlloc.h:765
+
void * pUserData
Custom data that will be passed to allocation and deallocation functions as pUserData parameter.
Definition: D3D12MemAlloc.h:769
+
Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.
Definition: D3D12MemAlloc.h:804
+
ALLOCATION_FLAGS Flags
Flags.
Definition: D3D12MemAlloc.h:806
+
D3D12_HEAP_FLAGS ExtraHeapFlags
Additional heap flags to be used when allocating memory.
Definition: D3D12MemAlloc.h:829
+
D3D12_HEAP_TYPE HeapType
The type of memory heap where the new allocation should be placed.
Definition: D3D12MemAlloc.h:813
+
Pool * CustomPool
Custom pool to place the new resource in. Optional.
Definition: D3D12MemAlloc.h:835
+
Parameters of created Allocator object. To be used with CreateAllocator().
Definition: D3D12MemAlloc.h:1145
+
const ALLOCATION_CALLBACKS * pAllocationCallbacks
Custom CPU memory allocation callbacks. Optional.
Definition: D3D12MemAlloc.h:1165
+
UINT64 PreferredBlockSize
Preferred size of a single ID3D12Heap block to be allocated.
Definition: D3D12MemAlloc.h:1159
+
IDXGIAdapter * pAdapter
Definition: D3D12MemAlloc.h:1171
+
ALLOCATOR_FLAGS Flags
Flags.
Definition: D3D12MemAlloc.h:1147
+
ID3D12Device * pDevice
Definition: D3D12MemAlloc.h:1153
+
Statistics of current memory usage and available budget, in bytes, for GPU or CPU memory.
Definition: D3D12MemAlloc.h:1219
+
UINT64 BudgetBytes
Estimated amount of memory available to the program, in bytes.
Definition: D3D12MemAlloc.h:1251
+
UINT64 UsageBytes
Estimated current memory usage of the program, in bytes.
Definition: D3D12MemAlloc.h:1240
+
UINT64 AllocationBytes
Sum size of all allocations created in particular heap type, in bytes.
Definition: D3D12MemAlloc.h:1230
+
UINT64 BlockBytes
Sum size of all memory blocks allocated from particular heap type, in bytes.
Definition: D3D12MemAlloc.h:1222
+
Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.
Definition: D3D12MemAlloc.h:1018
+
D3D12_HEAP_PROPERTIES HeapProperties
The parameters of memory heap where allocations of this pool should be placed.
Definition: D3D12MemAlloc.h:1024
+
UINT64 MinAllocationAlignment
Additional minimum alignment to be used for all allocations created from this pool....
Definition: D3D12MemAlloc.h:1060
+
D3D12_HEAP_FLAGS HeapFlags
Heap flags to be used when allocating heaps of this pool.
Definition: D3D12MemAlloc.h:1035
+
UINT MinBlockCount
Minimum number of heaps (memory blocks) to be always allocated in this pool, even if they stay empty....
Definition: D3D12MemAlloc.h:1047
+
UINT MaxBlockCount
Maximum number of heaps (memory blocks) that can be allocated in this pool. Optional.
Definition: D3D12MemAlloc.h:1055
+
UINT64 BlockSize
Size of a single heap (memory block) to be allocated as part of this pool, in bytes....
Definition: D3D12MemAlloc.h:1042
+
Calculated statistics of memory usage in entire allocator.
Definition: D3D12MemAlloc.h:1183
+
UINT64 UnusedRangeSizeMax
Definition: D3D12MemAlloc.h:1199
+
UINT64 UnusedRangeSizeMin
Definition: D3D12MemAlloc.h:1197
+
UINT64 UnusedBytes
Total number of bytes occupied by unused ranges.
Definition: D3D12MemAlloc.h:1193
+
UINT64 UnusedRangeSizeAvg
Definition: D3D12MemAlloc.h:1198
+
UINT AllocationCount
Number of D3D12MA::Allocation objects allocated.
Definition: D3D12MemAlloc.h:1187
+
UINT BlockCount
Number of memory blocks (heaps) allocated.
Definition: D3D12MemAlloc.h:1185
+
UINT64 AllocationSizeMin
Definition: D3D12MemAlloc.h:1194
+
UINT64 UsedBytes
Total number of bytes occupied by all allocations.
Definition: D3D12MemAlloc.h:1191
+
UINT64 AllocationSizeMax
Definition: D3D12MemAlloc.h:1196
+
UINT64 AllocationSizeAvg
Definition: D3D12MemAlloc.h:1195
+
UINT UnusedRangeCount
Number of free ranges of memory between allocations.
Definition: D3D12MemAlloc.h:1189
+
General statistics from the current state of the allocator.
Definition: D3D12MemAlloc.h:1206
+
StatInfo HeapType[HEAP_TYPE_COUNT]
Definition: D3D12MemAlloc.h:1213
+
StatInfo Total
Total statistics from all heap types.
Definition: D3D12MemAlloc.h:1208
+
Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().
Definition: D3D12MemAlloc.h:1505
+
UINT64 Size
Size of the allocation.
Definition: D3D12MemAlloc.h:1510
+
UINT64 Alignment
Required alignment of the allocation.
Definition: D3D12MemAlloc.h:1515
+
void * pUserData
Custom pointer to be associated with the allocation.
Definition: D3D12MemAlloc.h:1520
+
Parameters of an existing virtual allocation, returned by VirtualBlock::GetAllocationInfo().
Definition: D3D12MemAlloc.h:1525
+
void * pUserData
Custom pointer associated with the allocation.
Definition: D3D12MemAlloc.h:1535
+
UINT64 size
Size of the allocation.
Definition: D3D12MemAlloc.h:1530
+
Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().
Definition: D3D12MemAlloc.h:1489
+
const ALLOCATION_CALLBACKS * pAllocationCallbacks
Custom CPU memory allocation callbacks. Optional.
Definition: D3D12MemAlloc.h:1500
+
UINT64 Size
Total size of the block.
Definition: D3D12MemAlloc.h:1495
+
+ + + + diff --git a/docs/html/annotated.html b/docs/html/annotated.html new file mode 100644 index 0000000..632c319 --- /dev/null +++ b/docs/html/annotated.html @@ -0,0 +1,93 @@ + + + + + + + +Direct3D 12 Memory Allocator: Class List + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + +
 ND3D12MA
 CALLOCATION_CALLBACKSCustom callbacks to CPU memory allocation functions
 CALLOCATION_DESCParameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource
 CAllocationRepresents single memory allocation
 CPOOL_DESCParameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool
 CPoolCustom memory pool
 CALLOCATOR_DESCParameters of created Allocator object. To be used with CreateAllocator()
 CStatInfoCalculated statistics of memory usage in entire allocator
 CStatsGeneral statistics from the current state of the allocator
 CBudgetStatistics of current memory usage and available budget, in bytes, for GPU or CPU memory
 CAllocatorRepresents main object of this library initialized for particular ID3D12Device
 CVIRTUAL_BLOCK_DESCParameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock()
 CVIRTUAL_ALLOCATION_DESCParameters of created virtual allocation to be passed to VirtualBlock::Allocate()
 CVIRTUAL_ALLOCATION_INFOParameters of an existing virtual allocation, returned by VirtualBlock::GetAllocationInfo()
 CVirtualBlockRepresents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory
+
+
+ + + + diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/html/bc_s.png differ diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/docs/html/bdwn.png differ diff --git a/docs/html/class_d3_d12_m_a_1_1_allocation-members.html b/docs/html/class_d3_d12_m_a_1_1_allocation-members.html new file mode 100644 index 0000000..1de321c --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_allocation-members.html @@ -0,0 +1,99 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
D3D12MA::Allocation Member List
+
+
+ +

This is the complete list of members for D3D12MA::Allocation, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
blockD3D12MA::Allocation
D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)D3D12MA::Allocationfriend
GetHeap() constD3D12MA::Allocation
GetName() constD3D12MA::Allocationinline
GetOffset() constD3D12MA::Allocation
GetResource() constD3D12MA::Allocationinline
GetSize() constD3D12MA::Allocationinline
heapD3D12MA::Allocation
listD3D12MA::Allocation
m_CommittedD3D12MA::Allocation
m_HeapD3D12MA::Allocation
m_PlacedD3D12MA::Allocation
nextD3D12MA::Allocation
offsetD3D12MA::Allocation
prevD3D12MA::Allocation
Release()D3D12MA::Allocation
SetName(LPCWSTR Name)D3D12MA::Allocation
WasZeroInitialized() constD3D12MA::Allocationinline
+ + + + diff --git a/docs/html/class_d3_d12_m_a_1_1_allocation.html b/docs/html/class_d3_d12_m_a_1_1_allocation.html new file mode 100644 index 0000000..8bd1676 --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_allocation.html @@ -0,0 +1,454 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::Allocation Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Public Member Functions | +List of all members
+
+
D3D12MA::Allocation Class Reference
+
+
+ +

Represents single memory allocation. + More...

+ +

#include <D3D12MemAlloc.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void Release ()
 Deletes this object. More...
 
UINT64 GetOffset () const
 Returns offset in bytes from the start of memory heap. More...
 
UINT64 GetSize () const
 Returns size in bytes of the allocation. More...
 
ID3D12Resource * GetResource () const
 Returns D3D12 resource associated with this object. More...
 
ID3D12Heap * GetHeap () const
 Returns memory heap that the resource is created in. More...
 
void SetName (LPCWSTR Name)
 Associates a name with the allocation object. This name is for use in debug diagnostics and tools. More...
 
LPCWSTR GetName () const
 Returns the name associated with the allocation object. More...
 
BOOL WasZeroInitialized () const
 Returns TRUE if the memory of the allocation was filled with zeros when the allocation was created. More...
 
+

Detailed Description

+

Represents single memory allocation.

+

It may be either implicit memory heap dedicated to a single resource or a specific region of a bigger heap plus unique offset.

+

To create such object, fill structure D3D12MA::ALLOCATION_DESC and call function Allocator::CreateResource.

+

The object remembers size and some other information. To retrieve this information, use methods of this class.

+

The object also remembers ID3D12Resource and "owns" a reference to it, so it calls Release() on the resource when destroyed.

+

Member Function Documentation

+ +

◆ GetHeap()

+ +
+
+ + + + + + + +
ID3D12Heap* D3D12MA::Allocation::GetHeap () const
+
+ +

Returns memory heap that the resource is created in.

+

If the Allocation represents committed resource with implicit heap, returns NULL.

+ +
+
+ +

◆ GetName()

+ +
+
+ + + + + +
+ + + + + + + +
LPCWSTR D3D12MA::Allocation::GetName () const
+
+inline
+
+ +

Returns the name associated with the allocation object.

+

Returned string points to an internal copy.

+

If no name was associated with the allocation, returns null.

+ +
+
+ +

◆ GetOffset()

+ +
+
+ + + + + + + +
UINT64 D3D12MA::Allocation::GetOffset () const
+
+ +

Returns offset in bytes from the start of memory heap.

+

You usually don't need to use this offset. If you create a buffer or a texture together with the allocation using function D3D12MA::Allocator::CreateResource, functions that operate on that resource refer to the beginning of the resource, not entire memory heap.

+

If the Allocation represents committed resource with implicit heap, returns 0.

+ +
+
+ +

◆ GetResource()

+ +
+
+ + + + + +
+ + + + + + + +
ID3D12Resource* D3D12MA::Allocation::GetResource () const
+
+inline
+
+ +

Returns D3D12 resource associated with this object.

+

Calling this method doesn't increment resource's reference counter.

+ +
+
+ +

◆ GetSize()

+ +
+
+ + + + + +
+ + + + + + + +
UINT64 D3D12MA::Allocation::GetSize () const
+
+inline
+
+ +

Returns size in bytes of the allocation.

+
    +
  • If you created a buffer or a texture together with the allocation using function D3D12MA::Allocator::CreateResource, this is the size of the resource returned by ID3D12Device::GetResourceAllocationInfo.
  • +
  • For allocations made out of bigger memory blocks, this also is the size of the memory region assigned exclusively to this allocation.
  • +
  • For resources created as committed, this value may not be accurate. DirectX implementation may optimize memory usage internally so that you may even observe regions of ID3D12Resource::GetGPUVirtualAddress() + Allocation::GetSize() to overlap in memory and still work correctly.
  • +
+ +
+
+ +

◆ Release()

+ +
+
+ + + + + + + +
void D3D12MA::Allocation::Release ()
+
+ +

Deletes this object.

+

This function must be used instead of destructor, which is private. There is no reference counting involved.

+ +
+
+ +

◆ SetName()

+ +
+
+ + + + + + + + +
void D3D12MA::Allocation::SetName (LPCWSTR Name)
+
+ +

Associates a name with the allocation object. This name is for use in debug diagnostics and tools.

+

Internal copy of the string is made, so the memory pointed by the argument can be changed of freed immediately after this call.

+

Name can be null.

+ +
+
+ +

◆ WasZeroInitialized()

+ +
+
+ + + + + +
+ + + + + + + +
BOOL D3D12MA::Allocation::WasZeroInitialized () const
+
+inline
+
+ +

Returns TRUE if the memory of the allocation was filled with zeros when the allocation was created.

+

Returns TRUE only if the allocator is sure that the entire memory where the allocation was created was filled with zeros at the moment the allocation was made.

+

Returns FALSE if the memory could potentially contain garbage data. If it's a render-target or depth-stencil texture, it then needs proper initialization with ClearRenderTargetView, ClearDepthStencilView, DiscardResource, or a copy operation, as described on page: ID3D12Device::CreatePlacedResource method - Notes on the required resource initialization. Please note that rendering a fullscreen triangle or quad to the texture as a render target is not a proper way of initialization!

+

See also articles: "Coming to DirectX 12: More control over memory allocation", "Initializing DX12 Textures After Allocation and Aliasing".

+ +
+
+

Member Data Documentation

+ +

◆ block

+ +
+
+ + + + +
NormalBlock* D3D12MA::Allocation::block
+
+ +
+
+ +

◆ heap

+ +
+
+ + + + +
ID3D12Heap* D3D12MA::Allocation::heap
+
+ +
+
+ +

◆ list

+ +
+
+ + + + +
CommittedAllocationList* D3D12MA::Allocation::list
+
+ +
+
+ +

◆ 

+ +
+
+ + + + +
struct { ... } D3D12MA::Allocation::m_Committed
+
+ +
+
+ +

◆ 

+ +
+
+ + + + +
struct { ... } D3D12MA::Allocation::m_Heap
+
+ +
+
+ +

◆ 

+ +
+
+ + + + +
struct { ... } D3D12MA::Allocation::m_Placed
+
+ +
+
+ +

◆ next

+ +
+
+ + + + +
Allocation* D3D12MA::Allocation::next
+
+ +
+
+ +

◆ offset

+ +
+
+ + + + +
UINT64 D3D12MA::Allocation::offset
+
+ +
+
+ +

◆ prev

+ +
+
+ + + + +
Allocation* D3D12MA::Allocation::prev
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/class_d3_d12_m_a_1_1_allocator-members.html b/docs/html/class_d3_d12_m_a_1_1_allocator-members.html new file mode 100644 index 0000000..3fa3052 --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_allocator-members.html @@ -0,0 +1,99 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
D3D12MA::Allocator Member List
+
+
+ +

This is the complete list of members for D3D12MA::Allocator, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
AllocateMemory(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, Allocation **ppAllocation)D3D12MA::Allocator
AllocateMemory1(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation)D3D12MA::Allocator
BuildStatsString(WCHAR **ppStatsString, BOOL DetailedMap) constD3D12MA::Allocator
CalculateStats(Stats *pStats)D3D12MA::Allocator
CreateAliasingResource(Allocation *pAllocation, UINT64 AllocationLocalOffset, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riidResource, void **ppvResource)D3D12MA::Allocator
CreateAllocator(const ALLOCATOR_DESC *, Allocator **)D3D12MA::Allocatorfriend
CreatePool(const POOL_DESC *pPoolDesc, Pool **ppPool)D3D12MA::Allocator
CreateResource(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)D3D12MA::Allocator
CreateResource1(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)D3D12MA::Allocator
CreateResource2(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC1 *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)D3D12MA::Allocator
D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)D3D12MA::Allocatorfriend
FreeStatsString(WCHAR *pStatsString) constD3D12MA::Allocator
GetBudget(Budget *pGpuBudget, Budget *pCpuBudget)D3D12MA::Allocator
GetD3D12Options() constD3D12MA::Allocator
IsCacheCoherentUMA() constD3D12MA::Allocator
IsUMA() constD3D12MA::Allocator
Release()D3D12MA::Allocator
SetCurrentFrameIndex(UINT frameIndex)D3D12MA::Allocator
+ + + + diff --git a/docs/html/class_d3_d12_m_a_1_1_allocator.html b/docs/html/class_d3_d12_m_a_1_1_allocator.html new file mode 100644 index 0000000..e818e16 --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_allocator.html @@ -0,0 +1,769 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::Allocator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
D3D12MA::Allocator Class Reference
+
+
+ +

Represents main object of this library initialized for particular ID3D12Device. + More...

+ +

#include <D3D12MemAlloc.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void Release ()
 Deletes this object. More...
 
const D3D12_FEATURE_DATA_D3D12_OPTIONS & GetD3D12Options () const
 Returns cached options retrieved from D3D12 device. More...
 
BOOL IsUMA () const
 Returns true if D3D12_FEATURE_DATA_ARCHITECTURE1::UMA was found to be true. More...
 
BOOL IsCacheCoherentUMA () const
 Returns true if D3D12_FEATURE_DATA_ARCHITECTURE1::CacheCoherentUMA was found to be true. More...
 
HRESULT CreateResource (const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)
 Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation function. More...
 
HRESULT CreateResource1 (const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)
 Similar to Allocator::CreateResource, but supports additional parameter pProtectedSession. More...
 
HRESULT CreateResource2 (const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC1 *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)
 Similar to Allocator::CreateResource1, but supports new structure D3D12_RESOURCE_DESC1. More...
 
HRESULT AllocateMemory (const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, Allocation **ppAllocation)
 Allocates memory without creating any resource placed in it. More...
 
HRESULT AllocateMemory1 (const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_ALLOCATION_INFO *pAllocInfo, ID3D12ProtectedResourceSession *pProtectedSession, Allocation **ppAllocation)
 Similar to Allocator::AllocateMemory, but supports additional parameter pProtectedSession. More...
 
HRESULT CreateAliasingResource (Allocation *pAllocation, UINT64 AllocationLocalOffset, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, REFIID riidResource, void **ppvResource)
 Creates a new resource in place of an existing allocation. This is useful for memory aliasing. More...
 
HRESULT CreatePool (const POOL_DESC *pPoolDesc, Pool **ppPool)
 Creates custom pool. More...
 
void SetCurrentFrameIndex (UINT frameIndex)
 Sets the index of the current frame. More...
 
void CalculateStats (Stats *pStats)
 Retrieves statistics from the current state of the allocator. More...
 
void GetBudget (Budget *pGpuBudget, Budget *pCpuBudget)
 Retrieves information about current memory budget. More...
 
void BuildStatsString (WCHAR **ppStatsString, BOOL DetailedMap) const
 Builds and returns statistics as a string in JSON format. More...
 
void FreeStatsString (WCHAR *pStatsString) const
 Frees memory of a string returned from Allocator::BuildStatsString. More...
 
+

Detailed Description

+

Represents main object of this library initialized for particular ID3D12Device.

+

Fill structure D3D12MA::ALLOCATOR_DESC and call function CreateAllocator() to create it. Call method Allocator::Release to destroy it.

+

It is recommended to create just one object of this type per ID3D12Device object, right after Direct3D 12 is initialized and keep it alive until before Direct3D device is destroyed.

+

Member Function Documentation

+ +

◆ AllocateMemory()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::Allocator::AllocateMemory (const ALLOCATION_DESCpAllocDesc,
const D3D12_RESOURCE_ALLOCATION_INFO * pAllocInfo,
Allocation ** ppAllocation 
)
+
+ +

Allocates memory without creating any resource placed in it.

+

This function is similar to ID3D12Device::CreateHeap, but it may really assign part of a larger, existing heap to the allocation.

+

pAllocDesc->heapFlags should contain one of these values, depending on type of resources you are going to create in this memory: D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS, D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES, D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES. Except if you validate that ResourceHeapTier = 2 - then heapFlags may be D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0. Additional flags in heapFlags are allowed as well.

+

pAllocInfo->SizeInBytes must be multiply of 64KB. pAllocInfo->Alignment must be one of the legal values as described in documentation of D3D12_HEAP_DESC.

+

If you use D3D12MA::ALLOCATION_FLAG_COMMITTED you will get a separate memory block - a heap that always has offset 0.

+ +
+
+ +

◆ AllocateMemory1()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::Allocator::AllocateMemory1 (const ALLOCATION_DESCpAllocDesc,
const D3D12_RESOURCE_ALLOCATION_INFO * pAllocInfo,
ID3D12ProtectedResourceSession * pProtectedSession,
Allocation ** ppAllocation 
)
+
+ +

Similar to Allocator::AllocateMemory, but supports additional parameter pProtectedSession.

+

If pProtectedSession is not null, current implementation always creates separate heap using ID3D12Device4::CreateHeap1.

+

To work correctly, ID3D12Device4 interface must be available in the current system. Otherwise, E_NOINTERFACE is returned.

+ +
+
+ +

◆ BuildStatsString()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void D3D12MA::Allocator::BuildStatsString (WCHAR ** ppStatsString,
BOOL DetailedMap 
) const
+
+ +

Builds and returns statistics as a string in JSON format.

+
Parameters
+ + + +
[out]ppStatsStringMust be freed using Allocator::FreeStatsString.
DetailedMapTRUE to include full list of allocations (can make the string quite long), FALSE to only return statistics.
+
+
+ +
+
+ +

◆ CalculateStats()

+ +
+
+ + + + + + + + +
void D3D12MA::Allocator::CalculateStats (StatspStats)
+
+ +

Retrieves statistics from the current state of the allocator.

+ +
+
+ +

◆ CreateAliasingResource()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::Allocator::CreateAliasingResource (AllocationpAllocation,
UINT64 AllocationLocalOffset,
const D3D12_RESOURCE_DESC * pResourceDesc,
D3D12_RESOURCE_STATES InitialResourceState,
const D3D12_CLEAR_VALUE * pOptimizedClearValue,
REFIID riidResource,
void ** ppvResource 
)
+
+ +

Creates a new resource in place of an existing allocation. This is useful for memory aliasing.

+
Parameters
+ + + + + + + + +
pAllocationExisting allocation indicating the memory where the new resource should be created. It can be created using D3D12MA::Allocator::CreateResource and already have a resource bound to it, or can be a raw memory allocated with D3D12MA::Allocator::AllocateMemory. It must not be created as committed so that ID3D12Heap is available and not implicit.
AllocationLocalOffsetAdditional offset in bytes to be applied when allocating the resource. Local from the start of pAllocation, not the beginning of the whole ID3D12Heap! If the new resource should start from the beginning of the pAllocation it should be 0.
pResourceDescDescription of the new resource to be created.
InitialResourceState
pOptimizedClearValue
riidResource
[out]ppvResourceReturns pointer to the new resource. The resource is not bound with pAllocation. This pointer must not be null - you must get the resource pointer and Release it when no longer needed.
+
+
+

Memory requirements of the new resource are checked for validation. If its size exceeds the end of pAllocation or required alignment is not fulfilled considering pAllocation->GetOffset() + AllocationLocalOffset, the function returns E_INVALIDARG.

+ +
+
+ +

◆ CreatePool()

+ +
+
+ + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::Allocator::CreatePool (const POOL_DESCpPoolDesc,
Pool ** ppPool 
)
+
+ +

Creates custom pool.

+ +
+
+ +

◆ CreateResource()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::Allocator::CreateResource (const ALLOCATION_DESCpAllocDesc,
const D3D12_RESOURCE_DESC * pResourceDesc,
D3D12_RESOURCE_STATES InitialResourceState,
const D3D12_CLEAR_VALUE * pOptimizedClearValue,
Allocation ** ppAllocation,
REFIID riidResource,
void ** ppvResource 
)
+
+ +

Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation function.

+

The function is similar to ID3D12Device::CreateCommittedResource, but it may really call ID3D12Device::CreatePlacedResource to assign part of a larger, existing memory heap to the new resource, which is the main purpose of this whole library.

+

If ppvResource is null, you receive only ppAllocation object from this function. It holds pointer to ID3D12Resource that can be queried using function D3D12MA::Allocation::GetResource(). Reference count of the resource object is 1. It is automatically destroyed when you destroy the allocation object.

+

If ppvResource is not null, you receive pointer to the resource next to allocation object. Reference count of the resource object is then increased by calling QueryInterface, so you need to manually Release it along with the allocation.

+
Parameters
+ + + + + + + + +
pAllocDescParameters of the allocation.
pResourceDescDescription of created resource.
InitialResourceStateInitial resource state.
pOptimizedClearValueOptional. Either null or optimized clear value.
[out]ppAllocationFilled with pointer to new allocation object created.
riidResourceIID of a resource to be returned via ppvResource.
[out]ppvResourceOptional. If not null, filled with pointer to new resouce created.
+
+
+
Note
This function creates a new resource. Sub-allocation of parts of one large buffer, although recommended as a good practice, is out of scope of this library and could be implemented by the user as a higher-level logic on top of it, e.g. using the Virtual allocator feature.
+ +
+
+ +

◆ CreateResource1()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::Allocator::CreateResource1 (const ALLOCATION_DESCpAllocDesc,
const D3D12_RESOURCE_DESC * pResourceDesc,
D3D12_RESOURCE_STATES InitialResourceState,
const D3D12_CLEAR_VALUE * pOptimizedClearValue,
ID3D12ProtectedResourceSession * pProtectedSession,
Allocation ** ppAllocation,
REFIID riidResource,
void ** ppvResource 
)
+
+ +

Similar to Allocator::CreateResource, but supports additional parameter pProtectedSession.

+

If pProtectedSession is not null, current implementation always creates the resource as committed using ID3D12Device4::CreateCommittedResource1.

+

To work correctly, ID3D12Device4 interface must be available in the current system. Otherwise, E_NOINTERFACE is returned.

+ +
+
+ +

◆ CreateResource2()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::Allocator::CreateResource2 (const ALLOCATION_DESCpAllocDesc,
const D3D12_RESOURCE_DESC1 * pResourceDesc,
D3D12_RESOURCE_STATES InitialResourceState,
const D3D12_CLEAR_VALUE * pOptimizedClearValue,
ID3D12ProtectedResourceSession * pProtectedSession,
Allocation ** ppAllocation,
REFIID riidResource,
void ** ppvResource 
)
+
+ +

Similar to Allocator::CreateResource1, but supports new structure D3D12_RESOURCE_DESC1.

+

It internally uses ID3D12Device8::CreateCommittedResource2 or ID3D12Device8::CreatePlacedResource1.

+

To work correctly, ID3D12Device8 interface must be available in the current system. Otherwise, E_NOINTERFACE is returned.

+ +
+
+ +

◆ FreeStatsString()

+ +
+
+ + + + + + + + +
void D3D12MA::Allocator::FreeStatsString (WCHAR * pStatsString) const
+
+ +

Frees memory of a string returned from Allocator::BuildStatsString.

+ +
+
+ +

◆ GetBudget()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void D3D12MA::Allocator::GetBudget (BudgetpGpuBudget,
BudgetpCpuBudget 
)
+
+ +

Retrieves information about current memory budget.

+
Parameters
+ + + +
[out]pGpuBudgetOptional, can be null.
[out]pCpuBudgetOptional, can be null.
+
+
+

This function is called "get" not "calculate" because it is very fast, suitable to be called every frame or every allocation. For more detailed statistics use CalculateStats().

+

Note that when using allocator from multiple threads, returned information may immediately become outdated.

+ +
+
+ +

◆ GetD3D12Options()

+ +
+
+ + + + + + + +
const D3D12_FEATURE_DATA_D3D12_OPTIONS& D3D12MA::Allocator::GetD3D12Options () const
+
+ +

Returns cached options retrieved from D3D12 device.

+ +
+
+ +

◆ IsCacheCoherentUMA()

+ +
+
+ + + + + + + +
BOOL D3D12MA::Allocator::IsCacheCoherentUMA () const
+
+
+ +

◆ IsUMA()

+ +
+
+ + + + + + + +
BOOL D3D12MA::Allocator::IsUMA () const
+
+
+ +

◆ Release()

+ +
+
+ + + + + + + +
void D3D12MA::Allocator::Release ()
+
+ +

Deletes this object.

+

This function must be used instead of destructor, which is private. There is no reference counting involved.

+ +
+
+ +

◆ SetCurrentFrameIndex()

+ +
+
+ + + + + + + + +
void D3D12MA::Allocator::SetCurrentFrameIndex (UINT frameIndex)
+
+ +

Sets the index of the current frame.

+

This function is used to set the frame index in the allocator when a new game frame begins.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/class_d3_d12_m_a_1_1_pool-members.html b/docs/html/class_d3_d12_m_a_1_1_pool-members.html new file mode 100644 index 0000000..1da92cb --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_pool-members.html @@ -0,0 +1,87 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
D3D12MA::Pool Member List
+
+
+ +

This is the complete list of members for D3D12MA::Pool, including all inherited members.

+ + + + + + + +
CalculateStats(StatInfo *pStats)D3D12MA::Pool
D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)D3D12MA::Poolfriend
GetDesc() constD3D12MA::Pool
GetName() constD3D12MA::Pool
Release()D3D12MA::Pool
SetName(LPCWSTR Name)D3D12MA::Pool
+ + + + diff --git a/docs/html/class_d3_d12_m_a_1_1_pool.html b/docs/html/class_d3_d12_m_a_1_1_pool.html new file mode 100644 index 0000000..5ee23c9 --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_pool.html @@ -0,0 +1,216 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::Pool Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
D3D12MA::Pool Class Reference
+
+
+ +

Custom memory pool. + More...

+ +

#include <D3D12MemAlloc.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

void Release ()
 Deletes pool object, frees D3D12 heaps (memory blocks) managed by it. Allocations and resources must already be released! More...
 
POOL_DESC GetDesc () const
 Returns copy of parameters of the pool. More...
 
void CalculateStats (StatInfo *pStats)
 Retrieves statistics from the current state of this pool. More...
 
void SetName (LPCWSTR Name)
 Associates a name with the pool. This name is for use in debug diagnostics and tools. More...
 
LPCWSTR GetName () const
 Returns the name associated with the pool object. More...
 
+

Detailed Description

+

Custom memory pool.

+

Represents a separate set of heaps (memory blocks) that can be used to create D3D12MA::Allocation-s and resources in it. Usually there is no need to create custom pools - creating resources in default pool is sufficient.

+

To create custom pool, fill D3D12MA::POOL_DESC and call D3D12MA::Allocator::CreatePool.

+

Member Function Documentation

+ +

◆ CalculateStats()

+ +
+
+ + + + + + + + +
void D3D12MA::Pool::CalculateStats (StatInfopStats)
+
+ +

Retrieves statistics from the current state of this pool.

+ +
+
+ +

◆ GetDesc()

+ +
+
+ + + + + + + +
POOL_DESC D3D12MA::Pool::GetDesc () const
+
+ +

Returns copy of parameters of the pool.

+

These are the same parameters as passed to D3D12MA::Allocator::CreatePool.

+ +
+
+ +

◆ GetName()

+ +
+
+ + + + + + + +
LPCWSTR D3D12MA::Pool::GetName () const
+
+ +

Returns the name associated with the pool object.

+

Returned string points to an internal copy.

+

If no name was associated with the allocation, returns NULL.

+ +
+
+ +

◆ Release()

+ +
+
+ + + + + + + +
void D3D12MA::Pool::Release ()
+
+ +

Deletes pool object, frees D3D12 heaps (memory blocks) managed by it. Allocations and resources must already be released!

+

It doesn't delete allocations and resources created in this pool. They must be all released before calling this function!

+ +
+
+ +

◆ SetName()

+ +
+
+ + + + + + + + +
void D3D12MA::Pool::SetName (LPCWSTR Name)
+
+ +

Associates a name with the pool. This name is for use in debug diagnostics and tools.

+

Internal copy of the string is made, so the memory pointed by the argument can be changed of freed immediately after this call.

+

Name can be NULL.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/class_d3_d12_m_a_1_1_virtual_block-members.html b/docs/html/class_d3_d12_m_a_1_1_virtual_block-members.html new file mode 100644 index 0000000..e9d0755 --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_virtual_block-members.html @@ -0,0 +1,93 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
D3D12MA::VirtualBlock Member List
+
+
+ +

This is the complete list of members for D3D12MA::VirtualBlock, including all inherited members.

+ + + + + + + + + + + + + +
Allocate(const VIRTUAL_ALLOCATION_DESC *pDesc, UINT64 *pOffset)D3D12MA::VirtualBlock
BuildStatsString(WCHAR **ppStatsString) constD3D12MA::VirtualBlock
CalculateStats(StatInfo *pInfo) constD3D12MA::VirtualBlock
Clear()D3D12MA::VirtualBlock
CreateVirtualBlock(const VIRTUAL_BLOCK_DESC *, VirtualBlock **)D3D12MA::VirtualBlockfriend
D3D12MA_DELETE(const ALLOCATION_CALLBACKS &, T *)D3D12MA::VirtualBlockfriend
FreeAllocation(UINT64 offset)D3D12MA::VirtualBlock
FreeStatsString(WCHAR *pStatsString) constD3D12MA::VirtualBlock
GetAllocationInfo(UINT64 offset, VIRTUAL_ALLOCATION_INFO *pInfo) constD3D12MA::VirtualBlock
IsEmpty() constD3D12MA::VirtualBlock
Release()D3D12MA::VirtualBlock
SetAllocationUserData(UINT64 offset, void *pUserData)D3D12MA::VirtualBlock
+ + + + diff --git a/docs/html/class_d3_d12_m_a_1_1_virtual_block.html b/docs/html/class_d3_d12_m_a_1_1_virtual_block.html new file mode 100644 index 0000000..3f38741 --- /dev/null +++ b/docs/html/class_d3_d12_m_a_1_1_virtual_block.html @@ -0,0 +1,370 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::VirtualBlock Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
D3D12MA::VirtualBlock Class Reference
+
+
+ +

Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory. + More...

+ +

#include <D3D12MemAlloc.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void Release ()
 Destroys this object and frees it from memory. More...
 
BOOL IsEmpty () const
 Returns true if the block is empty - contains 0 allocations. More...
 
void GetAllocationInfo (UINT64 offset, VIRTUAL_ALLOCATION_INFO *pInfo) const
 Returns information about an allocation at given offset - its size and custom pointer. More...
 
HRESULT Allocate (const VIRTUAL_ALLOCATION_DESC *pDesc, UINT64 *pOffset)
 Creates new allocation. More...
 
void FreeAllocation (UINT64 offset)
 Frees the allocation at given offset. More...
 
void Clear ()
 Frees all the allocations. More...
 
void SetAllocationUserData (UINT64 offset, void *pUserData)
 Changes custom pointer for an allocation at given offset to a new value. More...
 
void CalculateStats (StatInfo *pInfo) const
 Retrieves statistics from the current state of the block. More...
 
void BuildStatsString (WCHAR **ppStatsString) const
 Builds and returns statistics as a string in JSON format, including the list of allocations with their parameters. More...
 
void FreeStatsString (WCHAR *pStatsString) const
 Frees memory of a string returned from VirtualBlock::BuildStatsString. More...
 
+

Detailed Description

+

Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory.

+

This class allows to use the core algorithm of the library custom allocations e.g. CPU memory or sub-allocation regions inside a single GPU buffer.

+

To create this object, fill in D3D12MA::VIRTUAL_BLOCK_DESC and call CreateVirtualBlock(). To destroy it, call its method VirtualBlock::Release().

+

Member Function Documentation

+ +

◆ Allocate()

+ +
+
+ + + + + + + + + + + + + + + + + + +
HRESULT D3D12MA::VirtualBlock::Allocate (const VIRTUAL_ALLOCATION_DESCpDesc,
UINT64 * pOffset 
)
+
+ +

Creates new allocation.

+
Parameters
+ + + +
pDesc
[out]pOffsetOffset of the new allocation, which can also be treated as an unique identifier of the allocation within this block. UINT64_MAX if allocation failed.
+
+
+
Returns
S_OK if allocation succeeded, E_OUTOFMEMORY if it failed.
+ +
+
+ +

◆ BuildStatsString()

+ +
+
+ + + + + + + + +
void D3D12MA::VirtualBlock::BuildStatsString (WCHAR ** ppStatsString) const
+
+ +

Builds and returns statistics as a string in JSON format, including the list of allocations with their parameters.

+
Parameters
+ + +
[out]ppStatsStringMust be freed using VirtualBlock::FreeStatsString.
+
+
+ +
+
+ +

◆ CalculateStats()

+ +
+
+ + + + + + + + +
void D3D12MA::VirtualBlock::CalculateStats (StatInfopInfo) const
+
+ +

Retrieves statistics from the current state of the block.

+ +
+
+ +

◆ Clear()

+ +
+
+ + + + + + + +
void D3D12MA::VirtualBlock::Clear ()
+
+ +

Frees all the allocations.

+ +
+
+ +

◆ FreeAllocation()

+ +
+
+ + + + + + + + +
void D3D12MA::VirtualBlock::FreeAllocation (UINT64 offset)
+
+ +

Frees the allocation at given offset.

+ +
+
+ +

◆ FreeStatsString()

+ +
+
+ + + + + + + + +
void D3D12MA::VirtualBlock::FreeStatsString (WCHAR * pStatsString) const
+
+ +

Frees memory of a string returned from VirtualBlock::BuildStatsString.

+ +
+
+ +

◆ GetAllocationInfo()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void D3D12MA::VirtualBlock::GetAllocationInfo (UINT64 offset,
VIRTUAL_ALLOCATION_INFOpInfo 
) const
+
+ +

Returns information about an allocation at given offset - its size and custom pointer.

+ +
+
+ +

◆ IsEmpty()

+ +
+
+ + + + + + + +
BOOL D3D12MA::VirtualBlock::IsEmpty () const
+
+ +

Returns true if the block is empty - contains 0 allocations.

+ +
+
+ +

◆ Release()

+ +
+
+ + + + + + + +
void D3D12MA::VirtualBlock::Release ()
+
+ +

Destroys this object and frees it from memory.

+

You need to free all the allocations within this block or call Clear() before destroying it.

+ +
+
+ +

◆ SetAllocationUserData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void D3D12MA::VirtualBlock::SetAllocationUserData (UINT64 offset,
void * pUserData 
)
+
+ +

Changes custom pointer for an allocation at given offset to a new value.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/classes.html b/docs/html/classes.html new file mode 100644 index 0000000..434fafa --- /dev/null +++ b/docs/html/classes.html @@ -0,0 +1,92 @@ + + + + + + + +Direct3D 12 Memory Allocator: Class Index + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
A | B | P | S | V
+
+
+
A
+
Allocation (D3D12MA)
ALLOCATION_CALLBACKS (D3D12MA)
ALLOCATION_DESC (D3D12MA)
Allocator (D3D12MA)
ALLOCATOR_DESC (D3D12MA)
+
+
B
+
Budget (D3D12MA)
+
+
P
+
Pool (D3D12MA)
POOL_DESC (D3D12MA)
+
+
S
+
StatInfo (D3D12MA)
Stats (D3D12MA)
+
+
V
+
VIRTUAL_ALLOCATION_DESC (D3D12MA)
VIRTUAL_ALLOCATION_INFO (D3D12MA)
VIRTUAL_BLOCK_DESC (D3D12MA)
VirtualBlock (D3D12MA)
+
+
+ + + + diff --git a/docs/html/closed.png b/docs/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/html/closed.png differ diff --git a/docs/html/configuration.html b/docs/html/configuration.html new file mode 100644 index 0000000..647eb19 --- /dev/null +++ b/docs/html/configuration.html @@ -0,0 +1,120 @@ + + + + + + + +Direct3D 12 Memory Allocator: Configuration + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Configuration
+
+
+

Please check file D3D12MemAlloc.cpp lines between "Configuration Begin" and "Configuration End" to find macros that you can define to change the behavior of the library, primarily for debugging purposes.

+

+Custom CPU memory allocator

+

If you use custom allocator for CPU memory rather than default C++ operator new and delete or malloc and free functions, you can make this library using your allocator as well by filling structure D3D12MA::ALLOCATION_CALLBACKS and passing it as optional member D3D12MA::ALLOCATOR_DESC::pAllocationCallbacks. Functions pointed there will be used by the library to make any CPU-side allocations. Example:

+
#include <malloc.h>
+
+
void* CustomAllocate(size_t Size, size_t Alignment, void* pUserData)
+
{
+
void* memory = _aligned_malloc(Size, Alignment);
+
// Your extra bookkeeping here...
+
return memory;
+
}
+
+
void CustomFree(void* pMemory, void* pUserData)
+
{
+
// Your extra bookkeeping here...
+
_aligned_free(pMemory);
+
}
+
+
(...)
+
+
D3D12MA::ALLOCATION_CALLBACKS allocationCallbacks = {};
+
allocationCallbacks.pAllocate = &CustomAllocate;
+
allocationCallbacks.pFree = &CustomFree;
+
+
D3D12MA::ALLOCATOR_DESC allocatorDesc = {};
+
allocatorDesc.pDevice = device;
+
allocatorDesc.pAdapter = adapter;
+
allocatorDesc.pAllocationCallbacks = &allocationCallbacks;
+
+
D3D12MA::Allocator* allocator;
+
HRESULT hr = D3D12MA::CreateAllocator(&allocatorDesc, &allocator);
+
Represents main object of this library initialized for particular ID3D12Device.
Definition: D3D12MemAlloc.h:1264
+
HRESULT CreateAllocator(const ALLOCATOR_DESC *pDesc, Allocator **ppAllocator)
Creates new main D3D12MA::Allocator object and returns it through ppAllocator.
+
Custom callbacks to CPU memory allocation functions.
Definition: D3D12MemAlloc.h:763
+
FREE_FUNC_PTR pFree
Dellocation function.
Definition: D3D12MemAlloc.h:767
+
ALLOCATE_FUNC_PTR pAllocate
Allocation function.
Definition: D3D12MemAlloc.h:765
+
Parameters of created Allocator object. To be used with CreateAllocator().
Definition: D3D12MemAlloc.h:1145
+
const ALLOCATION_CALLBACKS * pAllocationCallbacks
Custom CPU memory allocation callbacks. Optional.
Definition: D3D12MemAlloc.h:1165
+
IDXGIAdapter * pAdapter
Definition: D3D12MemAlloc.h:1171
+
ID3D12Device * pDevice
Definition: D3D12MemAlloc.h:1153
+
+
+ + + + diff --git a/docs/html/custom_pools.html b/docs/html/custom_pools.html new file mode 100644 index 0000000..a6ef57f --- /dev/null +++ b/docs/html/custom_pools.html @@ -0,0 +1,122 @@ + + + + + + + +Direct3D 12 Memory Allocator: Custom memory pools + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Custom memory pools
+
+
+

A "pool" is a collection of memory blocks that share certain properties. Allocator creates 3 default pools: for D3D12_HEAP_TYPE_DEFAULT, UPLOAD, READBACK. A default pool automatically grows in size. Size of allocated blocks is also variable and managed automatically. Typical allocations are created in these pools. You can also create custom pools.

+

+Usage

+

To create a custom pool, fill in structure D3D12MA::POOL_DESC and call function D3D12MA::Allocator::CreatePool to obtain object D3D12MA::Pool. Example:

+
POOL_DESC poolDesc = {};
+
poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;
+
+
Pool* pool;
+
HRESULT hr = allocator->CreatePool(&poolDesc, &pool);
+

To allocate resources out of a custom pool, only set member D3D12MA::ALLOCATION_DESC::CustomPool. Example:

+
ALLOCATION_DESC allocDesc = {};
+
allocDesc.CustomPool = pool;
+
+
D3D12_RESOURCE_DESC resDesc = ...
+
Allocation* alloc;
+
hr = allocator->CreateResource(&allocDesc, &resDesc,
+
D3D12_RESOURCE_STATE_GENERIC_READ, NULL, &alloc, IID_NULL, NULL);
+

All allocations must be released before releasing the pool. The pool must be released before relasing the allocator.

+
alloc->Release();
+
pool->Release();
+

+Features and benefits

+

While it is recommended to use default pools whenever possible for simplicity and to give the allocator more opportunities for internal optimizations, custom pools may be useful in following cases:

+ +

New versions of this library support creating committed allocations in custom pools. It is supported only when D3D12MA::POOL_DESC::BlockSize = 0. To use this feature, set D3D12MA::ALLOCATION_DESC::CustomPool to the pointer to your custom pool and D3D12MA::ALLOCATION_DESC::Flags to D3D12MA::ALLOCATION_FLAG_COMMITTED. Example:

+
ALLOCATION_DESC allocDesc = {};
+
allocDesc.CustomPool = pool;
+
allocDesc.Flags = ALLOCATION_FLAG_COMMITTED;
+
+
D3D12_RESOURCE_DESC resDesc = ...
+
Allocation* alloc;
+
ID3D12Resource* res;
+
hr = allocator->CreateResource(&allocDesc, &resDesc,
+
D3D12_RESOURCE_STATE_GENERIC_READ, NULL, &alloc, IID_PPV_ARGS(&res));
+
@ ALLOCATION_FLAG_COMMITTED
Definition: D3D12MemAlloc.h:783
+

This feature may seem unnecessary, but creating committed allocations from custom pools may be useful in some cases, e.g. to have separate memory usage statistics for some group of resources or to use extended allocation parameters, like custom D3D12_HEAP_PROPERTIES, which are available only in custom pools.

+
+
+ + + + diff --git a/docs/html/doc.png b/docs/html/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/docs/html/doc.png differ diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css new file mode 100644 index 0000000..ffbff02 --- /dev/null +++ b/docs/html/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg new file mode 100644 index 0000000..d42dad5 --- /dev/null +++ b/docs/html/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js new file mode 100644 index 0000000..3174bd7 --- /dev/null +++ b/docs/html/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Direct3D 12 Memory Allocator: File List + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+ + +
 D3D12MemAlloc.h
+
+
+ + + + diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/docs/html/folderclosed.png differ diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/docs/html/folderopen.png differ diff --git a/docs/html/functions.html b/docs/html/functions.html new file mode 100644 index 0000000..af7ab5d --- /dev/null +++ b/docs/html/functions.html @@ -0,0 +1,400 @@ + + + + + + + +Direct3D 12 Memory Allocator: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+
+ + + + diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html new file mode 100644 index 0000000..64f046a --- /dev/null +++ b/docs/html/functions_func.html @@ -0,0 +1,205 @@ + + + + + + + +Direct3D 12 Memory Allocator: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- r -

+ + +

- s -

+ + +

- w -

+
+ + + + diff --git a/docs/html/functions_rela.html b/docs/html/functions_rela.html new file mode 100644 index 0000000..ad10366 --- /dev/null +++ b/docs/html/functions_rela.html @@ -0,0 +1,84 @@ + + + + + + + +Direct3D 12 Memory Allocator: Class Members - Related Functions + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html new file mode 100644 index 0000000..aa19568 --- /dev/null +++ b/docs/html/functions_vars.html @@ -0,0 +1,269 @@ + + + + + + + +Direct3D 12 Memory Allocator: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+ + + + diff --git a/docs/html/general_considerations.html b/docs/html/general_considerations.html new file mode 100644 index 0000000..b69f2e8 --- /dev/null +++ b/docs/html/general_considerations.html @@ -0,0 +1,111 @@ + + + + + + + +Direct3D 12 Memory Allocator: General considerations + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
General considerations
+
+
+

+Thread safety

+
    +
  • The library has no global state, so separate D3D12MA::Allocator objects can be used independently. In typical applications there should be no need to create multiple such objects though - one per ID3D12Device is enough.
  • +
  • All calls to methods of D3D12MA::Allocator class are safe to be made from multiple threads simultaneously because they are synchronized internally when needed.
  • +
  • When the allocator is created with D3D12MA::ALLOCATOR_FLAG_SINGLETHREADED, calls to methods of D3D12MA::Allocator class must be made from a single thread or synchronized by the user. Using this flag may improve performance.
  • +
+

+Future plans

+

Features planned for future releases:

+

Near future: feature parity with Vulkan Memory Allocator, including:

+
    +
  • Alternative allocation algorithms: linear allocator, buddy allocator
  • +
  • Support for priorities using ID3D12Device1::SetResidencyPriority
  • +
+

Later:

+
    +
  • Memory defragmentation
  • +
  • Support for multi-GPU (multi-adapter)
  • +
+

+Features not supported

+

Features deliberately excluded from the scope of this library:

+
    +
  • Descriptor allocation. Although also called "heaps", objects that represent descriptors are separate part of the D3D12 API from buffers and textures.
  • +
  • Support for D3D12_HEAP_TYPE_CUSTOM. Only the default heap types are supported: UPLOAD, DEFAULT, READBACK.
  • +
  • Support for reserved (tiled) resources. We don't recommend using them.
  • +
  • Support for ID3D12Device::Evict and MakeResident. We don't recommend using them.
  • +
  • Handling CPU memory allocation failures. When dynamically creating small C++ objects in CPU memory (not the GPU memory), allocation failures are not handled gracefully, because that would complicate code significantly and is usually not needed in desktop PC applications anyway. Success of an allocation is just checked with an assert.
  • +
  • Code free of any compiler warnings - especially those that would require complicating the code just to please the compiler complaining about unused parameters, variables, or expressions being constant in Relese configuration, e.g. because they are only used inside an assert.
  • +
  • This is a C++ library. Bindings or ports to any other programming languages are welcomed as external projects and are not going to be included into this repository.
  • +
+
+
+ + + + diff --git a/docs/html/globals.html b/docs/html/globals.html new file mode 100644 index 0000000..4b56f69 --- /dev/null +++ b/docs/html/globals.html @@ -0,0 +1,78 @@ + + + + + + + +Direct3D 12 Memory Allocator: File Members + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+
+ + + + diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html new file mode 100644 index 0000000..eb72f86 --- /dev/null +++ b/docs/html/globals_defs.html @@ -0,0 +1,78 @@ + + + + + + + +Direct3D 12 Memory Allocator: File Members + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..4d28cd3 --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,111 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12 Memory Allocator + + + + + + + + + +
+
+ + + + + + +
+
Direct3D 12 Memory Allocator +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
D3D12 Memory Allocator
+
+
+

Version 2.0.0-development (2021-06-18)

+

Copyright (c) 2019-2021 Advanced Micro Devices, Inc. All rights reserved.
+License: MIT

+

Documentation of all members: D3D12MemAlloc.h

+

+Table of contents

+ +

+See also

+ +
+
+ + + + diff --git a/docs/html/jquery.js b/docs/html/jquery.js new file mode 100644 index 0000000..103c32d --- /dev/null +++ b/docs/html/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/html/menu.js b/docs/html/menu.js new file mode 100644 index 0000000..2fe2214 --- /dev/null +++ b/docs/html/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js new file mode 100644 index 0000000..c98c526 --- /dev/null +++ b/docs/html/menudata.js @@ -0,0 +1,91 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}, +{text:"Variables",url:"namespacemembers_vars.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}, +{text:"Enumerator",url:"namespacemembers_eval.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"w",url:"functions.html#index_w"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func.html#index_b"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"w",url:"functions_func.html#index_w"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}]}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/docs/html/namespace_d3_d12_m_a.html b/docs/html/namespace_d3_d12_m_a.html new file mode 100644 index 0000000..070094b --- /dev/null +++ b/docs/html/namespace_d3_d12_m_a.html @@ -0,0 +1,373 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    D3D12MA Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  ALLOCATION_CALLBACKS
     Custom callbacks to CPU memory allocation functions. More...
     
    struct  ALLOCATION_DESC
     Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource. More...
     
    class  Allocation
     Represents single memory allocation. More...
     
    struct  POOL_DESC
     Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool. More...
     
    class  Pool
     Custom memory pool. More...
     
    struct  ALLOCATOR_DESC
     Parameters of created Allocator object. To be used with CreateAllocator(). More...
     
    struct  StatInfo
     Calculated statistics of memory usage in entire allocator. More...
     
    struct  Stats
     General statistics from the current state of the allocator. More...
     
    struct  Budget
     Statistics of current memory usage and available budget, in bytes, for GPU or CPU memory. More...
     
    class  Allocator
     Represents main object of this library initialized for particular ID3D12Device. More...
     
    struct  VIRTUAL_BLOCK_DESC
     Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock(). More...
     
    struct  VIRTUAL_ALLOCATION_DESC
     Parameters of created virtual allocation to be passed to VirtualBlock::Allocate(). More...
     
    struct  VIRTUAL_ALLOCATION_INFO
     Parameters of an existing virtual allocation, returned by VirtualBlock::GetAllocationInfo(). More...
     
    class  VirtualBlock
     Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory. More...
     
    + + + + + + + + + + + + + +

    +Typedefs

    typedef void *(* ALLOCATE_FUNC_PTR) (size_t Size, size_t Alignment, void *pUserData)
     Pointer to custom callback function that allocates CPU memory. More...
     
    typedef void(* FREE_FUNC_PTR) (void *pMemory, void *pUserData)
     Pointer to custom callback function that deallocates CPU memory. More...
     
    typedef enum D3D12MA::ALLOCATION_FLAGS ALLOCATION_FLAGS
     Bit flags to be used with ALLOCATION_DESC::Flags. More...
     
    typedef enum D3D12MA::ALLOCATOR_FLAGS ALLOCATOR_FLAGS
     Bit flags to be used with ALLOCATOR_DESC::Flags. More...
     
    + + + + + + + +

    +Enumerations

    enum  ALLOCATION_FLAGS { ALLOCATION_FLAG_NONE = 0 +, ALLOCATION_FLAG_COMMITTED = 0x1 +, ALLOCATION_FLAG_NEVER_ALLOCATE = 0x2 +, ALLOCATION_FLAG_WITHIN_BUDGET = 0x4 + }
     Bit flags to be used with ALLOCATION_DESC::Flags. More...
     
    enum  ALLOCATOR_FLAGS { ALLOCATOR_FLAG_NONE = 0 +, ALLOCATOR_FLAG_SINGLETHREADED = 0x1 +, ALLOCATOR_FLAG_ALWAYS_COMMITTED = 0x2 + }
     Bit flags to be used with ALLOCATOR_DESC::Flags. More...
     
    + + + + + + + +

    +Functions

    HRESULT CreateAllocator (const ALLOCATOR_DESC *pDesc, Allocator **ppAllocator)
     Creates new main D3D12MA::Allocator object and returns it through ppAllocator. More...
     
    HRESULT CreateVirtualBlock (const VIRTUAL_BLOCK_DESC *pDesc, VirtualBlock **ppVirtualBlock)
     Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock. More...
     
    + + + + +

    +Variables

    const UINT HEAP_TYPE_COUNT = 4
     Number of D3D12 memory heap types supported. More...
     
    +

    Typedef Documentation

    + +

    ◆ ALLOCATE_FUNC_PTR

    + +
    +
    + + + + +
    typedef void*(* D3D12MA::ALLOCATE_FUNC_PTR) (size_t Size, size_t Alignment, void *pUserData)
    +
    + +

    Pointer to custom callback function that allocates CPU memory.

    + +
    +
    + +

    ◆ ALLOCATION_FLAGS

    + +
    +
    + +

    Bit flags to be used with ALLOCATION_DESC::Flags.

    + +
    +
    + +

    ◆ ALLOCATOR_FLAGS

    + +
    +
    + +

    Bit flags to be used with ALLOCATOR_DESC::Flags.

    + +
    +
    + +

    ◆ FREE_FUNC_PTR

    + +
    +
    + + + + +
    typedef void(* D3D12MA::FREE_FUNC_PTR) (void *pMemory, void *pUserData)
    +
    + +

    Pointer to custom callback function that deallocates CPU memory.

    +

    pMemory = null should be accepted and ignored.

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ ALLOCATION_FLAGS

    + +
    +
    + + + + +
    enum D3D12MA::ALLOCATION_FLAGS
    +
    + +

    Bit flags to be used with ALLOCATION_DESC::Flags.

    + + + + + +
    Enumerator
    ALLOCATION_FLAG_NONE 

    Zero.

    +
    ALLOCATION_FLAG_COMMITTED 

    Set this flag if the allocation should have its own dedicated memory allocation (committed resource with implicit heap).

    +

    Use it for special, big resources, like fullscreen textures used as render targets.

    +
    ALLOCATION_FLAG_NEVER_ALLOCATE 

    Set this flag to only try to allocate from existing memory heaps and never create new such heap.

    +

    If new allocation cannot be placed in any of the existing heaps, allocation fails with E_OUTOFMEMORY error.

    +

    You should not use D3D12MA::ALLOCATION_FLAG_COMMITTED and D3D12MA::ALLOCATION_FLAG_NEVER_ALLOCATE at the same time. It makes no sense.

    +
    ALLOCATION_FLAG_WITHIN_BUDGET 

    Create allocation only if additional memory required for it, if any, won't exceed memory budget. Otherwise return E_OUTOFMEMORY.

    +
    + +
    +
    + +

    ◆ ALLOCATOR_FLAGS

    + +
    +
    + + + + +
    enum D3D12MA::ALLOCATOR_FLAGS
    +
    + +

    Bit flags to be used with ALLOCATOR_DESC::Flags.

    + + + + +
    Enumerator
    ALLOCATOR_FLAG_NONE 

    Zero.

    +
    ALLOCATOR_FLAG_SINGLETHREADED 

    Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized by you.

    +

    Using this flag may increase performance because internal mutexes are not used.

    +
    ALLOCATOR_FLAG_ALWAYS_COMMITTED 

    Every allocation will have its own memory block. To be used for debugging purposes.

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ CreateAllocator()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    HRESULT D3D12MA::CreateAllocator (const ALLOCATOR_DESCpDesc,
    Allocator ** ppAllocator 
    )
    +
    + +

    Creates new main D3D12MA::Allocator object and returns it through ppAllocator.

    +

    You normally only need to call it once and keep a single Allocator object for your ID3D12Device.

    + +
    +
    + +

    ◆ CreateVirtualBlock()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    HRESULT D3D12MA::CreateVirtualBlock (const VIRTUAL_BLOCK_DESCpDesc,
    VirtualBlock ** ppVirtualBlock 
    )
    +
    + +

    Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.

    +

    Note you don't need to create D3D12MA::Allocator to use virtual blocks.

    + +
    +
    +

    Variable Documentation

    + +

    ◆ HEAP_TYPE_COUNT

    + +
    +
    + + + + +
    const UINT D3D12MA::HEAP_TYPE_COUNT = 4
    +
    + +

    Number of D3D12 memory heap types supported.

    + +
    +
    +
    + + + + diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html new file mode 100644 index 0000000..3453b90 --- /dev/null +++ b/docs/html/namespacemembers.html @@ -0,0 +1,114 @@ + + + + + + + +Direct3D 12 Memory Allocator: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
      +
    • ALLOCATE_FUNC_PTR +: D3D12MA +
    • +
    • ALLOCATION_FLAG_COMMITTED +: D3D12MA +
    • +
    • ALLOCATION_FLAG_NEVER_ALLOCATE +: D3D12MA +
    • +
    • ALLOCATION_FLAG_NONE +: D3D12MA +
    • +
    • ALLOCATION_FLAG_WITHIN_BUDGET +: D3D12MA +
    • +
    • ALLOCATION_FLAGS +: D3D12MA +
    • +
    • ALLOCATOR_FLAG_ALWAYS_COMMITTED +: D3D12MA +
    • +
    • ALLOCATOR_FLAG_NONE +: D3D12MA +
    • +
    • ALLOCATOR_FLAG_SINGLETHREADED +: D3D12MA +
    • +
    • ALLOCATOR_FLAGS +: D3D12MA +
    • +
    • CreateAllocator() +: D3D12MA +
    • +
    • CreateVirtualBlock() +: D3D12MA +
    • +
    • FREE_FUNC_PTR +: D3D12MA +
    • +
    • HEAP_TYPE_COUNT +: D3D12MA +
    • +
    +
    + + + + diff --git a/docs/html/namespacemembers_enum.html b/docs/html/namespacemembers_enum.html new file mode 100644 index 0000000..358697d --- /dev/null +++ b/docs/html/namespacemembers_enum.html @@ -0,0 +1,78 @@ + + + + + + + +Direct3D 12 Memory Allocator: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/html/namespacemembers_eval.html b/docs/html/namespacemembers_eval.html new file mode 100644 index 0000000..eb2806f --- /dev/null +++ b/docs/html/namespacemembers_eval.html @@ -0,0 +1,93 @@ + + + + + + + +Direct3D 12 Memory Allocator: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
      +
    • ALLOCATION_FLAG_COMMITTED +: D3D12MA +
    • +
    • ALLOCATION_FLAG_NEVER_ALLOCATE +: D3D12MA +
    • +
    • ALLOCATION_FLAG_NONE +: D3D12MA +
    • +
    • ALLOCATION_FLAG_WITHIN_BUDGET +: D3D12MA +
    • +
    • ALLOCATOR_FLAG_ALWAYS_COMMITTED +: D3D12MA +
    • +
    • ALLOCATOR_FLAG_NONE +: D3D12MA +
    • +
    • ALLOCATOR_FLAG_SINGLETHREADED +: D3D12MA +
    • +
    +
    + + + + diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html new file mode 100644 index 0000000..37ae088 --- /dev/null +++ b/docs/html/namespacemembers_func.html @@ -0,0 +1,78 @@ + + + + + + + +Direct3D 12 Memory Allocator: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/html/namespacemembers_type.html b/docs/html/namespacemembers_type.html new file mode 100644 index 0000000..8b98d8a --- /dev/null +++ b/docs/html/namespacemembers_type.html @@ -0,0 +1,84 @@ + + + + + + + +Direct3D 12 Memory Allocator: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/html/namespacemembers_vars.html b/docs/html/namespacemembers_vars.html new file mode 100644 index 0000000..cbddfd9 --- /dev/null +++ b/docs/html/namespacemembers_vars.html @@ -0,0 +1,75 @@ + + + + + + + +Direct3D 12 Memory Allocator: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html new file mode 100644 index 0000000..e00792f --- /dev/null +++ b/docs/html/namespaces.html @@ -0,0 +1,93 @@ + + + + + + + +Direct3D 12 Memory Allocator: Namespace List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    +
    [detail level 12]
    + + + + + + + + + + + + + + + +
     ND3D12MA
     CALLOCATION_CALLBACKSCustom callbacks to CPU memory allocation functions
     CALLOCATION_DESCParameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource
     CAllocationRepresents single memory allocation
     CPOOL_DESCParameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool
     CPoolCustom memory pool
     CALLOCATOR_DESCParameters of created Allocator object. To be used with CreateAllocator()
     CStatInfoCalculated statistics of memory usage in entire allocator
     CStatsGeneral statistics from the current state of the allocator
     CBudgetStatistics of current memory usage and available budget, in bytes, for GPU or CPU memory
     CAllocatorRepresents main object of this library initialized for particular ID3D12Device
     CVIRTUAL_BLOCK_DESCParameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock()
     CVIRTUAL_ALLOCATION_DESCParameters of created virtual allocation to be passed to VirtualBlock::Allocate()
     CVIRTUAL_ALLOCATION_INFOParameters of an existing virtual allocation, returned by VirtualBlock::GetAllocationInfo()
     CVirtualBlockRepresents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory
    +
    +
    + + + + diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/html/nav_f.png differ diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/html/nav_g.png differ diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/html/nav_h.png differ diff --git a/docs/html/open.png b/docs/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/docs/html/open.png differ diff --git a/docs/html/pages.html b/docs/html/pages.html new file mode 100644 index 0000000..5ed59ea --- /dev/null +++ b/docs/html/pages.html @@ -0,0 +1,76 @@ + + + + + + + +Direct3D 12 Memory Allocator: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    +
    + + + + diff --git a/docs/html/quick_start.html b/docs/html/quick_start.html new file mode 100644 index 0000000..a79f4f4 --- /dev/null +++ b/docs/html/quick_start.html @@ -0,0 +1,198 @@ + + + + + + + +Direct3D 12 Memory Allocator: Quick start + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    Quick start
    +
    +
    +

    +Project setup and initialization

    +

    This is a small, standalone C++ library. It consists of a pair of 2 files: "%D3D12MemAlloc.h" header file with public interface and "D3D12MemAlloc.cpp" with internal implementation. The only external dependencies are WinAPI, Direct3D 12, and parts of C/C++ standard library (but STL containers, exceptions, or RTTI are not used).

    +

    The library is developed and tested using Microsoft Visual Studio 2019, but it should work with other compilers as well. It is designed for 64-bit code.

    +

    To use the library in your project:

    +

    (1.) Copy files D3D12MemAlloc.cpp, D3D12MemAlloc.h to your project.

    +

    (2.) Make D3D12MemAlloc.cpp compiling as part of the project, as C++ code.

    +

    (3.) Include library header in each CPP file that needs to use the library.

    +

    (4.) Right after you created ID3D12Device, fill D3D12MA::ALLOCATOR_DESC structure and call function D3D12MA::CreateAllocator to create the main D3D12MA::Allocator object.

    +

    Please note that all symbols of the library are declared inside D3D12MA namespace.

    +
    IDXGIAdapter* adapter = (...)
    +
    ID3D12Device* device = (...)
    +
    +
    D3D12MA::ALLOCATOR_DESC allocatorDesc = {};
    +
    allocatorDesc.pDevice = device;
    +
    allocatorDesc.pAdapter = adapter;
    +
    +
    D3D12MA::Allocator* allocator;
    +
    HRESULT hr = D3D12MA::CreateAllocator(&allocatorDesc, &allocator);
    +
    Represents main object of this library initialized for particular ID3D12Device.
    Definition: D3D12MemAlloc.h:1264
    +
    HRESULT CreateAllocator(const ALLOCATOR_DESC *pDesc, Allocator **ppAllocator)
    Creates new main D3D12MA::Allocator object and returns it through ppAllocator.
    +
    Parameters of created Allocator object. To be used with CreateAllocator().
    Definition: D3D12MemAlloc.h:1145
    +
    IDXGIAdapter * pAdapter
    Definition: D3D12MemAlloc.h:1171
    +
    ID3D12Device * pDevice
    Definition: D3D12MemAlloc.h:1153
    +

    (5.) Right before destroying the D3D12 device, destroy the allocator object.

    +

    Please note that objects of this library must be destroyed by calling Release method (despite they are not COM interfaces and no reference counting is involved).

    +
    allocator->Release();
    +
    void Release()
    Deletes this object.
    +

    +Creating resources

    +

    To use the library for creating resources (textures and buffers), call method D3D12MA::Allocator::CreateResource in the place where you would previously call ID3D12Device::CreateCommittedResource.

    +

    The function has similar syntax, but it expects structure D3D12MA::ALLOCATION_DESC to be passed along with D3D12_RESOURCE_DESC and other parameters for created resource. This structure describes parameters of the desired memory allocation, including choice of D3D12_HEAP_TYPE.

    +

    The function also returns a new object of type D3D12MA::Allocation, created along with usual ID3D12Resource. It represents allocated memory and can be queried for size, offset, ID3D12Resource, and ID3D12Heap if needed.

    +
    D3D12_RESOURCE_DESC resourceDesc = {};
    +
    resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
    +
    resourceDesc.Alignment = 0;
    +
    resourceDesc.Width = 1024;
    +
    resourceDesc.Height = 1024;
    +
    resourceDesc.DepthOrArraySize = 1;
    +
    resourceDesc.MipLevels = 1;
    +
    resourceDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    +
    resourceDesc.SampleDesc.Count = 1;
    +
    resourceDesc.SampleDesc.Quality = 0;
    +
    resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
    +
    resourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
    +
    +
    D3D12MA::ALLOCATION_DESC allocationDesc = {};
    +
    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;
    +
    +
    D3D12Resource* resource;
    +
    D3D12MA::Allocation* allocation;
    +
    HRESULT hr = allocator->CreateResource(
    +
    &allocationDesc,
    +
    &resourceDesc,
    +
    D3D12_RESOURCE_STATE_COPY_DEST,
    +
    NULL,
    +
    &allocation,
    +
    IID_PPV_ARGS(&resource));
    +
    Represents single memory allocation.
    Definition: D3D12MemAlloc.h:853
    +
    HRESULT CreateResource(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)
    Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation functi...
    +
    Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.
    Definition: D3D12MemAlloc.h:804
    +
    D3D12_HEAP_TYPE HeapType
    The type of memory heap where the new allocation should be placed.
    Definition: D3D12MemAlloc.h:813
    +

    You need to remember both resource and allocation objects and destroy them separately when no longer needed.

    +
    allocation->Release();
    +
    resource->Release();
    +
    void Release()
    Deletes this object.
    +

    The advantage of using the allocator instead of creating committed resource, and the main purpose of this library, is that it can decide to allocate bigger memory heap internally using ID3D12Device::CreateHeap and place multiple resources in it, at different offsets, using ID3D12Device::CreatePlacedResource. The library manages its own collection of allocated memory blocks (heaps) and remembers which parts of them are occupied and which parts are free to be used for new resources.

    +

    It is important to remember that resources created as placed don't have their memory initialized to zeros, but may contain garbage data, so they need to be fully initialized before usage, e.g. using Clear (ClearRenderTargetView), Discard (DiscardResource), or copy (CopyResource).

    +

    The library also automatically handles resource heap tier. When D3D12_FEATURE_DATA_D3D12_OPTIONS::ResourceHeapTier equals D3D12_RESOURCE_HEAP_TIER_1, resources of 3 types: buffers, textures that are render targets or depth-stencil, and other textures must be kept in separate heaps. When D3D12_RESOURCE_HEAP_TIER_2, they can be kept together. By using this library, you don't need to handle this manually.

    +

    +Mapping memory

    +

    The process of getting regular CPU-side pointer to the memory of a resource in Direct3D is called "mapping". There are rules and restrictions to this process, as described in D3D12 documentation of ID3D12Resource::Map method.

    +

    Mapping happens on the level of particular resources, not entire memory heaps, and so it is out of scope of this library. Just as the linked documentation says:

    +
      +
    • Returned pointer refers to data of particular subresource, not entire memory heap.
    • +
    • You can map same resource multiple times. It is ref-counted internally.
    • +
    • Mapping is thread-safe.
    • +
    • Unmapping is not required before resource destruction.
    • +
    • Unmapping may not be required before using written data - some heap types on some platforms support resources persistently mapped.
    • +
    +

    When using this library, you can map and use your resources normally without considering whether they are created as committed resources or placed resources in one large heap.

    +

    Example for buffer created and filled in UPLOAD heap type:

    +
    const UINT64 bufSize = 65536;
    +
    const float* bufData = (...);
    +
    +
    D3D12_RESOURCE_DESC resourceDesc = {};
    +
    resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
    +
    resourceDesc.Alignment = 0;
    +
    resourceDesc.Width = bufSize;
    +
    resourceDesc.Height = 1;
    +
    resourceDesc.DepthOrArraySize = 1;
    +
    resourceDesc.MipLevels = 1;
    +
    resourceDesc.Format = DXGI_FORMAT_UNKNOWN;
    +
    resourceDesc.SampleDesc.Count = 1;
    +
    resourceDesc.SampleDesc.Quality = 0;
    +
    resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
    +
    resourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
    +
    +
    D3D12MA::ALLOCATION_DESC allocationDesc = {};
    +
    allocationDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;
    +
    +
    D3D12Resource* resource;
    +
    D3D12MA::Allocation* allocation;
    +
    HRESULT hr = allocator->CreateResource(
    +
    &allocationDesc,
    +
    &resourceDesc,
    +
    D3D12_RESOURCE_STATE_GENERIC_READ,
    +
    NULL,
    +
    &allocation,
    +
    IID_PPV_ARGS(&resource));
    +
    +
    void* mappedPtr;
    +
    hr = resource->Map(0, NULL, &mappedPtr);
    +
    +
    memcpy(mappedPtr, bufData, bufSize);
    +
    +
    resource->Unmap(0, NULL);
    +
    +
    + + + + diff --git a/docs/html/resource_aliasing.html b/docs/html/resource_aliasing.html new file mode 100644 index 0000000..09eeaa9 --- /dev/null +++ b/docs/html/resource_aliasing.html @@ -0,0 +1,167 @@ + + + + + + + +Direct3D 12 Memory Allocator: Resource aliasing (overlap) + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    Resource aliasing (overlap)
    +
    +
    +

    New explicit graphics APIs (Vulkan and Direct3D 12), thanks to manual memory management, give an opportunity to alias (overlap) multiple resources in the same region of memory - a feature not available in the old APIs (Direct3D 11, OpenGL). It can be useful to save video memory, but it must be used with caution.

    +

    For example, if you know the flow of your whole render frame in advance, you are going to use some intermediate textures or buffers only during a small range of render passes, and you know these ranges don't overlap in time, you can create these resources in the same place in memory, even if they have completely different parameters (width, height, format etc.).

    +

    Resource aliasing (overlap)

    +

    Such scenario is possible using D3D12MA, but you need to create your resources using special function D3D12MA::Allocator::CreateAliasingResource. Before that, you need to allocate memory with parameters calculated using formula:

    +
      +
    • allocation size = max(size of each resource)
    • +
    • allocation alignment = max(alignment of each resource)
    • +
    +

    Following example shows two different textures created in the same place in memory, allocated to fit largest of them.

    +
    D3D12_RESOURCE_DESC resDesc1 = {};
    +
    resDesc1.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
    +
    resDesc1.Alignment = 0;
    +
    resDesc1.Width = 1920;
    +
    resDesc1.Height = 1080;
    +
    resDesc1.DepthOrArraySize = 1;
    +
    resDesc1.MipLevels = 1;
    +
    resDesc1.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    +
    resDesc1.SampleDesc.Count = 1;
    +
    resDesc1.SampleDesc.Quality = 0;
    +
    resDesc1.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
    +
    resDesc1.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;
    +
    +
    D3D12_RESOURCE_DESC resDesc2 = {};
    +
    resDesc2.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
    +
    resDesc2.Alignment = 0;
    +
    resDesc2.Width = 1024;
    +
    resDesc2.Height = 1024;
    +
    resDesc2.DepthOrArraySize = 1;
    +
    resDesc2.MipLevels = 0;
    +
    resDesc2.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    +
    resDesc2.SampleDesc.Count = 1;
    +
    resDesc2.SampleDesc.Quality = 0;
    +
    resDesc2.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
    +
    resDesc2.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
    +
    +
    const D3D12_RESOURCE_ALLOCATION_INFO allocInfo1 =
    +
    device->GetResourceAllocationInfo(0, 1, &resDesc1);
    +
    const D3D12_RESOURCE_ALLOCATION_INFO allocInfo2 =
    +
    device->GetResourceAllocationInfo(0, 1, &resDesc2);
    +
    +
    D3D12_RESOURCE_ALLOCATION_INFO finalAllocInfo = {};
    +
    finalAllocInfo.Alignment = std::max(allocInfo1.Alignment, allocInfo2.Alignment);
    +
    finalAllocInfo.SizeInBytes = std::max(allocInfo1.SizeInBytes, allocInfo2.SizeInBytes);
    +
    +
    D3D12MA::ALLOCATION_DESC allocDesc = {};
    +
    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;
    +
    allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES;
    +
    + +
    hr = allocator->AllocateMemory(&allocDesc, &finalAllocInfo, &alloc);
    +
    assert(alloc != NULL && alloc->GetHeap() != NULL);
    +
    +
    ID3D12Resource* res1;
    +
    hr = allocator->CreateAliasingResource(
    +
    alloc,
    +
    0, // AllocationLocalOffset
    +
    &resDesc1,
    +
    D3D12_RESOURCE_STATE_COMMON,
    +
    NULL, // pOptimizedClearValue
    +
    IID_PPV_ARGS(&res1));
    +
    +
    ID3D12Resource* res2;
    +
    hr = allocator->CreateAliasingResource(
    +
    alloc,
    +
    0, // AllocationLocalOffset
    +
    &resDesc2,
    +
    D3D12_RESOURCE_STATE_COMMON,
    +
    NULL, // pOptimizedClearValue
    +
    IID_PPV_ARGS(&res2));
    +
    +
    // You can use res1 and res2, but not at the same time!
    +
    +
    res2->Release();
    +
    res1->Release();
    +
    alloc->Release();
    +
    Represents single memory allocation.
    Definition: D3D12MemAlloc.h:853
    +
    ID3D12Heap * GetHeap() const
    Returns memory heap that the resource is created in.
    +
    void Release()
    Deletes this object.
    +
    Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.
    Definition: D3D12MemAlloc.h:804
    +
    D3D12_HEAP_FLAGS ExtraHeapFlags
    Additional heap flags to be used when allocating memory.
    Definition: D3D12MemAlloc.h:829
    +
    D3D12_HEAP_TYPE HeapType
    The type of memory heap where the new allocation should be placed.
    Definition: D3D12MemAlloc.h:813
    +

    Remember that using resouces that alias in memory requires proper synchronization. You need to issue a special barrier of type D3D12_RESOURCE_BARRIER_TYPE_ALIASING. You also need to treat a resource after aliasing as uninitialized - containing garbage data. For example, if you use res1 and then want to use res2, you need to first initialize res2 using either Clear, Discard, or Copy to the entire resource.

    +

    Additional considerations:

    +
      +
    • D3D12 also allows to interpret contents of memory between aliasing resources consistently in some cases, which is called "data inheritance". For details, see Microsoft documentation, chapter Memory Aliasing and Data Inheritance.
    • +
    • You can create more complex layout where different textures and buffers are bound at different offsets inside one large allocation. For example, one can imagine a big texture used in some render passes, aliasing with a set of many small buffers used in some further passes. To bind a resource at non-zero offset of an allocation, call D3D12MA::Allocator::CreateAliasingResource with appropriate value of AllocationLocalOffset parameter.
    • +
    • Resources of the three categories: buffers, textures with RENDER_TARGET or DEPTH_STENCIL flags, and all other textures, can be placed in the same memory only when allocator->GetD3D12Options().ResourceHeapTier >= D3D12_RESOURCE_HEAP_TIER_2. Otherwise they must be placed in different memory heap types, and thus aliasing them is not possible.
    • +
    +
    +
    + + + + diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html new file mode 100644 index 0000000..1ec5b2d --- /dev/null +++ b/docs/html/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js new file mode 100644 index 0000000..d6731a9 --- /dev/null +++ b/docs/html/search/all_0.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['alignment_0',['Alignment',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aaa95e62f2f399339a09dcbb312a42de0',1,'D3D12MA::VIRTUAL_ALLOCATION_DESC']]], + ['allocate_1',['Allocate',['../class_d3_d12_m_a_1_1_virtual_block.html#aa57575f1af18461012bde8c4b6f3c56c',1,'D3D12MA::VirtualBlock']]], + ['allocate_5ffunc_5fptr_2',['ALLOCATE_FUNC_PTR',['../namespace_d3_d12_m_a.html#a27ddd7db5650bc1d2afa009bebb6a53b',1,'D3D12MA']]], + ['allocatememory_3',['AllocateMemory',['../class_d3_d12_m_a_1_1_allocator.html#acb8a10a5ea30171ce60128286aec5ee2',1,'D3D12MA::Allocator']]], + ['allocatememory1_4',['AllocateMemory1',['../class_d3_d12_m_a_1_1_allocator.html#a6c1fbc673e2559ead34dbf039dd47d60',1,'D3D12MA::Allocator']]], + ['allocation_5',['Allocation',['../class_d3_d12_m_a_1_1_allocation.html',1,'D3D12MA']]], + ['allocation_5fcallbacks_6',['ALLOCATION_CALLBACKS',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html',1,'D3D12MA']]], + ['allocation_5fdesc_7',['ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]], + ['allocation_5fflag_5fcommitted_8',['ALLOCATION_FLAG_COMMITTED',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea661a5472dba3dcecc5a2cc92afd25675',1,'D3D12MA']]], + ['allocation_5fflag_5fnever_5fallocate_9',['ALLOCATION_FLAG_NEVER_ALLOCATE',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea9a52c6ae694eadcd20896091e77c0628',1,'D3D12MA']]], + ['allocation_5fflag_5fnone_10',['ALLOCATION_FLAG_NONE',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e',1,'D3D12MA']]], + ['allocation_5fflag_5fwithin_5fbudget_11',['ALLOCATION_FLAG_WITHIN_BUDGET',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eab374417c1f22a833ead268a6c21424e6',1,'D3D12MA']]], + ['allocation_5fflags_12',['ALLOCATION_FLAGS',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e',1,'D3D12MA::ALLOCATION_FLAGS()'],['../namespace_d3_d12_m_a.html#a4dede482eac9111d56d4b1b35eb13ae4',1,'D3D12MA::ALLOCATION_FLAGS()']]], + ['allocationbytes_13',['AllocationBytes',['../struct_d3_d12_m_a_1_1_budget.html#abcb043908bd528852f8ef3867ad76099',1,'D3D12MA::Budget']]], + ['allocationcount_14',['AllocationCount',['../struct_d3_d12_m_a_1_1_stat_info.html#a2f50de812e296b71594174ff67bbac6e',1,'D3D12MA::StatInfo']]], + ['allocationsizeavg_15',['AllocationSizeAvg',['../struct_d3_d12_m_a_1_1_stat_info.html#acf3339540ff01d93b6a6f5dc68d83f60',1,'D3D12MA::StatInfo']]], + ['allocationsizemax_16',['AllocationSizeMax',['../struct_d3_d12_m_a_1_1_stat_info.html#acd3c6f72ffb61a8d39b65a3dab317eb6',1,'D3D12MA::StatInfo']]], + ['allocationsizemin_17',['AllocationSizeMin',['../struct_d3_d12_m_a_1_1_stat_info.html#a9d9e69e9cad231fea3a41b06e7eeee35',1,'D3D12MA::StatInfo']]], + ['allocator_18',['Allocator',['../class_d3_d12_m_a_1_1_allocator.html',1,'D3D12MA']]], + ['allocator_5fdesc_19',['ALLOCATOR_DESC',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html',1,'D3D12MA']]], + ['allocator_5fflag_5falways_5fcommitted_20',['ALLOCATOR_FLAG_ALWAYS_COMMITTED',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916a068863dc0538ff4ea153b046b31e94fb',1,'D3D12MA']]], + ['allocator_5fflag_5fnone_21',['ALLOCATOR_FLAG_NONE',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916a2fb30967b492c27823a80b5de3aea26f',1,'D3D12MA']]], + ['allocator_5fflag_5fsinglethreaded_22',['ALLOCATOR_FLAG_SINGLETHREADED',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916a1b06bb21df006f76a9ed1bc41838bc52',1,'D3D12MA']]], + ['allocator_5fflags_23',['ALLOCATOR_FLAGS',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916',1,'D3D12MA::ALLOCATOR_FLAGS()'],['../namespace_d3_d12_m_a.html#a5d0bdfc28b81b4a1ee40c9c3ae1b1449',1,'D3D12MA::ALLOCATOR_FLAGS()']]] +]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html new file mode 100644 index 0000000..9f80e90 --- /dev/null +++ b/docs/html/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js new file mode 100644 index 0000000..4ac90dd --- /dev/null +++ b/docs/html/search/all_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['block_24',['block',['../class_d3_d12_m_a_1_1_allocation.html#a413aec64eba9f4ec57e912511591b3b8',1,'D3D12MA::Allocation']]], + ['blockbytes_25',['BlockBytes',['../struct_d3_d12_m_a_1_1_budget.html#ad1ad5d8521993cb623255ee1709a1c4c',1,'D3D12MA::Budget']]], + ['blockcount_26',['BlockCount',['../struct_d3_d12_m_a_1_1_stat_info.html#a8284ef3310c9de1600071285448b62c9',1,'D3D12MA::StatInfo']]], + ['blocksize_27',['BlockSize',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c',1,'D3D12MA::POOL_DESC']]], + ['budget_28',['Budget',['../struct_d3_d12_m_a_1_1_budget.html',1,'D3D12MA']]], + ['budgetbytes_29',['BudgetBytes',['../struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71',1,'D3D12MA::Budget']]], + ['buildstatsstring_30',['BuildStatsString',['../class_d3_d12_m_a_1_1_allocator.html#a29716b3084916abed7793bf2ec4b65db',1,'D3D12MA::Allocator::BuildStatsString()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a828a27070bfa762cae796d4c8f2ef703',1,'D3D12MA::VirtualBlock::BuildStatsString()']]] +]; diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html new file mode 100644 index 0000000..3bf1196 --- /dev/null +++ b/docs/html/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js new file mode 100644 index 0000000..a60cae1 --- /dev/null +++ b/docs/html/search/all_10.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['setallocationuserdata_94',['SetAllocationUserData',['../class_d3_d12_m_a_1_1_virtual_block.html#a0af4aec3d2efc913ee43b0725e8a0289',1,'D3D12MA::VirtualBlock']]], + ['setcurrentframeindex_95',['SetCurrentFrameIndex',['../class_d3_d12_m_a_1_1_allocator.html#a468ba0c93121eaaee402b08775f1dd11',1,'D3D12MA::Allocator']]], + ['setname_96',['SetName',['../class_d3_d12_m_a_1_1_allocation.html#af9e643276b577aa7f21937f75d4b82ac',1,'D3D12MA::Allocation::SetName()'],['../class_d3_d12_m_a_1_1_pool.html#a20617cfec0461cf8c2b92115b5140c5b',1,'D3D12MA::Pool::SetName()']]], + ['size_97',['size',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html#ab8ede12141594a69230afeb34664fc34',1,'D3D12MA::VIRTUAL_ALLOCATION_INFO']]], + ['size_98',['Size',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#ac56491679f276a5a9956ed99bc4654e4',1,'D3D12MA::VIRTUAL_BLOCK_DESC::Size()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a976b649e45abdd0769da0d79acde4bac',1,'D3D12MA::VIRTUAL_ALLOCATION_DESC::Size()']]], + ['statinfo_99',['StatInfo',['../struct_d3_d12_m_a_1_1_stat_info.html',1,'D3D12MA']]], + ['stats_100',['Stats',['../struct_d3_d12_m_a_1_1_stats.html',1,'D3D12MA']]] +]; diff --git a/docs/html/search/all_11.html b/docs/html/search/all_11.html new file mode 100644 index 0000000..c9f79d2 --- /dev/null +++ b/docs/html/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js new file mode 100644 index 0000000..d631af6 --- /dev/null +++ b/docs/html/search/all_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['total_101',['Total',['../struct_d3_d12_m_a_1_1_stats.html#ada54d9f0385fcdba491adcfd91f29c28',1,'D3D12MA::Stats']]] +]; diff --git a/docs/html/search/all_12.html b/docs/html/search/all_12.html new file mode 100644 index 0000000..ab93472 --- /dev/null +++ b/docs/html/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js new file mode 100644 index 0000000..b6d3e2b --- /dev/null +++ b/docs/html/search/all_12.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['unusedbytes_102',['UnusedBytes',['../struct_d3_d12_m_a_1_1_stat_info.html#a1df359c2e9ad4c7763122d1ccd86b168',1,'D3D12MA::StatInfo']]], + ['unusedrangecount_103',['UnusedRangeCount',['../struct_d3_d12_m_a_1_1_stat_info.html#adfc245a84fb8fba7936b67bd879ffefb',1,'D3D12MA::StatInfo']]], + ['unusedrangesizeavg_104',['UnusedRangeSizeAvg',['../struct_d3_d12_m_a_1_1_stat_info.html#a249d7969bf3f836c13a0f111d6ed886d',1,'D3D12MA::StatInfo']]], + ['unusedrangesizemax_105',['UnusedRangeSizeMax',['../struct_d3_d12_m_a_1_1_stat_info.html#a1337269f8777b6b5176c72ca410fbe36',1,'D3D12MA::StatInfo']]], + ['unusedrangesizemin_106',['UnusedRangeSizeMin',['../struct_d3_d12_m_a_1_1_stat_info.html#a180be027720ca98ff3a7470e18a79622',1,'D3D12MA::StatInfo']]], + ['usagebytes_107',['UsageBytes',['../struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253',1,'D3D12MA::Budget']]], + ['usedbytes_108',['UsedBytes',['../struct_d3_d12_m_a_1_1_stat_info.html#ac4f3379ea88025e4ccf5880fab2699f7',1,'D3D12MA::StatInfo']]] +]; diff --git a/docs/html/search/all_13.html b/docs/html/search/all_13.html new file mode 100644 index 0000000..51172c2 --- /dev/null +++ b/docs/html/search/all_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_13.js b/docs/html/search/all_13.js new file mode 100644 index 0000000..4400c3a --- /dev/null +++ b/docs/html/search/all_13.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['virtual_20allocator_109',['Virtual allocator',['../virtual_allocator.html',1,'index']]], + ['virtual_5fallocation_5fdesc_110',['VIRTUAL_ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]], + ['virtual_5fallocation_5finfo_111',['VIRTUAL_ALLOCATION_INFO',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html',1,'D3D12MA']]], + ['virtual_5fblock_5fdesc_112',['VIRTUAL_BLOCK_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html',1,'D3D12MA']]], + ['virtualblock_113',['VirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html',1,'D3D12MA']]] +]; diff --git a/docs/html/search/all_14.html b/docs/html/search/all_14.html new file mode 100644 index 0000000..afecf56 --- /dev/null +++ b/docs/html/search/all_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_14.js b/docs/html/search/all_14.js new file mode 100644 index 0000000..eb77249 --- /dev/null +++ b/docs/html/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['waszeroinitialized_114',['WasZeroInitialized',['../class_d3_d12_m_a_1_1_allocation.html#a1b1ef2717beed503fcb3cb7e6a171762',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html new file mode 100644 index 0000000..02cfffc --- /dev/null +++ b/docs/html/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js new file mode 100644 index 0000000..adcf2f8 --- /dev/null +++ b/docs/html/search/all_2.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['calculatestats_31',['CalculateStats',['../class_d3_d12_m_a_1_1_pool.html#a8e4cc5fb13aa33398d391296336c457e',1,'D3D12MA::Pool::CalculateStats()'],['../class_d3_d12_m_a_1_1_allocator.html#addedcd0067319ec566042f5cb520843b',1,'D3D12MA::Allocator::CalculateStats()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a039ee8426818d0126cf7f44c1c658526',1,'D3D12MA::VirtualBlock::CalculateStats(StatInfo *pInfo) const']]], + ['clear_32',['Clear',['../class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189',1,'D3D12MA::VirtualBlock']]], + ['configuration_33',['Configuration',['../configuration.html',1,'index']]], + ['createaliasingresource_34',['CreateAliasingResource',['../class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717',1,'D3D12MA::Allocator']]], + ['createallocator_35',['CreateAllocator',['../class_d3_d12_m_a_1_1_allocator.html#a7cc10fd0b328a512165cf636cb795090',1,'D3D12MA::Allocator::CreateAllocator()'],['../namespace_d3_d12_m_a.html#aa341b796fdffb16c976e659ccce80332',1,'D3D12MA::CreateAllocator()']]], + ['createpool_36',['CreatePool',['../class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515',1,'D3D12MA::Allocator']]], + ['createresource_37',['CreateResource',['../class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a',1,'D3D12MA::Allocator']]], + ['createresource1_38',['CreateResource1',['../class_d3_d12_m_a_1_1_allocator.html#afa0de85c76ce1f86fe9b0bd94dad5e8b',1,'D3D12MA::Allocator']]], + ['createresource2_39',['CreateResource2',['../class_d3_d12_m_a_1_1_allocator.html#ad9616c8e8e59ede99214b9c7cea97e5a',1,'D3D12MA::Allocator']]], + ['createvirtualblock_40',['CreateVirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html#ab8bb16e20c691720aad26ecbf105aa6f',1,'D3D12MA::VirtualBlock::CreateVirtualBlock()'],['../namespace_d3_d12_m_a.html#aefde6264e7a88bebe8e193df343af317',1,'D3D12MA::CreateVirtualBlock()']]], + ['custom_20memory_20pools_41',['Custom memory pools',['../custom_pools.html',1,'index']]], + ['custompool_42',['CustomPool',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934',1,'D3D12MA::ALLOCATION_DESC']]] +]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html new file mode 100644 index 0000000..39767b8 --- /dev/null +++ b/docs/html/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js new file mode 100644 index 0000000..c8b28ca --- /dev/null +++ b/docs/html/search/all_3.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['d3d12_20memory_20allocator_43',['D3D12 Memory Allocator',['../index.html',1,'']]], + ['d3d12ma_44',['D3D12MA',['../namespace_d3_d12_m_a.html',1,'']]], + ['d3d12ma_5fdelete_45',['D3D12MA_DELETE',['../class_d3_d12_m_a_1_1_allocation.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocation::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_pool.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Pool::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_allocator.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocator::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::VirtualBlock::D3D12MA_DELETE()']]], + ['d3d12ma_5fdxgi_5f1_5f4_46',['D3D12MA_DXGI_1_4',['../_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50',1,'D3D12MemAlloc.h']]], + ['d3d12ma_5fuse_5fsmall_5fresource_5fplacement_5falignment_47',['D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT',['../_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc',1,'D3D12MemAlloc.h']]], + ['d3d12memalloc_2eh_48',['D3D12MemAlloc.h',['../_d3_d12_mem_alloc_8h.html',1,'']]] +]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html new file mode 100644 index 0000000..fc40463 --- /dev/null +++ b/docs/html/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js new file mode 100644 index 0000000..73f95a5 --- /dev/null +++ b/docs/html/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['extraheapflags_49',['ExtraHeapFlags',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690',1,'D3D12MA::ALLOCATION_DESC']]] +]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html new file mode 100644 index 0000000..9dd9344 --- /dev/null +++ b/docs/html/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js new file mode 100644 index 0000000..0e64dba --- /dev/null +++ b/docs/html/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['flags_50',['Flags',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6',1,'D3D12MA::ALLOCATION_DESC::Flags()'],['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3',1,'D3D12MA::ALLOCATOR_DESC::Flags()']]], + ['free_5ffunc_5fptr_51',['FREE_FUNC_PTR',['../namespace_d3_d12_m_a.html#a3a473f88974f9312dbb6ff9f18228d76',1,'D3D12MA']]], + ['freeallocation_52',['FreeAllocation',['../class_d3_d12_m_a_1_1_virtual_block.html#a02dfae4c0856f22da885a332de7821fa',1,'D3D12MA::VirtualBlock']]], + ['freestatsstring_53',['FreeStatsString',['../class_d3_d12_m_a_1_1_allocator.html#a8392663494384c16d8bfa12b827b4f9c',1,'D3D12MA::Allocator::FreeStatsString()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a6f78ddaa7da194e239089e52093e68a9',1,'D3D12MA::VirtualBlock::FreeStatsString()']]] +]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html new file mode 100644 index 0000000..f1e516d --- /dev/null +++ b/docs/html/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js new file mode 100644 index 0000000..b136d6c --- /dev/null +++ b/docs/html/search/all_6.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['general_20considerations_54',['General considerations',['../general_considerations.html',1,'index']]], + ['getallocationinfo_55',['GetAllocationInfo',['../class_d3_d12_m_a_1_1_virtual_block.html#a287b8f0e455ffc7f302094671f922afb',1,'D3D12MA::VirtualBlock']]], + ['getbudget_56',['GetBudget',['../class_d3_d12_m_a_1_1_allocator.html#abe927bd3ad6930111d4d9408515b9601',1,'D3D12MA::Allocator']]], + ['getd3d12options_57',['GetD3D12Options',['../class_d3_d12_m_a_1_1_allocator.html#a8ce95f85e5f2a1d41b81d676b21c04ae',1,'D3D12MA::Allocator']]], + ['getdesc_58',['GetDesc',['../class_d3_d12_m_a_1_1_pool.html#aaab59af46d922d6b81fce8d8be987028',1,'D3D12MA::Pool']]], + ['getheap_59',['GetHeap',['../class_d3_d12_m_a_1_1_allocation.html#ac15798741797425b4e9e67bfc991e06b',1,'D3D12MA::Allocation']]], + ['getname_60',['GetName',['../class_d3_d12_m_a_1_1_allocation.html#a65fab0c479df1b6b72c9300e68dc6770',1,'D3D12MA::Allocation::GetName()'],['../class_d3_d12_m_a_1_1_pool.html#a63c91d92a9ca48b98866a5cc1aea333b',1,'D3D12MA::Pool::GetName()']]], + ['getoffset_61',['GetOffset',['../class_d3_d12_m_a_1_1_allocation.html#a47be9557d441797b65de177a3d5cdf60',1,'D3D12MA::Allocation']]], + ['getresource_62',['GetResource',['../class_d3_d12_m_a_1_1_allocation.html#a649a3bb1be1a981cbf3f61f3819addca',1,'D3D12MA::Allocation']]], + ['getsize_63',['GetSize',['../class_d3_d12_m_a_1_1_allocation.html#a92c2fb6f22b28817eb83a59407d7dd30',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html new file mode 100644 index 0000000..8ddbf6c --- /dev/null +++ b/docs/html/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js new file mode 100644 index 0000000..74e2fa8 --- /dev/null +++ b/docs/html/search/all_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['heap_64',['heap',['../class_d3_d12_m_a_1_1_allocation.html#a4e7380aabcac5b0a1cd833c5c84459c6',1,'D3D12MA::Allocation']]], + ['heap_5ftype_5fcount_65',['HEAP_TYPE_COUNT',['../namespace_d3_d12_m_a.html#abad7f40135648f8d0871be36f2919982',1,'D3D12MA']]], + ['heapflags_66',['HeapFlags',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc',1,'D3D12MA::POOL_DESC']]], + ['heapproperties_67',['HeapProperties',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a',1,'D3D12MA::POOL_DESC']]], + ['heaptype_68',['HeapType',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7',1,'D3D12MA::ALLOCATION_DESC::HeapType()'],['../struct_d3_d12_m_a_1_1_stats.html#a6e433945a118a34f7f6565811e62d718',1,'D3D12MA::Stats::HeapType()']]] +]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html new file mode 100644 index 0000000..83c55ae --- /dev/null +++ b/docs/html/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js new file mode 100644 index 0000000..3f29410 --- /dev/null +++ b/docs/html/search/all_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['iscachecoherentuma_69',['IsCacheCoherentUMA',['../class_d3_d12_m_a_1_1_allocator.html#a08210561b92c4bd7ede9dd7beba4bb80',1,'D3D12MA::Allocator']]], + ['isempty_70',['IsEmpty',['../class_d3_d12_m_a_1_1_virtual_block.html#a7b23fd2da6f0343095fb14b31395678b',1,'D3D12MA::VirtualBlock']]], + ['isuma_71',['IsUMA',['../class_d3_d12_m_a_1_1_allocator.html#a9e742884bd45dd7f01193d13fcd05af0',1,'D3D12MA::Allocator']]] +]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html new file mode 100644 index 0000000..1e263c1 --- /dev/null +++ b/docs/html/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js new file mode 100644 index 0000000..10cf860 --- /dev/null +++ b/docs/html/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_72',['list',['../class_d3_d12_m_a_1_1_allocation.html#ab1f59d849add2cdbfbebf4eb98db5c97',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html new file mode 100644 index 0000000..3a6cac1 --- /dev/null +++ b/docs/html/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js new file mode 100644 index 0000000..7fd6312 --- /dev/null +++ b/docs/html/search/all_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['m_5fcommitted_73',['m_Committed',['../class_d3_d12_m_a_1_1_allocation.html#a5b3d5b189021973d9934cbe9f5f266f0',1,'D3D12MA::Allocation']]], + ['m_5fheap_74',['m_Heap',['../class_d3_d12_m_a_1_1_allocation.html#adc7cf6224b7ca6205d1099a013f40424',1,'D3D12MA::Allocation']]], + ['m_5fplaced_75',['m_Placed',['../class_d3_d12_m_a_1_1_allocation.html#a35fca5f0b1c5eb46d0bb33cdb7ccc198',1,'D3D12MA::Allocation']]], + ['maxblockcount_76',['MaxBlockCount',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#abbce3a99f253928f9c3c09fa16015f9e',1,'D3D12MA::POOL_DESC']]], + ['minallocationalignment_77',['MinAllocationAlignment',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a0a6283eeb1f3f99d8c4ae264aec7f749',1,'D3D12MA::POOL_DESC']]], + ['minblockcount_78',['MinBlockCount',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a6f10db3911a3bea1becfc9a0dfa5bac8',1,'D3D12MA::POOL_DESC']]] +]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html new file mode 100644 index 0000000..130deb4 --- /dev/null +++ b/docs/html/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js new file mode 100644 index 0000000..c336516 --- /dev/null +++ b/docs/html/search/all_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['next_79',['next',['../class_d3_d12_m_a_1_1_allocation.html#a6f31560bc71451410a2a907b6d81b48f',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html new file mode 100644 index 0000000..3dd5af0 --- /dev/null +++ b/docs/html/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js new file mode 100644 index 0000000..48c6e17 --- /dev/null +++ b/docs/html/search/all_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['offset_80',['offset',['../class_d3_d12_m_a_1_1_allocation.html#a73c55decc2485b907f678d95aac24b6b',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html new file mode 100644 index 0000000..af7f2f0 --- /dev/null +++ b/docs/html/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js new file mode 100644 index 0000000..dab01a6 --- /dev/null +++ b/docs/html/search/all_d.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['padapter_81',['pAdapter',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#abf9a9f87f0ffea52816efd363c5fcd7b',1,'D3D12MA::ALLOCATOR_DESC']]], + ['pallocate_82',['pAllocate',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#af4d6436455728696fefd503869226436',1,'D3D12MA::ALLOCATION_CALLBACKS']]], + ['pallocationcallbacks_83',['pAllocationCallbacks',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#a773ecc1945eb47c20e06455c3759e4ef',1,'D3D12MA::ALLOCATOR_DESC::pAllocationCallbacks()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#aa8ea08ad0ee64cb2d29c03b85008317f',1,'D3D12MA::VIRTUAL_BLOCK_DESC::pAllocationCallbacks()']]], + ['pdevice_84',['pDevice',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ada1bf21205065b3aa0284b5a9ee1cb3c',1,'D3D12MA::ALLOCATOR_DESC']]], + ['pfree_85',['pFree',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#a114e6c4d63d6b020e01f526a975d6849',1,'D3D12MA::ALLOCATION_CALLBACKS']]], + ['pool_86',['Pool',['../class_d3_d12_m_a_1_1_pool.html',1,'D3D12MA']]], + ['pool_5fdesc_87',['POOL_DESC',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html',1,'D3D12MA']]], + ['preferredblocksize_88',['PreferredBlockSize',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#a97149c9559deae943c2cfa49aeeff8a6',1,'D3D12MA::ALLOCATOR_DESC']]], + ['prev_89',['prev',['../class_d3_d12_m_a_1_1_allocation.html#adc3ac89758a915a409e047f9b89aa160',1,'D3D12MA::Allocation']]], + ['puserdata_90',['pUserData',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#af75391788c1241a06bb0de792c02c335',1,'D3D12MA::ALLOCATION_CALLBACKS::pUserData()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab8ec8dd20b4b9dc2aaa79d7da024170b',1,'D3D12MA::VIRTUAL_ALLOCATION_DESC::pUserData()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html#a4b23ad296ab6cd425fb3b6c83c13b4ff',1,'D3D12MA::VIRTUAL_ALLOCATION_INFO::pUserData()']]] +]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html new file mode 100644 index 0000000..e25df42 --- /dev/null +++ b/docs/html/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js new file mode 100644 index 0000000..bd3381b --- /dev/null +++ b/docs/html/search/all_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quick_20start_91',['Quick start',['../quick_start.html',1,'index']]] +]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html new file mode 100644 index 0000000..b23da6c --- /dev/null +++ b/docs/html/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js new file mode 100644 index 0000000..3558a4e --- /dev/null +++ b/docs/html/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['release_92',['Release',['../class_d3_d12_m_a_1_1_allocation.html#ad7e3a855b92e77be6c808eacdbb746dc',1,'D3D12MA::Allocation::Release()'],['../class_d3_d12_m_a_1_1_pool.html#a5e6fe1e7fbe0ebe394d63d22715535c6',1,'D3D12MA::Pool::Release()'],['../class_d3_d12_m_a_1_1_allocator.html#aefff328977ae1030a2ac6db5a148294b',1,'D3D12MA::Allocator::Release()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a24111ca907ad9efae25cf4858ff6b0b0',1,'D3D12MA::VirtualBlock::Release()']]], + ['resource_20aliasing_20_28overlap_29_93',['Resource aliasing (overlap)',['../resource_aliasing.html',1,'index']]] +]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html new file mode 100644 index 0000000..af8159e --- /dev/null +++ b/docs/html/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js new file mode 100644 index 0000000..b6a9c7f --- /dev/null +++ b/docs/html/search/classes_0.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['allocation_115',['Allocation',['../class_d3_d12_m_a_1_1_allocation.html',1,'D3D12MA']]], + ['allocation_5fcallbacks_116',['ALLOCATION_CALLBACKS',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html',1,'D3D12MA']]], + ['allocation_5fdesc_117',['ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]], + ['allocator_118',['Allocator',['../class_d3_d12_m_a_1_1_allocator.html',1,'D3D12MA']]], + ['allocator_5fdesc_119',['ALLOCATOR_DESC',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html',1,'D3D12MA']]] +]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html new file mode 100644 index 0000000..576e916 --- /dev/null +++ b/docs/html/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js new file mode 100644 index 0000000..a5a28a9 --- /dev/null +++ b/docs/html/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['budget_120',['Budget',['../struct_d3_d12_m_a_1_1_budget.html',1,'D3D12MA']]] +]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html new file mode 100644 index 0000000..956405e --- /dev/null +++ b/docs/html/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js new file mode 100644 index 0000000..e6e0f9f --- /dev/null +++ b/docs/html/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['pool_121',['Pool',['../class_d3_d12_m_a_1_1_pool.html',1,'D3D12MA']]], + ['pool_5fdesc_122',['POOL_DESC',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html',1,'D3D12MA']]] +]; diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html new file mode 100644 index 0000000..d33343b --- /dev/null +++ b/docs/html/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js new file mode 100644 index 0000000..70722ec --- /dev/null +++ b/docs/html/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['statinfo_123',['StatInfo',['../struct_d3_d12_m_a_1_1_stat_info.html',1,'D3D12MA']]], + ['stats_124',['Stats',['../struct_d3_d12_m_a_1_1_stats.html',1,'D3D12MA']]] +]; diff --git a/docs/html/search/classes_4.html b/docs/html/search/classes_4.html new file mode 100644 index 0000000..8430b07 --- /dev/null +++ b/docs/html/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js new file mode 100644 index 0000000..27ae826 --- /dev/null +++ b/docs/html/search/classes_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['virtual_5fallocation_5fdesc_125',['VIRTUAL_ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]], + ['virtual_5fallocation_5finfo_126',['VIRTUAL_ALLOCATION_INFO',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html',1,'D3D12MA']]], + ['virtual_5fblock_5fdesc_127',['VIRTUAL_BLOCK_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html',1,'D3D12MA']]], + ['virtualblock_128',['VirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html',1,'D3D12MA']]] +]; diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/docs/html/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html new file mode 100644 index 0000000..15cc3de --- /dev/null +++ b/docs/html/search/defines_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js new file mode 100644 index 0000000..8468ea1 --- /dev/null +++ b/docs/html/search/defines_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['d3d12ma_5fdxgi_5f1_5f4_225',['D3D12MA_DXGI_1_4',['../_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50',1,'D3D12MemAlloc.h']]], + ['d3d12ma_5fuse_5fsmall_5fresource_5fplacement_5falignment_226',['D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT',['../_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc',1,'D3D12MemAlloc.h']]] +]; diff --git a/docs/html/search/enums_0.html b/docs/html/search/enums_0.html new file mode 100644 index 0000000..141fff5 --- /dev/null +++ b/docs/html/search/enums_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js new file mode 100644 index 0000000..5eeef9e --- /dev/null +++ b/docs/html/search/enums_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['allocation_5fflags_213',['ALLOCATION_FLAGS',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e',1,'D3D12MA']]], + ['allocator_5fflags_214',['ALLOCATOR_FLAGS',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916',1,'D3D12MA']]] +]; diff --git a/docs/html/search/enumvalues_0.html b/docs/html/search/enumvalues_0.html new file mode 100644 index 0000000..0d131d9 --- /dev/null +++ b/docs/html/search/enumvalues_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js new file mode 100644 index 0000000..1ca32ea --- /dev/null +++ b/docs/html/search/enumvalues_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['allocation_5fflag_5fcommitted_215',['ALLOCATION_FLAG_COMMITTED',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea661a5472dba3dcecc5a2cc92afd25675',1,'D3D12MA']]], + ['allocation_5fflag_5fnever_5fallocate_216',['ALLOCATION_FLAG_NEVER_ALLOCATE',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea9a52c6ae694eadcd20896091e77c0628',1,'D3D12MA']]], + ['allocation_5fflag_5fnone_217',['ALLOCATION_FLAG_NONE',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e',1,'D3D12MA']]], + ['allocation_5fflag_5fwithin_5fbudget_218',['ALLOCATION_FLAG_WITHIN_BUDGET',['../namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eab374417c1f22a833ead268a6c21424e6',1,'D3D12MA']]], + ['allocator_5fflag_5falways_5fcommitted_219',['ALLOCATOR_FLAG_ALWAYS_COMMITTED',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916a068863dc0538ff4ea153b046b31e94fb',1,'D3D12MA']]], + ['allocator_5fflag_5fnone_220',['ALLOCATOR_FLAG_NONE',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916a2fb30967b492c27823a80b5de3aea26f',1,'D3D12MA']]], + ['allocator_5fflag_5fsinglethreaded_221',['ALLOCATOR_FLAG_SINGLETHREADED',['../namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916a1b06bb21df006f76a9ed1bc41838bc52',1,'D3D12MA']]] +]; diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html new file mode 100644 index 0000000..9498842 --- /dev/null +++ b/docs/html/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js new file mode 100644 index 0000000..e0041b9 --- /dev/null +++ b/docs/html/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['d3d12memalloc_2eh_130',['D3D12MemAlloc.h',['../_d3_d12_mem_alloc_8h.html',1,'']]] +]; diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html new file mode 100644 index 0000000..eb4c501 --- /dev/null +++ b/docs/html/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js new file mode 100644 index 0000000..ba9aa3a --- /dev/null +++ b/docs/html/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['allocate_131',['Allocate',['../class_d3_d12_m_a_1_1_virtual_block.html#aa57575f1af18461012bde8c4b6f3c56c',1,'D3D12MA::VirtualBlock']]], + ['allocatememory_132',['AllocateMemory',['../class_d3_d12_m_a_1_1_allocator.html#acb8a10a5ea30171ce60128286aec5ee2',1,'D3D12MA::Allocator']]], + ['allocatememory1_133',['AllocateMemory1',['../class_d3_d12_m_a_1_1_allocator.html#a6c1fbc673e2559ead34dbf039dd47d60',1,'D3D12MA::Allocator']]] +]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html new file mode 100644 index 0000000..ef4088b --- /dev/null +++ b/docs/html/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js new file mode 100644 index 0000000..4834570 --- /dev/null +++ b/docs/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buildstatsstring_134',['BuildStatsString',['../class_d3_d12_m_a_1_1_allocator.html#a29716b3084916abed7793bf2ec4b65db',1,'D3D12MA::Allocator::BuildStatsString()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a828a27070bfa762cae796d4c8f2ef703',1,'D3D12MA::VirtualBlock::BuildStatsString()']]] +]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html new file mode 100644 index 0000000..ca5aa10 --- /dev/null +++ b/docs/html/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js new file mode 100644 index 0000000..ce9f864 --- /dev/null +++ b/docs/html/search/functions_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['calculatestats_135',['CalculateStats',['../class_d3_d12_m_a_1_1_pool.html#a8e4cc5fb13aa33398d391296336c457e',1,'D3D12MA::Pool::CalculateStats()'],['../class_d3_d12_m_a_1_1_allocator.html#addedcd0067319ec566042f5cb520843b',1,'D3D12MA::Allocator::CalculateStats()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a039ee8426818d0126cf7f44c1c658526',1,'D3D12MA::VirtualBlock::CalculateStats(StatInfo *pInfo) const']]], + ['clear_136',['Clear',['../class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189',1,'D3D12MA::VirtualBlock']]], + ['createaliasingresource_137',['CreateAliasingResource',['../class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717',1,'D3D12MA::Allocator']]], + ['createallocator_138',['CreateAllocator',['../namespace_d3_d12_m_a.html#aa341b796fdffb16c976e659ccce80332',1,'D3D12MA']]], + ['createpool_139',['CreatePool',['../class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515',1,'D3D12MA::Allocator']]], + ['createresource_140',['CreateResource',['../class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a',1,'D3D12MA::Allocator']]], + ['createresource1_141',['CreateResource1',['../class_d3_d12_m_a_1_1_allocator.html#afa0de85c76ce1f86fe9b0bd94dad5e8b',1,'D3D12MA::Allocator']]], + ['createresource2_142',['CreateResource2',['../class_d3_d12_m_a_1_1_allocator.html#ad9616c8e8e59ede99214b9c7cea97e5a',1,'D3D12MA::Allocator']]], + ['createvirtualblock_143',['CreateVirtualBlock',['../namespace_d3_d12_m_a.html#aefde6264e7a88bebe8e193df343af317',1,'D3D12MA']]] +]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html new file mode 100644 index 0000000..d79f55b --- /dev/null +++ b/docs/html/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js new file mode 100644 index 0000000..e656ebe --- /dev/null +++ b/docs/html/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['freeallocation_144',['FreeAllocation',['../class_d3_d12_m_a_1_1_virtual_block.html#a02dfae4c0856f22da885a332de7821fa',1,'D3D12MA::VirtualBlock']]], + ['freestatsstring_145',['FreeStatsString',['../class_d3_d12_m_a_1_1_allocator.html#a8392663494384c16d8bfa12b827b4f9c',1,'D3D12MA::Allocator::FreeStatsString()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a6f78ddaa7da194e239089e52093e68a9',1,'D3D12MA::VirtualBlock::FreeStatsString()']]] +]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html new file mode 100644 index 0000000..1657cad --- /dev/null +++ b/docs/html/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js new file mode 100644 index 0000000..559b44b --- /dev/null +++ b/docs/html/search/functions_4.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['getallocationinfo_146',['GetAllocationInfo',['../class_d3_d12_m_a_1_1_virtual_block.html#a287b8f0e455ffc7f302094671f922afb',1,'D3D12MA::VirtualBlock']]], + ['getbudget_147',['GetBudget',['../class_d3_d12_m_a_1_1_allocator.html#abe927bd3ad6930111d4d9408515b9601',1,'D3D12MA::Allocator']]], + ['getd3d12options_148',['GetD3D12Options',['../class_d3_d12_m_a_1_1_allocator.html#a8ce95f85e5f2a1d41b81d676b21c04ae',1,'D3D12MA::Allocator']]], + ['getdesc_149',['GetDesc',['../class_d3_d12_m_a_1_1_pool.html#aaab59af46d922d6b81fce8d8be987028',1,'D3D12MA::Pool']]], + ['getheap_150',['GetHeap',['../class_d3_d12_m_a_1_1_allocation.html#ac15798741797425b4e9e67bfc991e06b',1,'D3D12MA::Allocation']]], + ['getname_151',['GetName',['../class_d3_d12_m_a_1_1_allocation.html#a65fab0c479df1b6b72c9300e68dc6770',1,'D3D12MA::Allocation::GetName()'],['../class_d3_d12_m_a_1_1_pool.html#a63c91d92a9ca48b98866a5cc1aea333b',1,'D3D12MA::Pool::GetName()']]], + ['getoffset_152',['GetOffset',['../class_d3_d12_m_a_1_1_allocation.html#a47be9557d441797b65de177a3d5cdf60',1,'D3D12MA::Allocation']]], + ['getresource_153',['GetResource',['../class_d3_d12_m_a_1_1_allocation.html#a649a3bb1be1a981cbf3f61f3819addca',1,'D3D12MA::Allocation']]], + ['getsize_154',['GetSize',['../class_d3_d12_m_a_1_1_allocation.html#a92c2fb6f22b28817eb83a59407d7dd30',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html new file mode 100644 index 0000000..9301d6b --- /dev/null +++ b/docs/html/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js new file mode 100644 index 0000000..59b3349 --- /dev/null +++ b/docs/html/search/functions_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['iscachecoherentuma_155',['IsCacheCoherentUMA',['../class_d3_d12_m_a_1_1_allocator.html#a08210561b92c4bd7ede9dd7beba4bb80',1,'D3D12MA::Allocator']]], + ['isempty_156',['IsEmpty',['../class_d3_d12_m_a_1_1_virtual_block.html#a7b23fd2da6f0343095fb14b31395678b',1,'D3D12MA::VirtualBlock']]], + ['isuma_157',['IsUMA',['../class_d3_d12_m_a_1_1_allocator.html#a9e742884bd45dd7f01193d13fcd05af0',1,'D3D12MA::Allocator']]] +]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html new file mode 100644 index 0000000..9c4f5fc --- /dev/null +++ b/docs/html/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js new file mode 100644 index 0000000..fd6f0a5 --- /dev/null +++ b/docs/html/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['release_158',['Release',['../class_d3_d12_m_a_1_1_allocation.html#ad7e3a855b92e77be6c808eacdbb746dc',1,'D3D12MA::Allocation::Release()'],['../class_d3_d12_m_a_1_1_pool.html#a5e6fe1e7fbe0ebe394d63d22715535c6',1,'D3D12MA::Pool::Release()'],['../class_d3_d12_m_a_1_1_allocator.html#aefff328977ae1030a2ac6db5a148294b',1,'D3D12MA::Allocator::Release()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a24111ca907ad9efae25cf4858ff6b0b0',1,'D3D12MA::VirtualBlock::Release()']]] +]; diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html new file mode 100644 index 0000000..46b5c0f --- /dev/null +++ b/docs/html/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js new file mode 100644 index 0000000..b7c98ab --- /dev/null +++ b/docs/html/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['setallocationuserdata_159',['SetAllocationUserData',['../class_d3_d12_m_a_1_1_virtual_block.html#a0af4aec3d2efc913ee43b0725e8a0289',1,'D3D12MA::VirtualBlock']]], + ['setcurrentframeindex_160',['SetCurrentFrameIndex',['../class_d3_d12_m_a_1_1_allocator.html#a468ba0c93121eaaee402b08775f1dd11',1,'D3D12MA::Allocator']]], + ['setname_161',['SetName',['../class_d3_d12_m_a_1_1_allocation.html#af9e643276b577aa7f21937f75d4b82ac',1,'D3D12MA::Allocation::SetName()'],['../class_d3_d12_m_a_1_1_pool.html#a20617cfec0461cf8c2b92115b5140c5b',1,'D3D12MA::Pool::SetName()']]] +]; diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html new file mode 100644 index 0000000..31a1d95 --- /dev/null +++ b/docs/html/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js new file mode 100644 index 0000000..f521f06 --- /dev/null +++ b/docs/html/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['waszeroinitialized_162',['WasZeroInitialized',['../class_d3_d12_m_a_1_1_allocation.html#a1b1ef2717beed503fcb3cb7e6a171762',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/docs/html/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/docs/html/search/namespaces_0.html b/docs/html/search/namespaces_0.html new file mode 100644 index 0000000..21db2c3 --- /dev/null +++ b/docs/html/search/namespaces_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/namespaces_0.js b/docs/html/search/namespaces_0.js new file mode 100644 index 0000000..08cb99e --- /dev/null +++ b/docs/html/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['d3d12ma_129',['D3D12MA',['../namespace_d3_d12_m_a.html',1,'']]] +]; diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html new file mode 100644 index 0000000..2b9360b --- /dev/null +++ b/docs/html/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/docs/html/search/pages_0.html b/docs/html/search/pages_0.html new file mode 100644 index 0000000..8517b48 --- /dev/null +++ b/docs/html/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js new file mode 100644 index 0000000..41c29f9 --- /dev/null +++ b/docs/html/search/pages_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['configuration_227',['Configuration',['../configuration.html',1,'index']]], + ['custom_20memory_20pools_228',['Custom memory pools',['../custom_pools.html',1,'index']]] +]; diff --git a/docs/html/search/pages_1.html b/docs/html/search/pages_1.html new file mode 100644 index 0000000..a0fb679 --- /dev/null +++ b/docs/html/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/pages_1.js b/docs/html/search/pages_1.js new file mode 100644 index 0000000..c4341e4 --- /dev/null +++ b/docs/html/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['d3d12_20memory_20allocator_229',['D3D12 Memory Allocator',['../index.html',1,'']]] +]; diff --git a/docs/html/search/pages_2.html b/docs/html/search/pages_2.html new file mode 100644 index 0000000..084edfd --- /dev/null +++ b/docs/html/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/pages_2.js b/docs/html/search/pages_2.js new file mode 100644 index 0000000..79d3b7f --- /dev/null +++ b/docs/html/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['general_20considerations_230',['General considerations',['../general_considerations.html',1,'index']]] +]; diff --git a/docs/html/search/pages_3.html b/docs/html/search/pages_3.html new file mode 100644 index 0000000..c0b45b0 --- /dev/null +++ b/docs/html/search/pages_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/pages_3.js b/docs/html/search/pages_3.js new file mode 100644 index 0000000..36cd7ac --- /dev/null +++ b/docs/html/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quick_20start_231',['Quick start',['../quick_start.html',1,'index']]] +]; diff --git a/docs/html/search/pages_4.html b/docs/html/search/pages_4.html new file mode 100644 index 0000000..0f05c2e --- /dev/null +++ b/docs/html/search/pages_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/pages_4.js b/docs/html/search/pages_4.js new file mode 100644 index 0000000..6e40696 --- /dev/null +++ b/docs/html/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['resource_20aliasing_20_28overlap_29_232',['Resource aliasing (overlap)',['../resource_aliasing.html',1,'index']]] +]; diff --git a/docs/html/search/pages_5.html b/docs/html/search/pages_5.html new file mode 100644 index 0000000..27e2b6c --- /dev/null +++ b/docs/html/search/pages_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/pages_5.js b/docs/html/search/pages_5.js new file mode 100644 index 0000000..743027d --- /dev/null +++ b/docs/html/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['virtual_20allocator_233',['Virtual allocator',['../virtual_allocator.html',1,'index']]] +]; diff --git a/docs/html/search/related_0.html b/docs/html/search/related_0.html new file mode 100644 index 0000000..506aaec --- /dev/null +++ b/docs/html/search/related_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/related_0.js b/docs/html/search/related_0.js new file mode 100644 index 0000000..799ad1c --- /dev/null +++ b/docs/html/search/related_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['createallocator_222',['CreateAllocator',['../class_d3_d12_m_a_1_1_allocator.html#a7cc10fd0b328a512165cf636cb795090',1,'D3D12MA::Allocator']]], + ['createvirtualblock_223',['CreateVirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html#ab8bb16e20c691720aad26ecbf105aa6f',1,'D3D12MA::VirtualBlock']]] +]; diff --git a/docs/html/search/related_1.html b/docs/html/search/related_1.html new file mode 100644 index 0000000..605d4b7 --- /dev/null +++ b/docs/html/search/related_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/related_1.js b/docs/html/search/related_1.js new file mode 100644 index 0000000..f5cb602 --- /dev/null +++ b/docs/html/search/related_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['d3d12ma_5fdelete_224',['D3D12MA_DELETE',['../class_d3_d12_m_a_1_1_allocation.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocation::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_pool.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Pool::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_allocator.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocator::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::VirtualBlock::D3D12MA_DELETE()']]] +]; diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..9074198 --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..fb226f7 --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/typedefs_0.js b/docs/html/search/typedefs_0.js new file mode 100644 index 0000000..0acb571 --- /dev/null +++ b/docs/html/search/typedefs_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['allocate_5ffunc_5fptr_209',['ALLOCATE_FUNC_PTR',['../namespace_d3_d12_m_a.html#a27ddd7db5650bc1d2afa009bebb6a53b',1,'D3D12MA']]], + ['allocation_5fflags_210',['ALLOCATION_FLAGS',['../namespace_d3_d12_m_a.html#a4dede482eac9111d56d4b1b35eb13ae4',1,'D3D12MA']]], + ['allocator_5fflags_211',['ALLOCATOR_FLAGS',['../namespace_d3_d12_m_a.html#a5d0bdfc28b81b4a1ee40c9c3ae1b1449',1,'D3D12MA']]] +]; diff --git a/docs/html/search/typedefs_1.html b/docs/html/search/typedefs_1.html new file mode 100644 index 0000000..46cf01e --- /dev/null +++ b/docs/html/search/typedefs_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/typedefs_1.js b/docs/html/search/typedefs_1.js new file mode 100644 index 0000000..6679c11 --- /dev/null +++ b/docs/html/search/typedefs_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['free_5ffunc_5fptr_212',['FREE_FUNC_PTR',['../namespace_d3_d12_m_a.html#a3a473f88974f9312dbb6ff9f18228d76',1,'D3D12MA']]] +]; diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html new file mode 100644 index 0000000..1e477c0 --- /dev/null +++ b/docs/html/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js new file mode 100644 index 0000000..8b3ecce --- /dev/null +++ b/docs/html/search/variables_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['alignment_163',['Alignment',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aaa95e62f2f399339a09dcbb312a42de0',1,'D3D12MA::VIRTUAL_ALLOCATION_DESC']]], + ['allocationbytes_164',['AllocationBytes',['../struct_d3_d12_m_a_1_1_budget.html#abcb043908bd528852f8ef3867ad76099',1,'D3D12MA::Budget']]], + ['allocationcount_165',['AllocationCount',['../struct_d3_d12_m_a_1_1_stat_info.html#a2f50de812e296b71594174ff67bbac6e',1,'D3D12MA::StatInfo']]], + ['allocationsizeavg_166',['AllocationSizeAvg',['../struct_d3_d12_m_a_1_1_stat_info.html#acf3339540ff01d93b6a6f5dc68d83f60',1,'D3D12MA::StatInfo']]], + ['allocationsizemax_167',['AllocationSizeMax',['../struct_d3_d12_m_a_1_1_stat_info.html#acd3c6f72ffb61a8d39b65a3dab317eb6',1,'D3D12MA::StatInfo']]], + ['allocationsizemin_168',['AllocationSizeMin',['../struct_d3_d12_m_a_1_1_stat_info.html#a9d9e69e9cad231fea3a41b06e7eeee35',1,'D3D12MA::StatInfo']]] +]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html new file mode 100644 index 0000000..ea73d9a --- /dev/null +++ b/docs/html/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js new file mode 100644 index 0000000..b8ef939 --- /dev/null +++ b/docs/html/search/variables_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['block_169',['block',['../class_d3_d12_m_a_1_1_allocation.html#a413aec64eba9f4ec57e912511591b3b8',1,'D3D12MA::Allocation']]], + ['blockbytes_170',['BlockBytes',['../struct_d3_d12_m_a_1_1_budget.html#ad1ad5d8521993cb623255ee1709a1c4c',1,'D3D12MA::Budget']]], + ['blockcount_171',['BlockCount',['../struct_d3_d12_m_a_1_1_stat_info.html#a8284ef3310c9de1600071285448b62c9',1,'D3D12MA::StatInfo']]], + ['blocksize_172',['BlockSize',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c',1,'D3D12MA::POOL_DESC']]], + ['budgetbytes_173',['BudgetBytes',['../struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71',1,'D3D12MA::Budget']]] +]; diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html new file mode 100644 index 0000000..0580462 --- /dev/null +++ b/docs/html/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js new file mode 100644 index 0000000..859c34a --- /dev/null +++ b/docs/html/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['custompool_174',['CustomPool',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934',1,'D3D12MA::ALLOCATION_DESC']]] +]; diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html new file mode 100644 index 0000000..0d69e76 --- /dev/null +++ b/docs/html/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js new file mode 100644 index 0000000..dfa832f --- /dev/null +++ b/docs/html/search/variables_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['extraheapflags_175',['ExtraHeapFlags',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690',1,'D3D12MA::ALLOCATION_DESC']]] +]; diff --git a/docs/html/search/variables_4.html b/docs/html/search/variables_4.html new file mode 100644 index 0000000..a4b6506 --- /dev/null +++ b/docs/html/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js new file mode 100644 index 0000000..1b93239 --- /dev/null +++ b/docs/html/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['flags_176',['Flags',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6',1,'D3D12MA::ALLOCATION_DESC::Flags()'],['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3',1,'D3D12MA::ALLOCATOR_DESC::Flags()']]] +]; diff --git a/docs/html/search/variables_5.html b/docs/html/search/variables_5.html new file mode 100644 index 0000000..7e345d1 --- /dev/null +++ b/docs/html/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_5.js b/docs/html/search/variables_5.js new file mode 100644 index 0000000..ed7c2e4 --- /dev/null +++ b/docs/html/search/variables_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['heap_177',['heap',['../class_d3_d12_m_a_1_1_allocation.html#a4e7380aabcac5b0a1cd833c5c84459c6',1,'D3D12MA::Allocation']]], + ['heap_5ftype_5fcount_178',['HEAP_TYPE_COUNT',['../namespace_d3_d12_m_a.html#abad7f40135648f8d0871be36f2919982',1,'D3D12MA']]], + ['heapflags_179',['HeapFlags',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc',1,'D3D12MA::POOL_DESC']]], + ['heapproperties_180',['HeapProperties',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a',1,'D3D12MA::POOL_DESC']]], + ['heaptype_181',['HeapType',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7',1,'D3D12MA::ALLOCATION_DESC::HeapType()'],['../struct_d3_d12_m_a_1_1_stats.html#a6e433945a118a34f7f6565811e62d718',1,'D3D12MA::Stats::HeapType()']]] +]; diff --git a/docs/html/search/variables_6.html b/docs/html/search/variables_6.html new file mode 100644 index 0000000..7d48e75 --- /dev/null +++ b/docs/html/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js new file mode 100644 index 0000000..3abefaf --- /dev/null +++ b/docs/html/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_182',['list',['../class_d3_d12_m_a_1_1_allocation.html#ab1f59d849add2cdbfbebf4eb98db5c97',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/variables_7.html b/docs/html/search/variables_7.html new file mode 100644 index 0000000..5c26340 --- /dev/null +++ b/docs/html/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js new file mode 100644 index 0000000..e4b39e4 --- /dev/null +++ b/docs/html/search/variables_7.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['m_5fcommitted_183',['m_Committed',['../class_d3_d12_m_a_1_1_allocation.html#a5b3d5b189021973d9934cbe9f5f266f0',1,'D3D12MA::Allocation']]], + ['m_5fheap_184',['m_Heap',['../class_d3_d12_m_a_1_1_allocation.html#adc7cf6224b7ca6205d1099a013f40424',1,'D3D12MA::Allocation']]], + ['m_5fplaced_185',['m_Placed',['../class_d3_d12_m_a_1_1_allocation.html#a35fca5f0b1c5eb46d0bb33cdb7ccc198',1,'D3D12MA::Allocation']]], + ['maxblockcount_186',['MaxBlockCount',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#abbce3a99f253928f9c3c09fa16015f9e',1,'D3D12MA::POOL_DESC']]], + ['minallocationalignment_187',['MinAllocationAlignment',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a0a6283eeb1f3f99d8c4ae264aec7f749',1,'D3D12MA::POOL_DESC']]], + ['minblockcount_188',['MinBlockCount',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a6f10db3911a3bea1becfc9a0dfa5bac8',1,'D3D12MA::POOL_DESC']]] +]; diff --git a/docs/html/search/variables_8.html b/docs/html/search/variables_8.html new file mode 100644 index 0000000..dc9ec54 --- /dev/null +++ b/docs/html/search/variables_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_8.js b/docs/html/search/variables_8.js new file mode 100644 index 0000000..f37cd66 --- /dev/null +++ b/docs/html/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['next_189',['next',['../class_d3_d12_m_a_1_1_allocation.html#a6f31560bc71451410a2a907b6d81b48f',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/variables_9.html b/docs/html/search/variables_9.html new file mode 100644 index 0000000..7b01475 --- /dev/null +++ b/docs/html/search/variables_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_9.js b/docs/html/search/variables_9.js new file mode 100644 index 0000000..814d335 --- /dev/null +++ b/docs/html/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['offset_190',['offset',['../class_d3_d12_m_a_1_1_allocation.html#a73c55decc2485b907f678d95aac24b6b',1,'D3D12MA::Allocation']]] +]; diff --git a/docs/html/search/variables_a.html b/docs/html/search/variables_a.html new file mode 100644 index 0000000..52a724d --- /dev/null +++ b/docs/html/search/variables_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_a.js b/docs/html/search/variables_a.js new file mode 100644 index 0000000..6a24cb5 --- /dev/null +++ b/docs/html/search/variables_a.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['padapter_191',['pAdapter',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#abf9a9f87f0ffea52816efd363c5fcd7b',1,'D3D12MA::ALLOCATOR_DESC']]], + ['pallocate_192',['pAllocate',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#af4d6436455728696fefd503869226436',1,'D3D12MA::ALLOCATION_CALLBACKS']]], + ['pallocationcallbacks_193',['pAllocationCallbacks',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#a773ecc1945eb47c20e06455c3759e4ef',1,'D3D12MA::ALLOCATOR_DESC::pAllocationCallbacks()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#aa8ea08ad0ee64cb2d29c03b85008317f',1,'D3D12MA::VIRTUAL_BLOCK_DESC::pAllocationCallbacks()']]], + ['pdevice_194',['pDevice',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ada1bf21205065b3aa0284b5a9ee1cb3c',1,'D3D12MA::ALLOCATOR_DESC']]], + ['pfree_195',['pFree',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#a114e6c4d63d6b020e01f526a975d6849',1,'D3D12MA::ALLOCATION_CALLBACKS']]], + ['preferredblocksize_196',['PreferredBlockSize',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#a97149c9559deae943c2cfa49aeeff8a6',1,'D3D12MA::ALLOCATOR_DESC']]], + ['prev_197',['prev',['../class_d3_d12_m_a_1_1_allocation.html#adc3ac89758a915a409e047f9b89aa160',1,'D3D12MA::Allocation']]], + ['puserdata_198',['pUserData',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#af75391788c1241a06bb0de792c02c335',1,'D3D12MA::ALLOCATION_CALLBACKS::pUserData()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab8ec8dd20b4b9dc2aaa79d7da024170b',1,'D3D12MA::VIRTUAL_ALLOCATION_DESC::pUserData()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html#a4b23ad296ab6cd425fb3b6c83c13b4ff',1,'D3D12MA::VIRTUAL_ALLOCATION_INFO::pUserData()']]] +]; diff --git a/docs/html/search/variables_b.html b/docs/html/search/variables_b.html new file mode 100644 index 0000000..f376b27 --- /dev/null +++ b/docs/html/search/variables_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_b.js b/docs/html/search/variables_b.js new file mode 100644 index 0000000..03aa655 --- /dev/null +++ b/docs/html/search/variables_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['size_199',['size',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html#ab8ede12141594a69230afeb34664fc34',1,'D3D12MA::VIRTUAL_ALLOCATION_INFO']]], + ['size_200',['Size',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#ac56491679f276a5a9956ed99bc4654e4',1,'D3D12MA::VIRTUAL_BLOCK_DESC::Size()'],['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a976b649e45abdd0769da0d79acde4bac',1,'D3D12MA::VIRTUAL_ALLOCATION_DESC::Size()']]] +]; diff --git a/docs/html/search/variables_c.html b/docs/html/search/variables_c.html new file mode 100644 index 0000000..6019eba --- /dev/null +++ b/docs/html/search/variables_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_c.js b/docs/html/search/variables_c.js new file mode 100644 index 0000000..719635e --- /dev/null +++ b/docs/html/search/variables_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['total_201',['Total',['../struct_d3_d12_m_a_1_1_stats.html#ada54d9f0385fcdba491adcfd91f29c28',1,'D3D12MA::Stats']]] +]; diff --git a/docs/html/search/variables_d.html b/docs/html/search/variables_d.html new file mode 100644 index 0000000..f61ae75 --- /dev/null +++ b/docs/html/search/variables_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/docs/html/search/variables_d.js b/docs/html/search/variables_d.js new file mode 100644 index 0000000..c0d4e31 --- /dev/null +++ b/docs/html/search/variables_d.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['unusedbytes_202',['UnusedBytes',['../struct_d3_d12_m_a_1_1_stat_info.html#a1df359c2e9ad4c7763122d1ccd86b168',1,'D3D12MA::StatInfo']]], + ['unusedrangecount_203',['UnusedRangeCount',['../struct_d3_d12_m_a_1_1_stat_info.html#adfc245a84fb8fba7936b67bd879ffefb',1,'D3D12MA::StatInfo']]], + ['unusedrangesizeavg_204',['UnusedRangeSizeAvg',['../struct_d3_d12_m_a_1_1_stat_info.html#a249d7969bf3f836c13a0f111d6ed886d',1,'D3D12MA::StatInfo']]], + ['unusedrangesizemax_205',['UnusedRangeSizeMax',['../struct_d3_d12_m_a_1_1_stat_info.html#a1337269f8777b6b5176c72ca410fbe36',1,'D3D12MA::StatInfo']]], + ['unusedrangesizemin_206',['UnusedRangeSizeMin',['../struct_d3_d12_m_a_1_1_stat_info.html#a180be027720ca98ff3a7470e18a79622',1,'D3D12MA::StatInfo']]], + ['usagebytes_207',['UsageBytes',['../struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253',1,'D3D12MA::Budget']]], + ['usedbytes_208',['UsedBytes',['../struct_d3_d12_m_a_1_1_stat_info.html#ac4f3379ea88025e4ccf5880fab2699f7',1,'D3D12MA::StatInfo']]] +]; diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/docs/html/splitbar.png differ diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s-members.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s-members.html new file mode 100644 index 0000000..3e1204b --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s-members.html @@ -0,0 +1,84 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::ALLOCATION_CALLBACKS Member List
    +
    + + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html new file mode 100644 index 0000000..b52f226 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html @@ -0,0 +1,153 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::ALLOCATION_CALLBACKS Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::ALLOCATION_CALLBACKS Struct Reference
    +
    +
    + +

    Custom callbacks to CPU memory allocation functions. + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + + + + +

    +Public Attributes

    ALLOCATE_FUNC_PTR pAllocate
     Allocation function. More...
     
    FREE_FUNC_PTR pFree
     Dellocation function. More...
     
    void * pUserData
     Custom data that will be passed to allocation and deallocation functions as pUserData parameter. More...
     
    +

    Detailed Description

    +

    Custom callbacks to CPU memory allocation functions.

    +

    Member Data Documentation

    + +

    ◆ pAllocate

    + +
    +
    + + + + +
    ALLOCATE_FUNC_PTR D3D12MA::ALLOCATION_CALLBACKS::pAllocate
    +
    + +

    Allocation function.

    + +
    +
    + +

    ◆ pFree

    + +
    +
    + + + + +
    FREE_FUNC_PTR D3D12MA::ALLOCATION_CALLBACKS::pFree
    +
    + +

    Dellocation function.

    + +
    +
    + +

    ◆ pUserData

    + +
    +
    + + + + +
    void* D3D12MA::ALLOCATION_CALLBACKS::pUserData
    +
    + +

    Custom data that will be passed to allocation and deallocation functions as pUserData parameter.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html new file mode 100644 index 0000000..d6bf3bf --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html @@ -0,0 +1,85 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::ALLOCATION_DESC Member List
    +
    + + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html new file mode 100644 index 0000000..e9daafa --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html @@ -0,0 +1,182 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::ALLOCATION_DESC Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::ALLOCATION_DESC Struct Reference
    +
    +
    + +

    Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource. + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + + + + + + + +

    +Public Attributes

    ALLOCATION_FLAGS Flags
     Flags. More...
     
    D3D12_HEAP_TYPE HeapType
     The type of memory heap where the new allocation should be placed. More...
     
    D3D12_HEAP_FLAGS ExtraHeapFlags
     Additional heap flags to be used when allocating memory. More...
     
    PoolCustomPool
     Custom pool to place the new resource in. Optional. More...
     
    +

    Detailed Description

    +

    Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.

    +

    Member Data Documentation

    + +

    ◆ CustomPool

    + +
    +
    + + + + +
    Pool* D3D12MA::ALLOCATION_DESC::CustomPool
    +
    + +

    Custom pool to place the new resource in. Optional.

    +

    When not NULL, the resource will be created inside specified custom pool. It will then never be created as committed.

    + +
    +
    + +

    ◆ ExtraHeapFlags

    + +
    +
    + + + + +
    D3D12_HEAP_FLAGS D3D12MA::ALLOCATION_DESC::ExtraHeapFlags
    +
    + +

    Additional heap flags to be used when allocating memory.

    +

    In most cases it can be 0.

    +
      +
    • If you use D3D12MA::Allocator::CreateResource(), you don't need to care. Necessary flag D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS, D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES, or D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES is added automatically.
    • +
    • If you use D3D12MA::Allocator::AllocateMemory(), you should specify one of those ALLOW_ONLY flags. Except when you validate that D3D12MA::Allocator::GetD3D12Options().ResourceHeapTier == D3D12_RESOURCE_HEAP_TIER_1 - then you can leave it 0.
    • +
    • You can specify additional flags if needed. Then the memory will always be allocated as separate block using D3D12Device::CreateCommittedResource or CreateHeap, not as part of an existing larget block.
    • +
    +

    When D3D12MA::ALLOCATION_DESC::CustomPool != NULL this member is ignored.

    + +
    +
    + +

    ◆ Flags

    + +
    +
    + + + + +
    ALLOCATION_FLAGS D3D12MA::ALLOCATION_DESC::Flags
    +
    + +

    Flags.

    + +
    +
    + +

    ◆ HeapType

    + +
    +
    + + + + +
    D3D12_HEAP_TYPE D3D12MA::ALLOCATION_DESC::HeapType
    +
    + +

    The type of memory heap where the new allocation should be placed.

    +

    It must be one of: D3D12_HEAP_TYPE_DEFAULT, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_TYPE_READBACK.

    +

    When D3D12MA::ALLOCATION_DESC::CustomPool != NULL this member is ignored.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c-members.html new file mode 100644 index 0000000..b5f7a1e --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c-members.html @@ -0,0 +1,86 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::ALLOCATOR_DESC Member List
    +
    + + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html new file mode 100644 index 0000000..53df343 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html @@ -0,0 +1,191 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::ALLOCATOR_DESC Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::ALLOCATOR_DESC Struct Reference
    +
    +
    + +

    Parameters of created Allocator object. To be used with CreateAllocator(). + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + + + + + + + + +

    +Public Attributes

    ALLOCATOR_FLAGS Flags
     Flags. More...
     
    ID3D12Device * pDevice
     
    UINT64 PreferredBlockSize
     Preferred size of a single ID3D12Heap block to be allocated. More...
     
    const ALLOCATION_CALLBACKSpAllocationCallbacks
     Custom CPU memory allocation callbacks. Optional. More...
     
    IDXGIAdapter * pAdapter
     
    +

    Detailed Description

    +

    Parameters of created Allocator object. To be used with CreateAllocator().

    +

    Member Data Documentation

    + +

    ◆ Flags

    + +
    +
    + + + + +
    ALLOCATOR_FLAGS D3D12MA::ALLOCATOR_DESC::Flags
    +
    + +

    Flags.

    + +
    +
    + +

    ◆ pAdapter

    + +
    +
    + + + + +
    IDXGIAdapter* D3D12MA::ALLOCATOR_DESC::pAdapter
    +
    +

    DXGI Adapter object that you use for D3D12 and this allocator.

    +

    Allocator is doing AddRef/Release on this object.

    + +
    +
    + +

    ◆ pAllocationCallbacks

    + +
    +
    + + + + +
    const ALLOCATION_CALLBACKS* D3D12MA::ALLOCATOR_DESC::pAllocationCallbacks
    +
    + +

    Custom CPU memory allocation callbacks. Optional.

    +

    Optional, can be null. When specified, will be used for all CPU-side memory allocations.

    + +
    +
    + +

    ◆ pDevice

    + +
    +
    + + + + +
    ID3D12Device* D3D12MA::ALLOCATOR_DESC::pDevice
    +
    +

    Direct3D device object that the allocator should be attached to.

    +

    Allocator is doing AddRef/Release on this object.

    + +
    +
    + +

    ◆ PreferredBlockSize

    + +
    +
    + + + + +
    UINT64 D3D12MA::ALLOCATOR_DESC::PreferredBlockSize
    +
    + +

    Preferred size of a single ID3D12Heap block to be allocated.

    +

    Set to 0 to use default, which is currently 64 MiB.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_budget-members.html b/docs/html/struct_d3_d12_m_a_1_1_budget-members.html new file mode 100644 index 0000000..05754bb --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_budget-members.html @@ -0,0 +1,85 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::Budget Member List
    +
    +
    + +

    This is the complete list of members for D3D12MA::Budget, including all inherited members.

    + + + + + +
    AllocationBytesD3D12MA::Budget
    BlockBytesD3D12MA::Budget
    BudgetBytesD3D12MA::Budget
    UsageBytesD3D12MA::Budget
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_budget.html b/docs/html/struct_d3_d12_m_a_1_1_budget.html new file mode 100644 index 0000000..2513cc3 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_budget.html @@ -0,0 +1,177 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::Budget Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::Budget Struct Reference
    +
    +
    + +

    Statistics of current memory usage and available budget, in bytes, for GPU or CPU memory. + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + + + + + + + +

    +Public Attributes

    UINT64 BlockBytes
     Sum size of all memory blocks allocated from particular heap type, in bytes. More...
     
    UINT64 AllocationBytes
     Sum size of all allocations created in particular heap type, in bytes. More...
     
    UINT64 UsageBytes
     Estimated current memory usage of the program, in bytes. More...
     
    UINT64 BudgetBytes
     Estimated amount of memory available to the program, in bytes. More...
     
    +

    Detailed Description

    +

    Statistics of current memory usage and available budget, in bytes, for GPU or CPU memory.

    +

    Member Data Documentation

    + +

    ◆ AllocationBytes

    + +
    +
    + + + + +
    UINT64 D3D12MA::Budget::AllocationBytes
    +
    + +

    Sum size of all allocations created in particular heap type, in bytes.

    +

    Always less or equal than BlockBytes. Difference BlockBytes - AllocationBytes is the amount of memory allocated but unused - available for new allocations or wasted due to fragmentation.

    + +
    +
    + +

    ◆ BlockBytes

    + +
    +
    + + + + +
    UINT64 D3D12MA::Budget::BlockBytes
    +
    + +

    Sum size of all memory blocks allocated from particular heap type, in bytes.

    + +
    +
    + +

    ◆ BudgetBytes

    + +
    +
    + + + + +
    UINT64 D3D12MA::Budget::BudgetBytes
    +
    + +

    Estimated amount of memory available to the program, in bytes.

    +

    Fetched from system using IDXGIAdapter3::QueryVideoMemoryInfo if enabled.

    +

    It might be different (most probably smaller) than memory sizes reported in DXGI_ADAPTER_DESC due to factors external to the program, like other programs also consuming system resources. Difference BudgetBytes - UsageBytes is the amount of additional memory that can probably be allocated without problems. Exceeding the budget may result in various problems.

    + +
    +
    + +

    ◆ UsageBytes

    + +
    +
    + + + + +
    UINT64 D3D12MA::Budget::UsageBytes
    +
    + +

    Estimated current memory usage of the program, in bytes.

    +

    Fetched from system using IDXGIAdapter3::QueryVideoMemoryInfo if enabled.

    +

    It might be different than BlockBytes (usually higher) due to additional implicit objects also occupying the memory, like swapchain, pipeline state objects, descriptor heaps, command lists, or memory blocks allocated outside of this library, if any.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c-members.html new file mode 100644 index 0000000..1d3e719 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c-members.html @@ -0,0 +1,87 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::POOL_DESC Member List
    +
    + + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html new file mode 100644 index 0000000..5dc66aa --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html @@ -0,0 +1,218 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::POOL_DESC Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::POOL_DESC Struct Reference
    +
    +
    + +

    Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool. + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    D3D12_HEAP_PROPERTIES HeapProperties
     The parameters of memory heap where allocations of this pool should be placed. More...
     
    D3D12_HEAP_FLAGS HeapFlags
     Heap flags to be used when allocating heaps of this pool. More...
     
    UINT64 BlockSize
     Size of a single heap (memory block) to be allocated as part of this pool, in bytes. Optional. More...
     
    UINT MinBlockCount
     Minimum number of heaps (memory blocks) to be always allocated in this pool, even if they stay empty. Optional. More...
     
    UINT MaxBlockCount
     Maximum number of heaps (memory blocks) that can be allocated in this pool. Optional. More...
     
    UINT64 MinAllocationAlignment
     Additional minimum alignment to be used for all allocations created from this pool. Can be 0. More...
     
    +

    Detailed Description

    +

    Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.

    +

    Member Data Documentation

    + +

    ◆ BlockSize

    + +
    +
    + + + + +
    UINT64 D3D12MA::POOL_DESC::BlockSize
    +
    + +

    Size of a single heap (memory block) to be allocated as part of this pool, in bytes. Optional.

    +

    Specify nonzero to set explicit, constant size of memory blocks used by this pool. Leave 0 to use default and let the library manage block sizes automatically. Then sizes of particular blocks may vary.

    + +
    +
    + +

    ◆ HeapFlags

    + +
    +
    + + + + +
    D3D12_HEAP_FLAGS D3D12MA::POOL_DESC::HeapFlags
    +
    + +

    Heap flags to be used when allocating heaps of this pool.

    +

    It should contain one of these values, depending on type of resources you are going to create in this heap: D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS, D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES, D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES. Except if ResourceHeapTier = 2, then it may be D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0.

    +

    You can specify additional flags if needed.

    + +
    +
    + +

    ◆ HeapProperties

    + +
    +
    + + + + +
    D3D12_HEAP_PROPERTIES D3D12MA::POOL_DESC::HeapProperties
    +
    + +

    The parameters of memory heap where allocations of this pool should be placed.

    +

    In the simplest case, just fill it with zeros and set Type to one of: D3D12_HEAP_TYPE_DEFAULT, D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_TYPE_READBACK. Additional parameters can be used e.g. to utilize UMA.

    + +
    +
    + +

    ◆ MaxBlockCount

    + +
    +
    + + + + +
    UINT D3D12MA::POOL_DESC::MaxBlockCount
    +
    + +

    Maximum number of heaps (memory blocks) that can be allocated in this pool. Optional.

    +

    Set to 0 to use default, which is UINT64_MAX, which means no limit.

    +

    Set to same value as D3D12MA::POOL_DESC::MinBlockCount to have fixed amount of memory allocated throughout whole lifetime of this pool.

    + +
    +
    + +

    ◆ MinAllocationAlignment

    + +
    +
    + + + + +
    UINT64 D3D12MA::POOL_DESC::MinAllocationAlignment
    +
    + +

    Additional minimum alignment to be used for all allocations created from this pool. Can be 0.

    +

    Leave 0 (default) not to impose any additional alignment. If not 0, it must be a power of two.

    + +
    +
    + +

    ◆ MinBlockCount

    + +
    +
    + + + + +
    UINT D3D12MA::POOL_DESC::MinBlockCount
    +
    + +

    Minimum number of heaps (memory blocks) to be always allocated in this pool, even if they stay empty. Optional.

    +

    Set to 0 to have no preallocated blocks and allow the pool be completely empty.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_stat_info-members.html b/docs/html/struct_d3_d12_m_a_1_1_stat_info-members.html new file mode 100644 index 0000000..d0bd3ff --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_stat_info-members.html @@ -0,0 +1,92 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::StatInfo Member List
    +
    + + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_stat_info.html b/docs/html/struct_d3_d12_m_a_1_1_stat_info.html new file mode 100644 index 0000000..5863682 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_stat_info.html @@ -0,0 +1,287 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::StatInfo Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::StatInfo Struct Reference
    +
    +
    + +

    Calculated statistics of memory usage in entire allocator. + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    UINT BlockCount
     Number of memory blocks (heaps) allocated. More...
     
    UINT AllocationCount
     Number of D3D12MA::Allocation objects allocated. More...
     
    UINT UnusedRangeCount
     Number of free ranges of memory between allocations. More...
     
    UINT64 UsedBytes
     Total number of bytes occupied by all allocations. More...
     
    UINT64 UnusedBytes
     Total number of bytes occupied by unused ranges. More...
     
    UINT64 AllocationSizeMin
     
    UINT64 AllocationSizeAvg
     
    UINT64 AllocationSizeMax
     
    UINT64 UnusedRangeSizeMin
     
    UINT64 UnusedRangeSizeAvg
     
    UINT64 UnusedRangeSizeMax
     
    +

    Detailed Description

    +

    Calculated statistics of memory usage in entire allocator.

    +

    Member Data Documentation

    + +

    ◆ AllocationCount

    + +
    +
    + + + + +
    UINT D3D12MA::StatInfo::AllocationCount
    +
    + +

    Number of D3D12MA::Allocation objects allocated.

    + +
    +
    + +

    ◆ AllocationSizeAvg

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::AllocationSizeAvg
    +
    + +
    +
    + +

    ◆ AllocationSizeMax

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::AllocationSizeMax
    +
    + +
    +
    + +

    ◆ AllocationSizeMin

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::AllocationSizeMin
    +
    + +
    +
    + +

    ◆ BlockCount

    + +
    +
    + + + + +
    UINT D3D12MA::StatInfo::BlockCount
    +
    + +

    Number of memory blocks (heaps) allocated.

    + +
    +
    + +

    ◆ UnusedBytes

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::UnusedBytes
    +
    + +

    Total number of bytes occupied by unused ranges.

    + +
    +
    + +

    ◆ UnusedRangeCount

    + +
    +
    + + + + +
    UINT D3D12MA::StatInfo::UnusedRangeCount
    +
    + +

    Number of free ranges of memory between allocations.

    + +
    +
    + +

    ◆ UnusedRangeSizeAvg

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::UnusedRangeSizeAvg
    +
    + +
    +
    + +

    ◆ UnusedRangeSizeMax

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::UnusedRangeSizeMax
    +
    + +
    +
    + +

    ◆ UnusedRangeSizeMin

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::UnusedRangeSizeMin
    +
    + +
    +
    + +

    ◆ UsedBytes

    + +
    +
    + + + + +
    UINT64 D3D12MA::StatInfo::UsedBytes
    +
    + +

    Total number of bytes occupied by all allocations.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_stats-members.html b/docs/html/struct_d3_d12_m_a_1_1_stats-members.html new file mode 100644 index 0000000..2257e5b --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_stats-members.html @@ -0,0 +1,83 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::Stats Member List
    +
    +
    + +

    This is the complete list of members for D3D12MA::Stats, including all inherited members.

    + + + +
    HeapTypeD3D12MA::Stats
    TotalD3D12MA::Stats
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_stats.html b/docs/html/struct_d3_d12_m_a_1_1_stats.html new file mode 100644 index 0000000..8d1632d --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_stats.html @@ -0,0 +1,132 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::Stats Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::Stats Struct Reference
    +
    +
    + +

    General statistics from the current state of the allocator. + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + +

    +Public Attributes

    StatInfo Total
     Total statistics from all heap types. More...
     
    StatInfo HeapType [HEAP_TYPE_COUNT]
     
    +

    Detailed Description

    +

    General statistics from the current state of the allocator.

    +

    Member Data Documentation

    + +

    ◆ HeapType

    + +
    +
    + + + + +
    StatInfo D3D12MA::Stats::HeapType[HEAP_TYPE_COUNT]
    +
    +

    One StatInfo for each type of heap located at the following indices: 0 - DEFAULT, 1 - UPLOAD, 2 - READBACK, 3 - CUSTOM.

    + +
    +
    + +

    ◆ Total

    + +
    +
    + + + + +
    StatInfo D3D12MA::Stats::Total
    +
    + +

    Total statistics from all heap types.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html new file mode 100644 index 0000000..3d821a9 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html @@ -0,0 +1,84 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::VIRTUAL_ALLOCATION_DESC Member List
    +
    + + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html new file mode 100644 index 0000000..ddd20b5 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html @@ -0,0 +1,156 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::VIRTUAL_ALLOCATION_DESC Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::VIRTUAL_ALLOCATION_DESC Struct Reference
    +
    +
    + +

    Parameters of created virtual allocation to be passed to VirtualBlock::Allocate(). + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + + + + +

    +Public Attributes

    UINT64 Size
     Size of the allocation. More...
     
    UINT64 Alignment
     Required alignment of the allocation. More...
     
    void * pUserData
     Custom pointer to be associated with the allocation. More...
     
    +

    Detailed Description

    +

    Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().

    +

    Member Data Documentation

    + +

    ◆ Alignment

    + +
    +
    + + + + +
    UINT64 D3D12MA::VIRTUAL_ALLOCATION_DESC::Alignment
    +
    + +

    Required alignment of the allocation.

    +

    Must be power of two. Special value 0 has the same meaning as 1 - means no special alignment is required, so allocation can start at any offset.

    + +
    +
    + +

    ◆ pUserData

    + +
    +
    + + + + +
    void* D3D12MA::VIRTUAL_ALLOCATION_DESC::pUserData
    +
    + +

    Custom pointer to be associated with the allocation.

    +

    It can be fetched or changed later.

    + +
    +
    + +

    ◆ Size

    + +
    +
    + + + + +
    UINT64 D3D12MA::VIRTUAL_ALLOCATION_DESC::Size
    +
    + +

    Size of the allocation.

    +

    Cannot be zero.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o-members.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o-members.html new file mode 100644 index 0000000..f3e861e --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o-members.html @@ -0,0 +1,83 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::VIRTUAL_ALLOCATION_INFO Member List
    +
    +
    + +

    This is the complete list of members for D3D12MA::VIRTUAL_ALLOCATION_INFO, including all inherited members.

    + + + +
    pUserDataD3D12MA::VIRTUAL_ALLOCATION_INFO
    sizeD3D12MA::VIRTUAL_ALLOCATION_INFO
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html new file mode 100644 index 0000000..6694253 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html @@ -0,0 +1,136 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::VIRTUAL_ALLOCATION_INFO Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::VIRTUAL_ALLOCATION_INFO Struct Reference
    +
    +
    + +

    Parameters of an existing virtual allocation, returned by VirtualBlock::GetAllocationInfo(). + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + +

    +Public Attributes

    UINT64 size
     Size of the allocation. More...
     
    void * pUserData
     Custom pointer associated with the allocation. More...
     
    +

    Detailed Description

    +

    Parameters of an existing virtual allocation, returned by VirtualBlock::GetAllocationInfo().

    +

    Member Data Documentation

    + +

    ◆ pUserData

    + +
    +
    + + + + +
    void* D3D12MA::VIRTUAL_ALLOCATION_INFO::pUserData
    +
    + +

    Custom pointer associated with the allocation.

    +

    Same value as passed in VIRTUAL_ALLOCATION_DESC::pUserData or VirtualBlock::SetAllocationUserData().

    + +
    +
    + +

    ◆ size

    + +
    +
    + + + + +
    UINT64 D3D12MA::VIRTUAL_ALLOCATION_INFO::size
    +
    + +

    Size of the allocation.

    +

    Same value as passed in VIRTUAL_ALLOCATION_DESC::Size.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html new file mode 100644 index 0000000..1aa7fd3 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html @@ -0,0 +1,83 @@ + + + + + + + +Direct3D 12 Memory Allocator: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    D3D12MA::VIRTUAL_BLOCK_DESC Member List
    +
    +
    + +

    This is the complete list of members for D3D12MA::VIRTUAL_BLOCK_DESC, including all inherited members.

    + + + +
    pAllocationCallbacksD3D12MA::VIRTUAL_BLOCK_DESC
    SizeD3D12MA::VIRTUAL_BLOCK_DESC
    + + + + diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html new file mode 100644 index 0000000..0937468 --- /dev/null +++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html @@ -0,0 +1,136 @@ + + + + + + + +Direct3D 12 Memory Allocator: D3D12MA::VIRTUAL_BLOCK_DESC Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    D3D12MA::VIRTUAL_BLOCK_DESC Struct Reference
    +
    +
    + +

    Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock(). + More...

    + +

    #include <D3D12MemAlloc.h>

    + + + + + + + + +

    +Public Attributes

    UINT64 Size
     Total size of the block. More...
     
    const ALLOCATION_CALLBACKSpAllocationCallbacks
     Custom CPU memory allocation callbacks. Optional. More...
     
    +

    Detailed Description

    +

    Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().

    +

    Member Data Documentation

    + +

    ◆ pAllocationCallbacks

    + +
    +
    + + + + +
    const ALLOCATION_CALLBACKS* D3D12MA::VIRTUAL_BLOCK_DESC::pAllocationCallbacks
    +
    + +

    Custom CPU memory allocation callbacks. Optional.

    +

    Optional, can be null. When specified, will be used for all CPU-side memory allocations.

    + +
    +
    + +

    ◆ Size

    + +
    +
    + + + + +
    UINT64 D3D12MA::VIRTUAL_BLOCK_DESC::Size
    +
    + +

    Total size of the block.

    +

    Sizes can be expressed in bytes or any units you want as long as you are consistent in using them. For example, if you allocate from some array of structures, 1 can mean single instance of entire structure.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/docs/html/sync_off.png differ diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/docs/html/sync_on.png differ diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/docs/html/tab_a.png differ diff --git a/docs/html/tab_b.png b/docs/html/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/docs/html/tab_b.png differ diff --git a/docs/html/tab_h.png b/docs/html/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/docs/html/tab_h.png differ diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/docs/html/tab_s.png differ diff --git a/docs/html/tabs.css b/docs/html/tabs.css new file mode 100644 index 0000000..85a0cd5 --- /dev/null +++ b/docs/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/docs/html/virtual_allocator.html b/docs/html/virtual_allocator.html new file mode 100644 index 0000000..d382211 --- /dev/null +++ b/docs/html/virtual_allocator.html @@ -0,0 +1,179 @@ + + + + + + + +Direct3D 12 Memory Allocator: Virtual allocator + + + + + + + + + +
    +
    + + + + + + +
    +
    Direct3D 12 Memory Allocator +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    Virtual allocator
    +
    +
    +

    As an extra feature, the core allocation algorithm of the library is exposed through a simple and convenient API of "virtual allocator". It doesn't allocate any real GPU memory. It just keeps track of used and free regions of a "virtual block". You can use it to allocate your own memory or other objects, even completely unrelated to D3D12. A common use case is sub-allocation of pieces of one large GPU buffer.

    +

    +Creating virtual block

    +

    To use this functionality, there is no main "allocator" object. You don't need to have D3D12MA::Allocator object created. All you need to do is to create a separate D3D12MA::VirtualBlock object for each block of memory you want to be managed by the allocator:

    +
      +
    1. Fill in D3D12MA::ALLOCATOR_DESC structure.
    2. +
    3. Call D3D12MA::CreateVirtualBlock. Get new D3D12MA::VirtualBlock object.
    4. +
    +

    Example:

    +
    +
    blockDesc.Size = 1048576; // 1 MB
    +
    + +
    HRESULT hr = CreateVirtualBlock(&blockDesc, &block);
    +
    Represents pure allocation algorithm and a data structure with allocations in some memory block,...
    Definition: D3D12MemAlloc.h:1547
    +
    HRESULT CreateVirtualBlock(const VIRTUAL_BLOCK_DESC *pDesc, VirtualBlock **ppVirtualBlock)
    Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.
    +
    Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().
    Definition: D3D12MemAlloc.h:1489
    +
    UINT64 Size
    Total size of the block.
    Definition: D3D12MemAlloc.h:1495
    +

    +Making virtual allocations

    +

    D3D12MA::VirtualBlock object contains internal data structure that keeps track of free and occupied regions using the same code as the main D3D12 memory allocator. However, there is no "virtual allocation" object. When you request a new allocation, a UINT64 number is returned. It is an offset inside the block where the allocation has been placed, but it also uniquely identifies the allocation within this block.

    +

    In order to make an allocation:

    +
      +
    1. Fill in D3D12MA::VIRTUAL_ALLOCATION_DESC structure.
    2. +
    3. Call D3D12MA::VirtualBlock::Allocate. Get new UINT64 offset that identifies the allocation.
    4. +
    +

    Example:

    +
    +
    allocDesc.Size = 4096; // 4 KB
    +
    +
    UINT64 allocOffset;
    +
    hr = block->Allocate(&allocDesc, &allocOffset);
    +
    if(SUCCEEDED(hr))
    +
    {
    +
    // Use the 4 KB of your memory starting at allocOffset.
    +
    }
    +
    else
    +
    {
    +
    // Allocation failed - no space for it could be found. Handle this error!
    +
    }
    +
    HRESULT Allocate(const VIRTUAL_ALLOCATION_DESC *pDesc, UINT64 *pOffset)
    Creates new allocation.
    +
    Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().
    Definition: D3D12MemAlloc.h:1505
    +
    UINT64 Size
    Size of the allocation.
    Definition: D3D12MemAlloc.h:1510
    +

    +Deallocation

    +

    When no longer needed, an allocation can be freed by calling D3D12MA::VirtualBlock::FreeAllocation. You can only pass to this function the exact offset that was previously returned by D3D12MA::VirtualBlock::Allocate and not any other location within the memory.

    +

    When whole block is no longer needed, the block object can be released by calling D3D12MA::VirtualBlock::Release. All allocations must be freed before the block is destroyed, which is checked internally by an assert. However, if you don't want to call block->FreeAllocation for each allocation, you can use D3D12MA::VirtualBlock::Clear to free them all at once - a feature not available in normal D3D12 memory allocator. Example:

    +
    block->FreeAllocation(allocOffset);
    +
    block->Release();
    +
    void FreeAllocation(UINT64 offset)
    Frees the allocation at given offset.
    +
    void Release()
    Destroys this object and frees it from memory.
    +

    +Allocation parameters

    +

    You can attach a custom pointer to each allocation by using D3D12MA::VirtualBlock::SetAllocationUserData. Its default value is NULL. It can be used to store any data that needs to be associated with that allocation - e.g. an index, a handle, or a pointer to some larger data structure containing more information. Example:

    +
    struct CustomAllocData
    +
    {
    +
    std::string m_AllocName;
    +
    };
    +
    CustomAllocData* allocData = new CustomAllocData();
    +
    allocData->m_AllocName = "My allocation 1";
    +
    block->SetAllocationUserData(allocOffset, allocData);
    +
    void SetAllocationUserData(UINT64 offset, void *pUserData)
    Changes custom pointer for an allocation at given offset to a new value.
    +

    The pointer can later be fetched, along with allocation size, by passing the allocation offset to function D3D12MA::VirtualBlock::GetAllocationInfo and inspecting returned structure D3D12MA::VIRTUAL_ALLOCATION_INFO. If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the allocation! Example:

    +
    VIRTUAL_ALLOCATION_INFO allocInfo;
    +
    block->GetAllocationInfo(allocOffset, &allocInfo);
    +
    delete (CustomAllocData*)allocInfo.pUserData;
    +
    +
    block->FreeAllocation(allocOffset);
    +
    void GetAllocationInfo(UINT64 offset, VIRTUAL_ALLOCATION_INFO *pInfo) const
    Returns information about an allocation at given offset - its size and custom pointer.
    +

    +Alignment and units

    +

    It feels natural to express sizes and offsets in bytes. If an offset of an allocation needs to be aligned to a multiply of some number (e.g. 4 bytes), you can fill optional member D3D12MA::VIRTUAL_ALLOCATION_DESC::Alignment to request it. Example:

    +
    +
    allocDesc.Size = 4096; // 4 KB
    +
    allocDesc.Alignment = 4; // Returned offset must be a multiply of 4 B
    +
    +
    UINT64 allocOffset;
    +
    hr = block->Allocate(&allocDesc, &allocOffset);
    +
    UINT64 Alignment
    Required alignment of the allocation.
    Definition: D3D12MemAlloc.h:1515
    +

    Alignments of different allocations made from one block may vary. However, if all alignments and sizes are always multiply of some size e.g. 4 B or sizeof(MyDataStruct), you can express all sizes, alignments, and offsets in multiples of that size instead of individual bytes. It might be more convenient, but you need to make sure to use this new unit consistently in all the places:

    + +

    +Statistics

    +

    You can obtain statistics of a virtual block using D3D12MA::VirtualBlock::CalculateStats. The function fills structure D3D12MA::StatInfo - same as used by the normal D3D12 memory allocator. Example:

    +
    +
    block->CalculateStats(&statInfo);
    +
    printf("My virtual block has %llu bytes used by %u virtual allocations\n",
    +
    statInfo.UsedBytes, statInfo.AllocationCount);
    +
    void CalculateStats(StatInfo *pInfo) const
    Retrieves statistics from the current state of the block.
    +
    Calculated statistics of memory usage in entire allocator.
    Definition: D3D12MemAlloc.h:1183
    +
    UINT AllocationCount
    Number of D3D12MA::Allocation objects allocated.
    Definition: D3D12MemAlloc.h:1187
    +
    UINT64 UsedBytes
    Total number of bytes occupied by all allocations.
    Definition: D3D12MemAlloc.h:1191
    +

    You can also request a full list of allocations and free regions as a string in JSON format by calling D3D12MA::VirtualBlock::BuildStatsString. Returned string must be later freed using D3D12MA::VirtualBlock::FreeStatsString. The format of this string may differ from the one returned by the main D3D12 allocator, but it is similar.

    +

    +Additional considerations

    +

    Note that the "virtual allocator" functionality is implemented on a level of individual memory blocks. Keeping track of a whole collection of blocks, allocating new ones when out of free space, deleting empty ones, and deciding which one to try first for a new allocation must be implemented by the user.

    +
    +
    + + + + diff --git a/src/D3D12MemAlloc.h b/src/D3D12MemAlloc.h index 8b8674a..1ab25ef 100644 --- a/src/D3D12MemAlloc.h +++ b/src/D3D12MemAlloc.h @@ -24,7 +24,7 @@ /** \mainpage D3D12 Memory Allocator -Version 2.0.0-development (2021-03-11) +Version 2.0.0-development (2021-06-18) Copyright (c) 2019-2021 Advanced Micro Devices, Inc. All rights reserved. \n License: MIT