use std::os::raw::c_char;
use std::ops::Deref;
use std::ptr;
use std::cmp;
use std::mem;
use utils::c_bindings::*;
use utils::vk_convert::*;
use utils::vk_null::*;
use utils::vk_ptr::*;
use utils::vk_traits::*;
use vulkan::vk::*;
use vulkan::vk::{VkStructureType,RawVkStructureType};
use vulkan::nv::{VkIndirectCommandsTokenType,RawVkIndirectCommandsTokenType};
use vulkan::vk::{VkPipelineLayout,RawVkPipelineLayout};
use vulkan::vk::{VkShaderStageFlags,RawVkShaderStageFlags};
use vulkan::nv::{VkIndirectStateFlags,RawVkIndirectStateFlags};
use vulkan::vk::{VkIndexType,RawVkIndexType};
#[derive(Debug, Clone)]
pub struct VkIndirectCommandsLayoutToken {
pub token_type: VkIndirectCommandsTokenType,
pub stream: usize,
pub offset: usize,
pub vertex_binding_unit: usize,
pub vertex_dynamic_stride: bool,
pub pushconstant_pipeline_layout: Option<VkPipelineLayout>,
pub pushconstant_shader_stage_flags: VkShaderStageFlags,
pub pushconstant_offset: usize,
pub pushconstant_size: usize,
pub indirect_state_flags: VkIndirectStateFlags,
pub index_types: Vec<VkIndexType>,
pub index_type_values: Vec<usize>,
}
#[doc(hidden)]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct RawVkIndirectCommandsLayoutToken {
pub s_type: RawVkStructureType,
pub next: *mut c_void,
pub token_type: RawVkIndirectCommandsTokenType,
pub stream: u32,
pub offset: u32,
pub vertex_binding_unit: u32,
pub vertex_dynamic_stride: u32,
pub pushconstant_pipeline_layout: RawVkPipelineLayout,
pub pushconstant_shader_stage_flags: RawVkShaderStageFlags,
pub pushconstant_offset: u32,
pub pushconstant_size: u32,
pub indirect_state_flags: RawVkIndirectStateFlags,
pub index_type_count: u32,
pub index_types: *mut RawVkIndexType,
pub index_type_values: *mut u32,
}
impl VkWrappedType<RawVkIndirectCommandsLayoutToken> for VkIndirectCommandsLayoutToken {
fn vk_to_raw(src: &VkIndirectCommandsLayoutToken, dst: &mut RawVkIndirectCommandsLayoutToken) {
dst.s_type = vk_to_raw_value(&VkStructureType::IndirectCommandsLayoutTokenNv);
dst.next = ptr::null_mut();
dst.token_type = vk_to_raw_value(&src.token_type);
dst.stream = vk_to_raw_value(&src.stream);
dst.offset = vk_to_raw_value(&src.offset);
dst.vertex_binding_unit = vk_to_raw_value(&src.vertex_binding_unit);
dst.vertex_dynamic_stride = vk_to_raw_value(&src.vertex_dynamic_stride);
dst.pushconstant_pipeline_layout = vk_to_raw_value_checked(&src.pushconstant_pipeline_layout);
dst.pushconstant_shader_stage_flags = vk_to_raw_value(&src.pushconstant_shader_stage_flags);
dst.pushconstant_offset = vk_to_raw_value(&src.pushconstant_offset);
dst.pushconstant_size = vk_to_raw_value(&src.pushconstant_size);
dst.indirect_state_flags = vk_to_raw_value(&src.indirect_state_flags);
dst.index_type_count = cmp::max(src.index_types.len(), src.index_type_values.len()) as u32;
dst.index_types = new_ptr_vk_array(&src.index_types);
dst.index_type_values = new_ptr_vk_array(&src.index_type_values);
}
}
impl VkRawType<VkIndirectCommandsLayoutToken> for RawVkIndirectCommandsLayoutToken {
fn vk_to_wrapped(src: &RawVkIndirectCommandsLayoutToken) -> VkIndirectCommandsLayoutToken {
VkIndirectCommandsLayoutToken {
token_type: RawVkIndirectCommandsTokenType::vk_to_wrapped(&src.token_type),
stream: u32::vk_to_wrapped(&src.stream),
offset: u32::vk_to_wrapped(&src.offset),
vertex_binding_unit: u32::vk_to_wrapped(&src.vertex_binding_unit),
vertex_dynamic_stride: u32::vk_to_wrapped(&src.vertex_dynamic_stride),
pushconstant_pipeline_layout: Some(RawVkPipelineLayout::vk_to_wrapped(&src.pushconstant_pipeline_layout)),
pushconstant_shader_stage_flags: RawVkShaderStageFlags::vk_to_wrapped(&src.pushconstant_shader_stage_flags),
pushconstant_offset: u32::vk_to_wrapped(&src.pushconstant_offset),
pushconstant_size: u32::vk_to_wrapped(&src.pushconstant_size),
indirect_state_flags: RawVkIndirectStateFlags::vk_to_wrapped(&src.indirect_state_flags),
index_types: new_vk_array(src.index_type_count, src.index_types),
index_type_values: new_vk_array(src.index_type_count, src.index_type_values),
}
}
}
impl Default for VkIndirectCommandsLayoutToken {
fn default() -> VkIndirectCommandsLayoutToken {
VkIndirectCommandsLayoutToken {
token_type: Default::default(),
stream: 0,
offset: 0,
vertex_binding_unit: 0,
vertex_dynamic_stride: false,
pushconstant_pipeline_layout: None,
pushconstant_shader_stage_flags: Default::default(),
pushconstant_offset: 0,
pushconstant_size: 0,
indirect_state_flags: Default::default(),
index_types: Vec::new(),
index_type_values: Vec::new(),
}
}
}
impl VkSetup for VkIndirectCommandsLayoutToken {
fn vk_setup(&mut self, fn_table: *mut VkFunctionTable) {
}
}
impl VkFree for RawVkIndirectCommandsLayoutToken {
fn vk_free(&self) {
free_ptr(self.index_types);
free_ptr(self.index_type_values);
}
}