public static void BreakOnDeletion <T>(ComPtr <T> ptr, object?data = null) where T : unmanaged { if (data is null) { data = $"'{typeof(T).Name} with name '{DirectXHelpers.GetObjectName(ptr.Get())}' is being deleted"; } RegisterForDeletionCallback(ptr, BreakOnDeletion, data); }
protected override ComPtr <ID3D12CommandAllocator> Create(ExecutionContext state) { using ComPtr <ID3D12CommandAllocator> allocator = default; Guard.ThrowIfFailed(_device.Get()->CreateCommandAllocator( (D3D12_COMMAND_LIST_TYPE)state, allocator.Guid, ComPtr.GetVoidAddressOf(&allocator) )); DirectXHelpers.SetObjectName(allocator.Get(), $"Pooled allocator #{_allocatorCount++}"); return(allocator.Move()); }
private DescriptorHeap(ID3D12Device *device, D3D12_DESCRIPTOR_HEAP_DESC desc) { ComPtr <ID3D12DescriptorHeap> heap = default; Guard.ThrowIfFailed(device->CreateDescriptorHeap(&desc, heap.Guid, (void **)&heap)); _heap = heap.Move(); var cpu = _heap.Get()->GetCPUDescriptorHandleForHeapStart(); var gpu = _heap.Get()->GetGPUDescriptorHandleForHeapStart(); FirstDescriptor = new DescriptorHandle(cpu, gpu, desc.Type); Type = desc.Type; NumDescriptors = desc.NumDescriptors; DirectXHelpers.SetObjectName(_heap.Get(), nameof(ID3D12DescriptorHeap)); }
protected override ComPtr <ID3D12GraphicsCommandList> Create(ListCreationParams state) { using ComPtr <ID3D12GraphicsCommandList> list = default; Guard.ThrowIfFailed(_device.Get()->CreateCommandList( 0, // TODO: MULTI-GPU state.Type, state.Allocator, state.Pso, list.Guid, ComPtr.GetVoidAddressOf(&list) )); DirectXHelpers.SetObjectName(list.Get(), $"Pooled list #{_listCount++}"); // 'ManageRent' expects closed list Guard.ThrowIfFailed(list.Get()->Close()); return(list.Move()); }