예제 #1
0
 /// <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));
 }
예제 #2
0
        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);
        }
예제 #3
0
 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
     };
 }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
 /// <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));
 }