Пример #1
0
        public void BindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint firstSet, List <DescriptorSet> descriptorSets, List <uint> dynamicOffsets)
        {
            unsafe
            {
                int dynamicOffsetCount = 0;
                if (dynamicOffsets != null)
                {
                    dynamicOffsetCount = dynamicOffsets.Count;
                }

                var sets    = stackalloc VkDescriptorSet[descriptorSets.Count];
                var offsets = stackalloc uint[dynamicOffsetCount];

                for (int i = 0; i < descriptorSets.Count; i++)
                {
                    sets[i] = descriptorSets[i].Native;
                }

                for (int i = 0; i < dynamicOffsetCount; i++)
                {
                    offsets[i] = dynamicOffsets[i];
                }

                Device.Commands.cmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout.Native,
                                                      firstSet, (uint)descriptorSets.Count, (IntPtr)sets,
                                                      (uint)dynamicOffsetCount, (IntPtr)offsets);
            }
        }
Пример #2
0
 public Pipeline(Device dev, VkPipelineBindPoint type, PipelineLayout layout, VkPipeline pipeline)
 {
     PipelineType = type;
     Device       = dev;
     Layout       = layout;
     Handle       = pipeline;
 }
Пример #3
0
 public void BindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint firstSet, DescriptorSet descriptorSet)
 {
     unsafe {
         VkDescriptorSet set = descriptorSet.Native;
         Device.Commands.cmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout.Native, firstSet, 1, (IntPtr)(&set), 0, IntPtr.Zero);
     }
 }
Пример #4
0
        public static void vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
        {
            VkPreconditions.CheckNull(commandBuffer, nameof(commandBuffer));
            VkPreconditions.CheckNull(pipeline, nameof(pipeline));

            GetCommandBuffer(commandBuffer).CmdBindPipeline(pipelineBindPoint, pipeline);
        }
Пример #5
0
        public unsafe void BindDescriptorSets(
            Pipeline pipeline,
            List <DescriptorSet> descriptorSets,
            VkPipelineBindPoint bindPoint = VkPipelineBindPoint.Graphics
            )
        {
            var sets = new NativeList <VkDescriptorSet>();

            if (descriptorSets != null)
            {
                foreach (var set in descriptorSets)
                {
                    sets.Add(set.Handle);
                }
            }

            if (sets.Count > 0)
            {
                VulkanNative.vkCmdBindDescriptorSets(
                    _handle,
                    bindPoint,
                    pipeline.Layout,
                    0,
                    sets.Count,
                    (VkDescriptorSet *)sets.Data.ToPointer(),
                    0,
                    null
                    );
            }
        }
Пример #6
0
 public static void vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint firstSet, ReadOnlySpan <VkDescriptorSet> descriptorSets)
 {
     fixed(VkDescriptorSet *descriptorSetsPtr = descriptorSets)
     {
         vkCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, (uint)descriptorSets.Length, descriptorSetsPtr, 0, null);
     }
 }
Пример #7
0
        public void CmdBindPipeline(VkPipelineBindPoint pipelineBindPoint, IVkPipeline pipeline)
        {
            var _commandBuffer     = Handle;
            var _pipelineBindPoint = pipelineBindPoint;
            var _pipeline          = pipeline?.Handle ?? VkPipeline.HandleType.Null;

            Direct.CmdBindPipeline(_commandBuffer, _pipelineBindPoint, _pipeline);
        }
Пример #8
0
        public void CmdBindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, int firstSet, int descriptorSetCount, VkDescriptorSet[] pDescriptorSets, int dynamicOffsetCount, int[] pDynamicOffsets)
        {
            if (m_State != CommandBufferState.Recording)
            {
                return;
            }

            m_Commands.Add(new Cmd_BindDescriptorSets(pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets));
        }
Пример #9
0
        public void CmdBindPipeline(VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
        {
            if (m_State != CommandBufferState.Recording)
            {
                return;
            }

            m_Commands.Add(new Cmd_BindPipeline(pipelineBindPoint, pipeline));
        }
Пример #10
0
 public static extern void CmdBindDescriptorSets(
     VkCommandBuffer commandBuffer,
     VkPipelineBindPoint pipelineBindPoint,
     VkPipelineLayout layout,
     uint firstSet,
     uint descriptorSetCount,
     IntPtr pDescriptorSets,
     uint dynamicOffsetCount,
     IntPtr pDynamicOffsets
     );
Пример #11
0
 public Cmd_BindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, int firstSet, int descriptorSetCount, VkDescriptorSet[] pDescriptorSets, int dynamicOffsetCount, int[] pDynamicOffsets)
 {
     this.pipelineBindPoint  = pipelineBindPoint;
     this.layout             = layout;
     this.firstSet           = firstSet;
     this.descriptorSetCount = descriptorSetCount;
     this.pDescriptorSets    = pDescriptorSets;
     this.dynamicOffsetCount = dynamicOffsetCount;
     this.pDynamicOffsets    = pDynamicOffsets;
 }
Пример #12
0
 public RenderPassSubPass(
     VkPipelineBindPoint bindPoint,
     List <uint> colorAttachments,
     uint?depthAttachments = null
     )
 {
     BindPoint        = bindPoint;
     ColorAttachments = colorAttachments;
     DepthAttachments = depthAttachments;
 }
Пример #13
0
 public unsafe void BindPipeline(
     Pipeline pipeline,
     VkPipelineBindPoint bindPoint = VkPipelineBindPoint.Graphics
     )
 {
     VulkanNative.vkCmdBindPipeline(
         _handle,
         bindPoint,
         pipeline.Handle
         );
 }
Пример #14
0
 /// <summary>
 /// VkSubpassDescription - Structure specifying a subpass description
 /// </summary>
 /// <param name="pipelineBindPoint">pipelineBindPoint is a VkPipelineBindPoint value specifying
 /// the pipeline type supported for this subpass</param>
 /// <param name="flags">flags is a bitmask of VkSubpassDescriptionFlagBits
 /// specifying usage of the subpass</param>
 public VkSubpassDescription(VkPipelineBindPoint pipelineBindPoint,
                             VkSubpassDescriptionFlagBits flags = 0)
 {
     this.pipelineBindPoint       = pipelineBindPoint;
     this.inputAttachments        = new VkAttachmentReferenceGroup();
     this.colorAttachments        = null;// new VkAttachmentReferencesGroup();
     this.colorResolveAttachments = new VkColorResolveAttachmentGroup();
     this.pDepthStencilAttachment = null;
     this.preserveAttachments     = new UInt32Group();
     this.flags = flags;
 }
Пример #15
0
 public void CmdBindDescriptorSets(
     [FromProperty("this")] GenCommandBuffer commandBuffer,
     VkPipelineBindPoint pipelineBindPoint,
     GenPipelineLayout layout,
     int firstSet,
     [CountFor("descriptorSets")] int descriptorSetCount,
     [IsArray] GenDescriptorSet *pDescriptorSets,
     [CountFor("dynamicOffsets")] int dynamicOffsetCount,
     [IsArray] int *pDynamicOffsets)
 {
 }
Пример #16
0
        private void FlushNewResourceSets(
            VkResourceSet[] resourceSets,
            bool[] resourceSetsChanged,
            VkPipelineBindPoint bindPoint,
            VkPipelineLayout pipelineLayout)
        {
            int setCount = resourceSets.Length;
            VkDescriptorSet *descriptorSets       = stackalloc VkDescriptorSet[setCount];
            uint             currentBatchCount    = 0;
            uint             currentBatchFirstSet = 0;

            for (uint currentSlot = 0; currentSlot < resourceSets.Length; currentSlot++)
            {
                bool batchEnded = !resourceSetsChanged[currentSlot] || currentSlot == resourceSets.Length - 1;

                if (resourceSetsChanged[currentSlot])
                {
                    resourceSetsChanged[currentSlot]  = false;
                    descriptorSets[currentBatchCount] = resourceSets[currentSlot].DescriptorSet;
                    currentBatchCount += 1;
                }

                if (batchEnded)
                {
                    if (currentBatchCount != 0)
                    {
                        // Flush current batch.
                        vkCmdBindDescriptorSets(
                            _cb,
                            bindPoint,
                            pipelineLayout,
                            currentBatchFirstSet,
                            currentBatchCount,
                            descriptorSets,
                            0,
                            null);
                    }

                    currentBatchCount    = 0;
                    currentBatchFirstSet = currentSlot + 1;
                }
            }
        }
Пример #17
0
        public void BindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint firstSet, DescriptorSet descriptorSet, List <uint> dynamicOffsets)
        {
            unsafe
            {
                int dynamicOffsetCount = 0;
                if (dynamicOffsets != null)
                {
                    dynamicOffsetCount = dynamicOffsets.Count;
                }

                var offsets = stackalloc uint[dynamicOffsetCount];

                VkDescriptorSet setNative = descriptorSet.Native;
                Interop.Copy(dynamicOffsets, (IntPtr)offsets);

                Device.Commands.cmdBindDescriptorSets(commandBuffer, VkPipelineBindPoint.Graphics, layout.Native,
                                                      firstSet, 1, (IntPtr)(&setNative),
                                                      (uint)dynamicOffsetCount, (IntPtr)offsets);
            }
        }
Пример #18
0
        public void CmdBindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, IVkPipelineLayout layout, int firstSet, IReadOnlyList <IVkDescriptorSet> descriptorSets, IReadOnlyList <int> dynamicOffsets)
        {
            var unmanagedSize =
                descriptorSets.SizeOfMarshalDirect() +
                dynamicOffsets.SizeOfMarshalDirect();
            var unmanagedArray = new byte[unmanagedSize];

            fixed(byte *unmanagedStart = unmanagedArray)
            {
                var unmanaged           = unmanagedStart;
                var _commandBuffer      = Handle;
                var _pipelineBindPoint  = pipelineBindPoint;
                var _layout             = layout?.Handle ?? VkPipelineLayout.HandleType.Null;
                var _firstSet           = firstSet;
                var _descriptorSetCount = descriptorSets?.Count ?? 0;
                var _pDescriptorSets    = descriptorSets.MarshalDirect(ref unmanaged);
                var _dynamicOffsetCount = dynamicOffsets?.Count ?? 0;
                var _pDynamicOffsets    = dynamicOffsets.MarshalDirect(ref unmanaged);

                Direct.CmdBindDescriptorSets(_commandBuffer, _pipelineBindPoint, _layout, _firstSet, _descriptorSetCount, _pDescriptorSets, _dynamicOffsetCount, _pDynamicOffsets);
            }
        }
Пример #19
0
        public void BindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint firstSet, DescriptorSet[] descriptorSets, uint[] dynamicOffsets)
        {
            unsafe
            {
                var sets = stackalloc VkDescriptorSet[descriptorSets.Length];

                for (int i = 0; i < descriptorSets.Length; i++)
                {
                    sets[i] = descriptorSets[i].Native;
                }

                int dynamicOffsetCount = 0;
                if (dynamicOffsets != null)
                {
                    dynamicOffsetCount = dynamicOffsets.Length;

                    fixed(uint *ptr = dynamicOffsets)
                    {
                        Device.Commands.cmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout.Native,
                                                              firstSet, (uint)descriptorSets.Length, (IntPtr)sets,
                                                              (uint)dynamicOffsetCount, (IntPtr)ptr);
                    }
            }
        }
Пример #20
0
 internal extern static void vkCmdBindPipeline(IntPtr commandBuffer, VkPipelineBindPoint pipelineBindPoint, UInt64 pipeline);
Пример #21
0
        public static void vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, int firstSet, int descriptorSetCount, VkDescriptorSet[] pDescriptorSets, int dynamicOffsetCount, int[] pDynamicOffsets)
        {
            VkPreconditions.CheckNull(commandBuffer, nameof(commandBuffer));

            GetCommandBuffer(commandBuffer).CmdBindDescriptorSets(pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
        }
Пример #22
0
 public void CmdBindPipeline(
     [FromProperty("this")] GenCommandBuffer commandBuffer,
     VkPipelineBindPoint pipelineBindPoint,
     GenPipeline pipeline)
 { }
Пример #23
0
        private void FlushNewResourceSets(
            int newResourceSetsCount,
            VkResourceSet[] resourceSets,
            bool[] resourceSetsChanged,
            VkPipelineBindPoint bindPoint,
            VkPipelineLayout pipelineLayout)
        {
            if (newResourceSetsCount > 0)
            {
                int              totalChanged         = 0;
                uint             currentSlot          = 0;
                uint             currentBatchIndex    = 0;
                uint             currentBatchFirstSet = 0;
                VkDescriptorSet *descriptorSets       = stackalloc VkDescriptorSet[newResourceSetsCount];
                while (totalChanged < newResourceSetsCount)
                {
                    if (resourceSetsChanged[currentSlot])
                    {
                        resourceSetsChanged[currentSlot]  = false;
                        descriptorSets[currentBatchIndex] = resourceSets[currentSlot].DescriptorSet;
                        totalChanged      += 1;
                        currentBatchIndex += 1;
                        currentSlot       += 1;
                    }
                    else
                    {
                        if (currentBatchIndex != 0)
                        {
                            // Flush current batch.
                            vkCmdBindDescriptorSets(
                                _cb,
                                bindPoint,
                                pipelineLayout,
                                currentBatchFirstSet,
                                currentBatchIndex,
                                descriptorSets,
                                0,
                                null);
                            currentBatchIndex = 0;
                        }

                        currentSlot         += 1;
                        currentBatchFirstSet = currentSlot;
                    }
                }

                if (currentBatchIndex != 0)
                {
                    // Flush current batch.
                    vkCmdBindDescriptorSets(
                        _cb,
                        bindPoint,
                        pipelineLayout,
                        currentBatchFirstSet,
                        currentBatchIndex,
                        descriptorSets,
                        0,
                        null);
                }
            }
        }
Пример #24
0
 public unsafe void CmdBindPipeline(VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
 {
     _Parent.Device.vkCmdBindPipeline(_Handle, pipelineBindPoint, pipeline._Handle);
 }
Пример #25
0
 public void CmdBindDescriptorSets(
     [FromProperty("this")] GenCommandBuffer commandBuffer,
     VkPipelineBindPoint pipelineBindPoint,
     GenPipelineLayout layout,
     int firstSet,
     [CountFor("descriptorSets")] int descriptorSetCount,
     [IsArray] GenDescriptorSet* pDescriptorSets,
     [CountFor("dynamicOffsets")] int dynamicOffsetCount,
     [IsArray] int* pDynamicOffsets)
 { }
Пример #26
0
 public void CmdBindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, IVkPipelineLayout layout, int firstSet, IReadOnlyList<IVkDescriptorSet> descriptorSets, IReadOnlyList<int> dynamicOffsets)
 {
     var unmanagedSize =
         descriptorSets.SizeOfMarshalDirect() +
         dynamicOffsets.SizeOfMarshalDirect();
     var unmanagedArray = new byte[unmanagedSize];
     fixed (byte* unmanagedStart = unmanagedArray)
     {
         var unmanaged = unmanagedStart;
         var _commandBuffer = Handle;
         var _pipelineBindPoint = pipelineBindPoint;
         var _layout = layout?.Handle ?? VkPipelineLayout.HandleType.Null;
         var _firstSet = firstSet;
         var _descriptorSetCount = descriptorSets?.Count ?? 0;
         var _pDescriptorSets = descriptorSets.MarshalDirect(ref unmanaged);
         var _dynamicOffsetCount = dynamicOffsets?.Count ?? 0;
         var _pDynamicOffsets = dynamicOffsets.MarshalDirect(ref unmanaged);
         Direct.CmdBindDescriptorSets(_commandBuffer, _pipelineBindPoint, _layout, _firstSet, _descriptorSetCount, _pDescriptorSets, _dynamicOffsetCount, _pDynamicOffsets);
     }
 }
Пример #27
0
 public void BindPipeline(VkPipelineBindPoint bindPoint, Pipeline pipeline)
 {
     Device.Commands.cmdBindPipeline(commandBuffer, bindPoint, pipeline.Native);
 }
Пример #28
0
 public void BindDescriptorSets(VkPipelineBindPoint bindPoint, PipelineLayout pipelineLayout, uint firstSet, params DescriptorSet[] descriptorSets)
 {
     vkCmdBindDescriptorSets(handle, bindPoint, pipelineLayout.handle, firstSet, (uint)descriptorSets.Length, descriptorSets.Pin(), 0, IntPtr.Zero);
     descriptorSets.Unpin();
 }
Пример #29
0
 public void BindDescriptorSets(VkPipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint firstSet, List <DescriptorSet> descriptorSets)
 {
     BindDescriptorSets(pipelineBindPoint, layout, firstSet, descriptorSets, null);
 }
Пример #30
0
 public void CmdBindPipeline(
     [FromProperty("this")] GenCommandBuffer commandBuffer,
     VkPipelineBindPoint pipelineBindPoint,
     GenPipeline pipeline)
 {
 }
Пример #31
0
 internal extern static void vkCmdBindDescriptorSets(IntPtr commandBuffer, VkPipelineBindPoint pipelineBindPoint, UInt64 layout, UInt32 firstSet, UInt32 descriptorSetCount, [In] UInt64[] pDescriptorSets, UInt32 dynamicOffsetCount, [In] UInt32[] pDynamicOffsets);
Пример #32
0
 public static extern void CmdBindPipeline(
     VkCommandBuffer commandBuffer,
     VkPipelineBindPoint pipelineBindPoint,
     VkPipeline pipeline
     );
Пример #33
0
 public void CmdBindPipeline(VkPipelineBindPoint pipelineBindPoint, IVkPipeline pipeline)
 {
     var _commandBuffer = Handle;
     var _pipelineBindPoint = pipelineBindPoint;
     var _pipeline = pipeline?.Handle ?? VkPipeline.HandleType.Null;
     Direct.CmdBindPipeline(_commandBuffer, _pipelineBindPoint, _pipeline);
 }
Пример #34
0
 public static void vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint firstSet, VkDescriptorSet descriptorSet)
 {
     vkCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, 1, &descriptorSet, 0, null);
 }