public void SetDescriptors(PipelineLayout layout, DescriptorSet set, DescriptorBindPoint bindPoint, uint set_binding) { if (locked) { unsafe { if (set != null && set.hndl != IntPtr.Zero) { var dyn_cnt = set.Layout.Layouts.Count(a => a.Type == DescriptorType.UniformBufferDynamic); var ptrs = stackalloc IntPtr[] { set.hndl }; var dyn_off = stackalloc uint[dyn_cnt]; //NOTE Added for the 0th binding global uniform buffer for (int i = 0; i < dyn_cnt; i++) { dyn_off[i] = 0; } vkCmdBindDescriptorSets(hndl, (VkPipelineBindPoint)bindPoint, layout.hndl, set_binding, 1, ptrs, (uint)dyn_cnt, dyn_off); IsEmpty = false; } } } else { throw new Exception("Command buffer not built."); } }
public void PushConstants(PipelineLayout layout, ShaderType stage, IntPtr constants, uint constantLen) { if (locked) { if (layout != null) { vkCmdPushConstants(hndl, layout.hndl, (VkShaderStageFlags)stage, 0, constantLen, constants); IsEmpty = false; } } else { throw new Exception("Command buffer not built."); } }