예제 #1
0
        /// <summary>
        /// Allocates a new command buffer and automatically start it.
        /// </summary>
        /// <returns>New command buffer in the recording state.</returns>
        /// <param name="usage">Usage.</param>
        public PrimaryCommandBuffer AllocateAndStart(VkCommandBufferUsageFlags usage = 0)
        {
            PrimaryCommandBuffer cmd = AllocateCommandBuffer();

            cmd.Start(usage);
            return(cmd);
        }
예제 #2
0
        public CommandBuffer AllocateAndStart(VkCommandBufferUsageFlags usage = 0, VkCommandBufferLevel level = VkCommandBufferLevel.Primary)
        {
            CommandBuffer cmd = AllocateCommandBuffer(level);

            cmd.Start(usage);
            return(cmd);
        }
예제 #3
0
        public unsafe void Begin(
            VkCommandBufferUsageFlags commandBufferUsageFlag,
            RenderPass renderPass,
            Framebuffer framebuffer,
            uint subpass = 0
            )
        {
            if (_level != VkCommandBufferLevel.Secondary)
            {
                throw new Exception("you can only use this method for secondary command buffers");
            }

            var inheritanceInfo = new VkCommandBufferInheritanceInfo
            {
                sType       = VkStructureType.CommandBufferInheritanceInfo,
                renderPass  = renderPass.Handle,
                framebuffer = framebuffer.Handle
            };

            var beginInfo = new VkCommandBufferBeginInfo
            {
                sType            = VkStructureType.CommandBufferBeginInfo,
                flags            = commandBufferUsageFlag,
                pInheritanceInfo = &inheritanceInfo
            };

            if (VulkanNative.vkBeginCommandBuffer(
                    _handle,
                    &beginInfo
                    ) != VkResult.Success)
            {
                throw new Exception("failed to begin command buffer");
            }
        }
예제 #4
0
        public static VkResult vkBeginCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferUsageFlags flags)
        {
            VkCommandBufferBeginInfo beginInfo = new VkCommandBufferBeginInfo
            {
                sType = VkStructureType.CommandBufferBeginInfo,
                flags = VkCommandBufferUsageFlags.OneTimeSubmit
            };

            return(vkBeginCommandBuffer(commandBuffer, &beginInfo));
        }
예제 #5
0
        public void Begin(VkCommandBufferUsageFlags flags = VkCommandBufferUsageFlags.None)
        {
            var cmdBufInfo = new VkCommandBufferBeginInfo();

            cmdBufInfo.sType = VkStructureType.CommandBufferBeginInfo;
            cmdBufInfo.flags = flags;
            VulkanUtil.CheckResult(vkBeginCommandBuffer(commandBuffer, &cmdBufInfo));
            opened = true;
            ClearDescriptorSets();
        }
예제 #6
0
 public void Begin(VkCommandBufferUsageFlags flags, ref CommandBufferInheritanceInfo commandBufferInheritanceInfo)
 {
     unsafe
     {
         var cmdBufBeginInfo = new VkCommandBufferBeginInfo
         {
             sType            = VkStructureType.CommandBufferBeginInfo,
             flags            = flags,
             pInheritanceInfo = (VkCommandBufferInheritanceInfo *)Unsafe.AsPointer(ref commandBufferInheritanceInfo.native)
         };
         VulkanUtil.CheckResult(vkBeginCommandBuffer(commandBuffer, &cmdBufBeginInfo));
     }
     opened = true;
     ClearDescriptorSets();
 }
예제 #7
0
        public void Start(VkCommandBufferUsageFlags usage = 0, RenderPass rp = null, uint subpass = 0, FrameBuffer fb = null,
                          bool occlusionQueryEnable       = false, VkQueryControlFlags queryFlags = 0, VkQueryPipelineStatisticFlags statFlags = 0)
        {
            VkCommandBufferInheritanceInfo inheri = VkCommandBufferInheritanceInfo.New();

            inheri.renderPass           = rp == null ? 0 : rp.handle;
            inheri.subpass              = subpass;
            inheri.framebuffer          = fb == null ? 0 : fb.handle;
            inheri.occlusionQueryEnable = occlusionQueryEnable;
            inheri.queryFlags           = queryFlags;
            inheri.pipelineStatistics   = statFlags;
            VkCommandBufferBeginInfo cmdBufInfo = new VkCommandBufferBeginInfo(usage);

            cmdBufInfo.pInheritanceInfo = inheri.Pin();
            Utils.CheckResult(vkBeginCommandBuffer(handle, ref cmdBufInfo));
            inheri.Unpin();
        }
예제 #8
0
        public unsafe void Begin(VkCommandBufferUsageFlags commandBufferUsageFlag)
        {
            if (_level != VkCommandBufferLevel.Primary)
            {
                throw new Exception("you can only use this method for primary command buffers");
            }

            var beginInfo = new VkCommandBufferBeginInfo
            {
                sType = VkStructureType.CommandBufferBeginInfo,
                flags = commandBufferUsageFlag
            };

            if (VulkanNative.vkBeginCommandBuffer(
                    _handle,
                    &beginInfo
                    ) != VkResult.Success)
            {
                throw new Exception("failed to begin command buffer");
            }
        }
예제 #9
0
        /// <summary>
        /// Put the command buffer in the recording state.
        /// </summary>
        /// <param name="usage">optional command buffer usage flags.</param>
        public void Start(VkCommandBufferUsageFlags usage = 0)
        {
            VkCommandBufferBeginInfo cmdBufInfo = new VkCommandBufferBeginInfo(usage);

            Utils.CheckResult(vkBeginCommandBuffer(handle, ref cmdBufInfo));
        }
예제 #10
0
 public VkCommandBufferBeginInfo(VkCommandBufferUsageFlags usage = (VkCommandBufferUsageFlags)0)
 {
     this._sType = (int)VkStructureType.CommandBufferBeginInfo;
     pNext       = _pInheritanceInfo = IntPtr.Zero;
     _flags      = (uint)usage;
 }
예제 #11
0
파일: Structs.cs 프로젝트: arakis/vk.net
 public VkCommandBufferBeginInfo(VkCommandBufferUsageFlags usage = (VkCommandBufferUsageFlags)0)
 {
     sType = VkStructureType.CommandBufferBeginInfo;
     pNext = pInheritanceInfo = IntPtr.Zero;
     flags = usage;
 }