public static uint GetVulkanBufferUsageKind(GraphicsBufferKind kind, GraphicsResourceCpuAccess cpuAccess) { var vulkanBufferUsageKind = kind switch { GraphicsBufferKind.Vertex => VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, GraphicsBufferKind.Index => VK_BUFFER_USAGE_INDEX_BUFFER_BIT, GraphicsBufferKind.Constant => VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, _ => default,
/// <inheritdoc /> public override D3D12GraphicsBuffer CreateBuffer(GraphicsBufferKind kind, GraphicsResourceCpuAccess cpuAccess, ulong size, ulong alignment = 0, GraphicsMemoryAllocationFlags allocationFlags = GraphicsMemoryAllocationFlags.None) { var index = GetBlockCollectionIndex(cpuAccess, 0); var resourceDesc = D3D12_RESOURCE_DESC.Buffer(size, D3D12_RESOURCE_FLAG_NONE, alignment); var resourceAllocationInfo = Device.D3D12Device->GetResourceAllocationInfo(visibleMask: 0, numResourceDescs: 1, &resourceDesc); ref readonly var blockCollection = ref _blockCollections[index];
/// <inheritdoc /> public override VulkanGraphicsBuffer CreateBuffer(GraphicsBufferKind kind, GraphicsResourceCpuAccess cpuAccess, ulong size, ulong alignment = 0, GraphicsMemoryAllocationFlags allocationFlags = GraphicsMemoryAllocationFlags.None) { var vulkanDevice = Device.VulkanDevice; var bufferCreateInfo = new VkBufferCreateInfo { sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, size = size, usage = GetVulkanBufferUsageKind(kind, cpuAccess) }; VkBuffer vulkanBuffer; ThrowExternalExceptionIfNotSuccess(nameof(vkCreateBuffer), vkCreateBuffer(vulkanDevice, &bufferCreateInfo, pAllocator: null, (ulong *)&vulkanBuffer)); VkMemoryRequirements memoryRequirements; vkGetBufferMemoryRequirements(vulkanDevice, vulkanBuffer, &memoryRequirements); var index = GetBlockCollectionIndex(cpuAccess, memoryRequirements.memoryTypeBits); ref readonly var blockCollection = ref _blockCollections[index];
internal D3D12GraphicsBuffer(GraphicsBufferKind kind, GraphicsResourceCpuAccess cpuAccess, in GraphicsMemoryBlockRegion memoryBlockRegion)
/// <summary>Initializes a new instance of the <see cref="GraphicsBuffer" /> class.</summary> /// <param name="kind">The buffer kind.</param> /// <param name="cpuAccess">The CPU access capabilities of the resource.</param> /// <param name="memoryBlockRegion">The memory block region in which the resource exists.</param> /// <inheritdoc cref="GraphicsResource(GraphicsResourceCpuAccess, in GraphicsMemoryBlockRegion)" /> protected GraphicsBuffer(GraphicsBufferKind kind, GraphicsResourceCpuAccess cpuAccess, in GraphicsMemoryBlockRegion memoryBlockRegion)
internal VulkanGraphicsBuffer(GraphicsBufferKind kind, GraphicsResourceCpuAccess cpuAccess, in GraphicsMemoryBlockRegion memoryBlockRegion, VkBuffer vulkanBuffer)
/// <summary>Initializes a new instance of the <see cref="GraphicsTexture" /> class.</summary> /// <param name="kind">The texture kind.</param> /// <param name="cpuAccess">The CPU access capabilities of the resource.</param> /// <param name="memoryBlockRegion">The memory block region in which the resource exists.</param> /// <param name="width">The width, in pixels, of the graphics texture.</param> /// <param name="height">The height, in pixels, of the graphics texture.</param> /// <param name="depth">The depth, in pixels, of the graphics texture.</param> /// <inheritdoc cref="GraphicsResource(GraphicsResourceCpuAccess, in GraphicsMemoryBlockRegion)" /> protected GraphicsTexture(GraphicsTextureKind kind, GraphicsResourceCpuAccess cpuAccess, in GraphicsMemoryBlockRegion memoryBlockRegion, uint width, uint height, ushort depth)
/// <summary>Initializes a new instance of the <see cref="GraphicsResource" /> class.</summary> /// <param name="cpuAccess">The CPU access capabilities of the resource.</param> /// <param name="memoryBlockRegion">The memory block region in which the resource exists.</param> /// <exception cref="ArgumentOutOfRangeException"><paramref name="memoryBlockRegion" />.<see cref="GraphicsMemoryBlockRegion.Block" /> is <c>null</c>.</exception> /// <exception cref="ArgumentOutOfRangeException"><paramref name="memoryBlockRegion" />.<see cref="GraphicsMemoryBlockRegion.IsAllocated" /> is <c>false</c>.</exception> private protected GraphicsResource(GraphicsResourceCpuAccess cpuAccess, in GraphicsMemoryBlockRegion memoryBlockRegion)
internal VulkanGraphicsTexture(GraphicsTextureKind kind, GraphicsResourceCpuAccess cpuAccess, in GraphicsMemoryBlockRegion memoryBlockRegion, uint width, uint height, ushort depth, VkImage vulkanImage)