示例#1
0
        public VkSparseImageOpaqueMemoryBindInfo(VkImage image, ReadOnlySpan <VkSparseMemoryBind> binds)
        {
            this.image     = image;
            this.bindCount = (uint)binds.Length;

            fixed(VkSparseMemoryBind *pBinds = binds)
            this.pBinds = pBinds;
        }
示例#2
0
        public static ReadOnlySpan <VkImage> vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain)
        {
            uint swapchainImageCount = 0;

            vkGetSwapchainImagesKHR(device, swapchain, &swapchainImageCount, null).CheckResult();

            ReadOnlySpan <VkImage> swapchainImages = new VkImage[swapchainImageCount];

            fixed(VkImage *swapchainImagesPtr = swapchainImages)
            {
                vkGetSwapchainImagesKHR(device, swapchain, &swapchainImageCount, swapchainImagesPtr).CheckResult();
            }

            return(swapchainImages);
        }
示例#3
0
        public static Span <T> vkMapMemory <T>(VkDevice device, VkImage image, VkDeviceMemory memory, ulong offset = 0, ulong size = WholeSize, VkMemoryMapFlags flags = VkMemoryMapFlags.None) where T : unmanaged
        {
            void *pData;

            vkMapMemory(device, memory, offset, size, flags, &pData).CheckResult();


            if (size == WholeSize)
            {
                vkGetImageMemoryRequirements(device, image, out var memoryRequirements);
                return(new Span <T>(pData, (int)memoryRequirements.size));
            }

            return(new Span <T>(pData, (int)size));
        }
示例#4
0
        public static ReadOnlySpan <VkSparseImageMemoryRequirements> vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image)
        {
            uint sparseMemoryRequirementCount = 0;

            vkGetImageSparseMemoryRequirements(device, image, &sparseMemoryRequirementCount, null);

            ReadOnlySpan <VkSparseImageMemoryRequirements> sparseMemoryRequirements = new VkSparseImageMemoryRequirements[sparseMemoryRequirementCount];

            fixed(VkSparseImageMemoryRequirements *sparseMemoryRequirementsPtr = sparseMemoryRequirements)
            {
                vkGetImageSparseMemoryRequirements(device, image, &sparseMemoryRequirementCount, sparseMemoryRequirementsPtr);
            }

            return(sparseMemoryRequirements);
        }
示例#5
0
 public VkSparseImageOpaqueMemoryBindInfo(VkImage image, ref VkSparseMemoryBind binds)
 {
     this.image     = image;
     this.bindCount = 1;
     this.pBinds    = (VkSparseMemoryBind *)Unsafe.AsPointer(ref binds);
 }
示例#6
0
 public static void BindImageMemory(VkImage image, VkDeviceMemory memory, ulong offset)
 {
     VulkanUtil.CheckResult(vkBindImageMemory(device, image, memory, offset));
 }