/// <summary> /// Creates a new <see cref="GpuResourceDesc"/> /// </summary> /// <param name="resourceFormat">The <see cref="GpuResourceFormat"/> describing the resource format and dimensions</param> /// <param name="gpuMemoryType">The type of GPU memory this resource will be on</param> /// <param name="initialState">The initial state of the resource</param> /// <param name="allocFlags">Any additional allocation flags passed to the allocator</param> /// <param name="clearValue">If this resource is a texture, the clear value for which it is optimised</param> /// <param name="heapFlags">Any additional flags used for creating or selecting the allocation heap</param> public GpuResourceDesc( GpuResourceFormat resourceFormat, GpuMemoryType gpuMemoryType, D3D12_RESOURCE_STATES initialState, GpuAllocFlags allocFlags = GpuAllocFlags.None, D3D12_CLEAR_VALUE?clearValue = null, D3D12_HEAP_FLAGS heapFlags = D3D12_HEAP_FLAGS.D3D12_HEAP_FLAG_NONE ) { ResourceFormat = resourceFormat; GpuMemoryType = gpuMemoryType; InitialState = initialState; AllocFlags = allocFlags; ClearValue = clearValue; HeapFlags = heapFlags; }
/// <summary> /// Allocates a new <see cref="IndexBuffer{TIndex}"/> /// </summary> /// <typeparam name="TIndex">The type of each index</typeparam> /// <param name="indexCount">The number of indices</param> /// <param name="type">The type of GPU memory to allocate in</param> /// <param name="flags">Any additional allocation flags passed to the allocator</param> /// <returns>A new <see cref="IndexBuffer{TIndex}"/></returns> public IndexBuffer <TIndex> AllocateIndexBuffer <TIndex>( uint indexCount, GpuMemoryType type, GpuAllocFlags flags = GpuAllocFlags.None ) where TIndex : unmanaged { Debug.Assert(type != GpuMemoryType.CpuReadOptimized); var desc = new GpuResourceDesc( GpuResourceFormat.Buffer((uint)sizeof(TIndex) * indexCount), type, type == GpuMemoryType.CpuWriteOptimized ? D3D12_RESOURCE_STATE_GENERIC_READ : D3D12_RESOURCE_STATE_INDEX_BUFFER, flags ); return(new IndexBuffer <TIndex>(Allocate(desc))); }