/// <summary> /// Starts building a new attachment for this render pass /// </summary> /// <param name="id">identifier for the attachment</param> /// <param name="format">attachment's format</param> /// <param name="finalLayout">attachment's final image layout</param> /// <param name="samples">attachment's sample count</param> /// <returns>attachment builder</returns> public AttachmentBuilder WithAttachment(TAttachment id, VkFormat format, VkImageLayout finalLayout, VkSampleCountFlag samples = VkSampleCountFlag.Count1) { Debug.Assert(!_attachmentOrder.Contains(id)); _attachmentOrder.Add(id); return(new AttachmentBuilder(this, id, format, finalLayout, samples)); }
public ImagePooled(Device dev, VkFormat format, VkImageType type, VkExtent3D size, uint mipLevels, uint arrayLayers, VkImageTiling tiling, VkSampleCountFlag samples, VkImageUsageFlag usage, VkImageCreateFlag flags, VkSharingMode sharing = VkSharingMode.Exclusive, uint[] sharedQueueFamily = null) : base(dev, format, type, size, mipLevels, arrayLayers, tiling, samples, usage, flags, sharing, sharedQueueFamily) { var memReq = MemoryRequirements; var memType = memReq.FindMemoryType(dev.PhysicalDevice); Memory = dev.MemoryPool.Allocate(memType, DeviceMemoryPools.Pool.TexturePool, memReq.TypeRequirements.Size); BindMemory(Memory.BackingMemory, Memory.Offset); }
internal AttachmentBuilder(RenderPassBuilder builder, VkFormat format, VkImageLayout finalLayout, VkSampleCountFlag samples) { _builder = builder; _desc = new VkAttachmentDescription() { Format = format, FinalLayout = finalLayout, InitialLayout = VkImageLayout.Undefined, Flags = 0, LoadOp = VkAttachmentLoadOp.DontCare, StoreOp = VkAttachmentStoreOp.DontCare, StencilLoadOp = VkAttachmentLoadOp.DontCare, StencilStoreOp = VkAttachmentStoreOp.DontCare, Samples = samples }; }
public Image(Device dev, VkFormat format, VkImageType type, VkExtent3D size, uint mipLevels, uint arrayLayers, VkImageTiling tiling, VkSampleCountFlag samples, VkImageUsageFlag usage, VkImageCreateFlag flags, VkSharingMode sharing = VkSharingMode.Exclusive, uint[] sharedQueueFamily = null) { Device = dev; Format = format; Dimensions = size; MipmapCount = mipLevels; LayerCount = arrayLayers; unsafe { #if DEBUG var properties = Device.PhysicalDevice.Handle.GetPhysicalDeviceImageFormatProperties(format, type, tiling, usage, flags); #endif if (sharing == VkSharingMode.Concurrent) Debug.Assert(sharedQueueFamily != null); fixed(uint *sharedPtr = sharedQueueFamily) { var info = new VkImageCreateInfo() { SType = VkStructureType.ImageCreateInfo, Format = format, ImageType = type, Tiling = tiling, Extent = size, ArrayLayers = arrayLayers, MipLevels = mipLevels, Flags = flags, InitialLayout = VkImageLayout.Undefined, PNext = IntPtr.Zero, PQueueFamilyIndices = sharedPtr, SharingMode = sharing, Samples = samples, Usage = usage }; Handle = Device.Handle.CreateImage(&info, Instance.AllocationCallbacks); } } }
/// <summary> /// Starts building a new attachment for this render pass /// </summary> /// <param name="format">attachment's format</param> /// <param name="finalLayout">attachment's final image layout</param> /// <param name="samples">Sample count</param> /// <returns>attachment builder</returns> public AttachmentBuilder WithAttachment(VkFormat format, VkImageLayout finalLayout, VkSampleCountFlag samples = VkSampleCountFlag.Count1) { return(new AttachmentBuilder(this, format, finalLayout, samples)); }