use core::ptr;
use libc::c_void;
use vk;
pub const VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION: u32 = 3;
pub const VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME: &'static [u8; 33] = b"VK_NVX_device_generated_commands\x00";
pub const VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME_STR: &'static str = "VK_NVX_device_generated_commands";
define_non_dispatchable_handle!(
struct VkObjectTableNVX;
);
define_non_dispatchable_handle!(
struct VkIndirectCommandsLayoutNVX;
);
cenum!(VkIndirectCommandsTokenTypeNVX: u32 {
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX = 0,
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX = 1,
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX = 2,
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX = 3,
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX = 4,
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX = 5,
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX = 6,
const VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX = 7,
});
cenum!(VkObjectEntryTypeNVX: u32 {
const VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX = 0,
const VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX = 1,
const VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX = 2,
const VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX = 3,
const VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX = 4,
});
vks_bitflags! {
pub struct VkIndirectCommandsLayoutUsageFlagsNVX: u32 {
const VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7fffffff;
const VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = 0x00000001;
const VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = 0x00000002;
const VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = 0x00000004;
const VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = 0x00000008;
}
}
pub type VkIndirectCommandsLayoutUsageFlagBitsNVX = VkIndirectCommandsLayoutUsageFlagsNVX;
vks_bitflags! {
pub struct VkObjectEntryUsageFlagsNVX: u32 {
const VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7fffffff;
const VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = 0x00000001;
const VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = 0x00000002;
}
}
pub type VkObjectEntryUsageFlagBitsNVX = VkObjectEntryUsageFlagsNVX;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkDeviceGeneratedCommandsFeaturesNVX {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub computeBindingPointSupport: vk::VkBool32,
}
impl Default for VkDeviceGeneratedCommandsFeaturesNVX {
fn default() -> Self {
VkDeviceGeneratedCommandsFeaturesNVX {
sType: vk::VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX,
pNext: ptr::null(),
computeBindingPointSupport: Default::default(),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkDeviceGeneratedCommandsLimitsNVX {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub maxIndirectCommandsLayoutTokenCount: u32,
pub maxObjectEntryCounts: u32,
pub minSequenceCountBufferOffsetAlignment: u32,
pub minSequenceIndexBufferOffsetAlignment: u32,
pub minCommandsTokenBufferOffsetAlignment: u32,
}
impl Default for VkDeviceGeneratedCommandsLimitsNVX {
fn default() -> Self {
VkDeviceGeneratedCommandsLimitsNVX {
sType: vk::VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX,
pNext: ptr::null(),
maxIndirectCommandsLayoutTokenCount: Default::default(),
maxObjectEntryCounts: Default::default(),
minSequenceCountBufferOffsetAlignment: Default::default(),
minSequenceIndexBufferOffsetAlignment: Default::default(),
minCommandsTokenBufferOffsetAlignment: Default::default(),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkIndirectCommandsTokenNVX {
pub tokenType: VkIndirectCommandsTokenTypeNVX,
pub buffer: vk::VkBuffer,
pub offset: vk::VkDeviceSize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkIndirectCommandsLayoutTokenNVX {
pub tokenType: VkIndirectCommandsTokenTypeNVX,
pub bindingUnit: u32,
pub dynamicCount: u32,
pub divisor: u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkIndirectCommandsLayoutCreateInfoNVX {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub pipelineBindPoint: vk::VkPipelineBindPoint,
pub flags: VkIndirectCommandsLayoutUsageFlagsNVX,
pub tokenCount: u32,
pub pTokens: *const VkIndirectCommandsLayoutTokenNVX,
}
impl Default for VkIndirectCommandsLayoutCreateInfoNVX {
fn default() -> Self {
VkIndirectCommandsLayoutCreateInfoNVX {
sType: vk::VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX,
pNext: ptr::null(),
pipelineBindPoint: Default::default(),
flags: Default::default(),
tokenCount: Default::default(),
pTokens: ptr::null(),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkCmdProcessCommandsInfoNVX {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub objectTable: VkObjectTableNVX,
pub indirectCommandsLayout: VkIndirectCommandsLayoutNVX,
pub indirectCommandsTokenCount: u32,
pub pIndirectCommandsTokens: *const VkIndirectCommandsTokenNVX,
pub maxSequencesCount: u32,
pub targetCommandBuffer: vk::VkCommandBuffer,
pub sequencesCountBuffer: vk::VkBuffer,
pub sequencesCountOffset: vk::VkDeviceSize,
pub sequencesIndexBuffer: vk::VkBuffer,
pub sequencesIndexOffset: vk::VkDeviceSize,
}
impl Default for VkCmdProcessCommandsInfoNVX {
fn default() -> Self {
VkCmdProcessCommandsInfoNVX {
sType: vk::VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX,
pNext: ptr::null(),
objectTable: Default::default(),
indirectCommandsLayout: Default::default(),
indirectCommandsTokenCount: Default::default(),
pIndirectCommandsTokens: ptr::null(),
maxSequencesCount: Default::default(),
targetCommandBuffer: ptr::null_mut(),
sequencesCountBuffer: Default::default(),
sequencesCountOffset: Default::default(),
sequencesIndexBuffer: Default::default(),
sequencesIndexOffset: Default::default(),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkCmdReserveSpaceForCommandsInfoNVX {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub objectTable: VkObjectTableNVX,
pub indirectCommandsLayout: VkIndirectCommandsLayoutNVX,
pub maxSequencesCount: u32,
}
impl Default for VkCmdReserveSpaceForCommandsInfoNVX {
fn default() -> Self {
VkCmdReserveSpaceForCommandsInfoNVX {
sType: vk::VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX,
pNext: ptr::null(),
objectTable: Default::default(),
indirectCommandsLayout: Default::default(),
maxSequencesCount: Default::default(),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VkObjectTableCreateInfoNVX {
pub sType: vk::VkStructureType,
pub pNext: *const c_void,
pub objectCount: u32,
pub pObjectEntryTypes: *const VkObjectEntryTypeNVX,
pub pObjectEntryCounts: *const u32,
pub pObjectEntryUsageFlags: *const VkObjectEntryUsageFlagsNVX,
pub maxUniformBuffersPerDescriptor: u32,
pub maxStorageBuffersPerDescriptor: u32,
pub maxStorageImagesPerDescriptor: u32,
pub maxSampledImagesPerDescriptor: u32,
pub maxPipelineLayouts: u32,
}
impl Default for VkObjectTableCreateInfoNVX {
fn default() -> Self {
VkObjectTableCreateInfoNVX {
sType: vk::VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX,
pNext: ptr::null(),
objectCount: Default::default(),
pObjectEntryTypes: ptr::null(),
pObjectEntryCounts: ptr::null(),
pObjectEntryUsageFlags: ptr::null(),
maxUniformBuffersPerDescriptor: Default::default(),
maxStorageBuffersPerDescriptor: Default::default(),
maxStorageImagesPerDescriptor: Default::default(),
maxSampledImagesPerDescriptor: Default::default(),
maxPipelineLayouts: Default::default(),
}
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkObjectTableEntryNVX {
pub type_: VkObjectEntryTypeNVX,
pub flags: VkObjectEntryUsageFlagsNVX,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkObjectTablePipelineEntryNVX {
pub type_: VkObjectEntryTypeNVX,
pub flags: VkObjectEntryUsageFlagsNVX,
pub pipeline: vk::VkPipeline,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkObjectTableDescriptorSetEntryNVX {
pub type_: VkObjectEntryTypeNVX,
pub flags: VkObjectEntryUsageFlagsNVX,
pub pipelineLayout: vk::VkPipelineLayout,
pub descriptorSet: vk::VkDescriptorSet,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkObjectTableVertexBufferEntryNVX {
pub type_: VkObjectEntryTypeNVX,
pub flags: VkObjectEntryUsageFlagsNVX,
pub buffer: vk::VkBuffer,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkObjectTableIndexBufferEntryNVX {
pub type_: VkObjectEntryTypeNVX,
pub flags: VkObjectEntryUsageFlagsNVX,
pub buffer: vk::VkBuffer,
pub indexType: vk::VkIndexType,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct VkObjectTablePushConstantEntryNVX {
pub type_: VkObjectEntryTypeNVX,
pub flags: VkObjectEntryUsageFlagsNVX,
pub pipelineLayout: vk::VkPipelineLayout,
pub stageFlags: vk::VkShaderStageFlags,
}
pub type PFN_vkCmdProcessCommandsNVX = Option<unsafe extern "system" fn(commandBuffer: vk::VkCommandBuffer, pProcessCommandsInfo: *const VkCmdProcessCommandsInfoNVX)>;
pub type PFN_vkCmdReserveSpaceForCommandsNVX = Option<unsafe extern "system" fn(commandBuffer: vk::VkCommandBuffer, pReserveSpaceInfo: *const VkCmdReserveSpaceForCommandsInfoNVX)>;
pub type PFN_vkCreateIndirectCommandsLayoutNVX = Option<unsafe extern "system" fn(device: vk::VkDevice, pCreateInfo: *const VkIndirectCommandsLayoutCreateInfoNVX, pAllocator: *const vk::VkAllocationCallbacks, pIndirectCommandsLayout: *mut VkIndirectCommandsLayoutNVX) -> vk::VkResult>;
pub type PFN_vkDestroyIndirectCommandsLayoutNVX = Option<unsafe extern "system" fn(device: vk::VkDevice, indirectCommandsLayout: VkIndirectCommandsLayoutNVX, pAllocator: *const vk::VkAllocationCallbacks)>;
pub type PFN_vkCreateObjectTableNVX = Option<unsafe extern "system" fn(device: vk::VkDevice, pCreateInfo: *const VkObjectTableCreateInfoNVX, pAllocator: *const vk::VkAllocationCallbacks, pObjectTable: *mut VkObjectTableNVX) -> vk::VkResult>;
pub type PFN_vkDestroyObjectTableNVX = Option<unsafe extern "system" fn(device: vk::VkDevice, objectTable: VkObjectTableNVX, pAllocator: *const vk::VkAllocationCallbacks)>;
pub type PFN_vkRegisterObjectsNVX = Option<unsafe extern "system" fn(device: vk::VkDevice, objectTable: VkObjectTableNVX, objectCount: u32, ppObjectTableEntries: *const *const VkObjectTableEntryNVX, pObjectIndices: *const u32) -> vk::VkResult>;
pub type PFN_vkUnregisterObjectsNVX = Option<unsafe extern "system" fn(device: vk::VkDevice, objectTable: VkObjectTableNVX, objectCount: u32, pObjectEntryTypes: *const VkObjectEntryTypeNVX, pObjectIndices: *const u32) -> vk::VkResult>;
pub type PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX = Option<unsafe extern "system" fn(physicalDevice: vk::VkPhysicalDevice, pFeatures: *mut VkDeviceGeneratedCommandsFeaturesNVX, pLimits: *mut VkDeviceGeneratedCommandsLimitsNVX)>;
#[cfg(feature = "function_prototypes")]
extern "system" {
pub fn vkCmdProcessCommandsNVX(commandBuffer: vk::VkCommandBuffer, pProcessCommandsInfo: *const VkCmdProcessCommandsInfoNVX);
pub fn vkCmdReserveSpaceForCommandsNVX(commandBuffer: vk::VkCommandBuffer, pReserveSpaceInfo: *const VkCmdReserveSpaceForCommandsInfoNVX);
pub fn vkCreateIndirectCommandsLayoutNVX(device: vk::VkDevice, pCreateInfo: *const VkIndirectCommandsLayoutCreateInfoNVX, pAllocator: *const vk::VkAllocationCallbacks, pIndirectCommandsLayout: *mut VkIndirectCommandsLayoutNVX) -> vk::VkResult;
pub fn vkDestroyIndirectCommandsLayoutNVX(device: vk::VkDevice, indirectCommandsLayout: VkIndirectCommandsLayoutNVX, pAllocator: *const vk::VkAllocationCallbacks);
pub fn vkCreateObjectTableNVX(device: vk::VkDevice, pCreateInfo: *const VkObjectTableCreateInfoNVX, pAllocator: *const vk::VkAllocationCallbacks, pObjectTable: *mut VkObjectTableNVX) -> vk::VkResult;
pub fn vkDestroyObjectTableNVX(device: vk::VkDevice, objectTable: VkObjectTableNVX, pAllocator: *const vk::VkAllocationCallbacks);
pub fn vkRegisterObjectsNVX(device: vk::VkDevice, objectTable: VkObjectTableNVX, objectCount: u32, ppObjectTableEntries: *const *const VkObjectTableEntryNVX, pObjectIndices: *const u32) -> vk::VkResult;
pub fn vkUnregisterObjectsNVX(device: vk::VkDevice, objectTable: VkObjectTableNVX, objectCount: u32, pObjectEntryTypes: *const VkObjectEntryTypeNVX, pObjectIndices: *const u32) -> vk::VkResult;
pub fn vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice: vk::VkPhysicalDevice, pFeatures: *mut VkDeviceGeneratedCommandsFeaturesNVX, pLimits: *mut VkDeviceGeneratedCommandsLimitsNVX);
}