21 ID3D12Resource* textureResource);
25 ID3D12Resource* textureResource);
29 ID3D12Resource* bufferResource,
33 ID3D12Resource* resource,
34 unsigned int mostDetailedMip,
35 unsigned int mipLevels);
37 ID3D12Resource* resource,
38 unsigned int mipSlice);
44 unsigned int maxAnisotropy,
45 D3D12_TEXTURE_ADDRESS_MODE addressModeU,
46 D3D12_TEXTURE_ADDRESS_MODE addressModeV);
52 static std::unique_ptr<Heap> Make(
GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE
type,
53 unsigned int numDescriptors);
58 return handle.
fHeapID == fHeap->uniqueID();
61 bool canAllocate() {
return fFreeCount > 0; }
64 Heap(std::unique_ptr<GrD3DDescriptorHeap>& heap,
unsigned int numDescriptors)
65 : fHeap(std::move(heap))
66 , fFreeBlocks(numDescriptors)
67 , fFreeCount(numDescriptors) {
68 for (
unsigned int i = 0; i < numDescriptors; ++i) {
73 std::unique_ptr<GrD3DDescriptorHeap> fHeap;
75 unsigned int fFreeCount;
80 HeapPool(
GrD3DGpu*, D3D12_DESCRIPTOR_HEAP_TYPE);
86 std::vector<std::unique_ptr<Heap>> fDescriptorHeaps;
87 int fMaxAvailableDescriptors;
88 D3D12_DESCRIPTOR_HEAP_TYPE fHeapType;
91 HeapPool fRTVDescriptorPool;
92 HeapPool fDSVDescriptorPool;
93 HeapPool fShaderViewDescriptorPool;
94 HeapPool fSamplerDescriptorPool;
GrD3DDescriptorHeap::CPUHandle createSampler(GrD3DGpu *, D3D12_FILTER filter, float maxLOD, unsigned int maxAnisotropy, D3D12_TEXTURE_ADDRESS_MODE addressModeU, D3D12_TEXTURE_ADDRESS_MODE addressModeV)