public unsafe void CmdBeginRenderPass(ref VkRenderPassBeginInfo renderPassBegin, VkSubpassContents contents)
        {
            VkRenderPassBeginInfo_Native renderPassBegin_native = new VkRenderPassBeginInfo_Native();

            renderPassBegin_native.pNext = new IntPtr(0);
            renderPassBegin_native.sType = VkStructureType.VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
            if (renderPassBegin.clearValues == null || renderPassBegin.clearValues.Length == 0)
            {
                renderPassBegin_native.clearValueCount = 0;
            }
            else
            {
                renderPassBegin_native.clearValueCount = (uint)renderPassBegin.clearValues.Length;
                renderPassBegin_native.pClearValues    = System.Runtime.InteropServices.Marshal.AllocHGlobal(new IntPtr(sizeof(UInt32) * 4 * renderPassBegin_native.clearValueCount));
            }
            renderPassBegin_native.framebufferHandle = renderPassBegin.framebuffer._Handle;
            renderPassBegin_native.renderArea        = renderPassBegin.renderArea;
            renderPassBegin_native.renderPassHandle  = renderPassBegin.renderPass._Handle;

            for (int n = 0; n < renderPassBegin_native.clearValueCount; n++)
            {
                if (renderPassBegin.clearValues[n] is VkClearValue.VkClearColorValue.Float)
                {
                    VkClearValue.VkClearColorValue.Float value = renderPassBegin.clearValues[n] as VkClearValue.VkClearColorValue.Float;
                    float *pValue = ((float *)(renderPassBegin_native.pClearValues.ToPointer()) + (n * 4));
                    pValue[0] = value.float32[0];
                    pValue[1] = value.float32[1];
                    pValue[2] = value.float32[2];
                    pValue[3] = value.float32[3];
                }
                else if (renderPassBegin.clearValues[n] is VkClearValue.VkClearColorValue.Int32_t)
                {
                    VkClearValue.VkClearColorValue.Int32_t value = renderPassBegin.clearValues[n] as VkClearValue.VkClearColorValue.Int32_t;
                    Int32 *pValue = ((Int32 *)(renderPassBegin_native.pClearValues.ToPointer()) + (n * 4));
                    pValue[0] = value.int32[0];
                    pValue[1] = value.int32[1];
                    pValue[2] = value.int32[2];
                    pValue[3] = value.int32[3];
                }
                else if (renderPassBegin.clearValues[n] is VkClearValue.VkClearColorValue.UInt32_t)
                {
                    VkClearValue.VkClearColorValue.UInt32_t value = renderPassBegin.clearValues[n] as VkClearValue.VkClearColorValue.UInt32_t;
                    UInt32 *pValue = ((UInt32 *)(renderPassBegin_native.pClearValues.ToPointer()) + (n * 4));
                    pValue[0] = value.uint32[0];
                    pValue[1] = value.uint32[1];
                    pValue[2] = value.uint32[2];
                    pValue[3] = value.uint32[3];
                }
                else if (renderPassBegin.clearValues[n] is VkClearValue.VkClearDepthStencilValue.VkClearDepthStencilValue)
                {
                    VkClearValue.VkClearDepthStencilValue.VkClearDepthStencilValue value = renderPassBegin.clearValues[n] as VkClearValue.VkClearDepthStencilValue.VkClearDepthStencilValue;
                    *((float *)(renderPassBegin_native.pClearValues.ToPointer()) + (n * 4))      = value.depth;
                    *((UInt32 *)(renderPassBegin_native.pClearValues.ToPointer()) + (n * 4 + 1)) = value.stencil;
                }
            }

            _Parent.Device.vkCmdBeginRenderPass(_Handle, new IntPtr(&renderPassBegin_native), contents);

            System.Runtime.InteropServices.Marshal.FreeHGlobal(renderPassBegin_native.pClearValues);
        }
 public void CmdClearColorImage(VkImage Image, VkImageLayout ImageLayout, int R, int G, int B, int A, VkImageSubresourceRange[] Ranges)
 {
     VkClearValue.VkClearColorValue.Int32_t color = new VkClearValue.VkClearColorValue.Int32_t();
     color.int32    = new int[4];
     color.int32[0] = R;
     color.int32[1] = G;
     color.int32[2] = B;
     color.int32[3] = A;
     CmdClearColorImage(Image, ImageLayout, ref color, Ranges);
 }
        public unsafe void CmdClearColorImage(VkImage Image, VkImageLayout ImageLayout, ref VkClearValue.VkClearColorValue.Int32_t color, VkImageSubresourceRange[] Ranges)
        {
            VkClearValue.VkClearColorValue.Int32_t_s color_native = new VkClearValue.VkClearColorValue.Int32_t_s();
            color_native.int32 = color.int32;

            if (Ranges == null || Ranges.Length == 0)
            {
                throw new Exception("There must be at least one range");
            }

            fixed(VkImageSubresourceRange *pRange = &Ranges[0])
            {
                _Parent.Device.vkCmdClearColorImage_Int32(_Handle, Image._Handle, ImageLayout, ref color_native, (uint)Ranges.Length, new IntPtr(pRange));
            }
        }