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::vk::{VkPipelineBindPoint,RawVkPipelineBindPoint};
use vulkan::vk::{VkPipeline,RawVkPipeline};
use vulkan::nv::{VkIndirectCommandsLayout,RawVkIndirectCommandsLayout};
use vulkan::nv::{VkIndirectCommandsStream,RawVkIndirectCommandsStream};
use vulkan::vk::{VkBuffer,RawVkBuffer};
#[derive(Debug, Clone)]
pub struct VkGeneratedCommandsInfo {
pub pipeline_bind_point: VkPipelineBindPoint,
pub pipeline: VkPipeline,
pub indirect_commands_layout: VkIndirectCommandsLayout,
pub streams: Vec<VkIndirectCommandsStream>,
pub sequences_count: usize,
pub preprocess_buffer: VkBuffer,
pub preprocess_offset: usize,
pub preprocess_size: usize,
pub sequences_count_buffer: Option<VkBuffer>,
pub sequences_count_offset: usize,
pub sequences_index_buffer: Option<VkBuffer>,
pub sequences_index_offset: usize,
}
#[doc(hidden)]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct RawVkGeneratedCommandsInfo {
pub s_type: RawVkStructureType,
pub next: *mut c_void,
pub pipeline_bind_point: RawVkPipelineBindPoint,
pub pipeline: RawVkPipeline,
pub indirect_commands_layout: RawVkIndirectCommandsLayout,
pub stream_count: u32,
pub streams: *mut RawVkIndirectCommandsStream,
pub sequences_count: u32,
pub preprocess_buffer: RawVkBuffer,
pub preprocess_offset: u64,
pub preprocess_size: u64,
pub sequences_count_buffer: RawVkBuffer,
pub sequences_count_offset: u64,
pub sequences_index_buffer: RawVkBuffer,
pub sequences_index_offset: u64,
}
impl VkWrappedType<RawVkGeneratedCommandsInfo> for VkGeneratedCommandsInfo {
fn vk_to_raw(src: &VkGeneratedCommandsInfo, dst: &mut RawVkGeneratedCommandsInfo) {
dst.s_type = vk_to_raw_value(&VkStructureType::GeneratedCommandsInfoNv);
dst.next = ptr::null_mut();
dst.pipeline_bind_point = vk_to_raw_value(&src.pipeline_bind_point);
dst.pipeline = vk_to_raw_value(&src.pipeline);
dst.indirect_commands_layout = vk_to_raw_value(&src.indirect_commands_layout);
dst.stream_count = src.streams.len() as u32;
dst.streams = new_ptr_vk_array(&src.streams);
dst.sequences_count = vk_to_raw_value(&src.sequences_count);
dst.preprocess_buffer = vk_to_raw_value(&src.preprocess_buffer);
dst.preprocess_offset = vk_to_raw_value(&src.preprocess_offset);
dst.preprocess_size = vk_to_raw_value(&src.preprocess_size);
dst.sequences_count_buffer = vk_to_raw_value_checked(&src.sequences_count_buffer);
dst.sequences_count_offset = vk_to_raw_value(&src.sequences_count_offset);
dst.sequences_index_buffer = vk_to_raw_value_checked(&src.sequences_index_buffer);
dst.sequences_index_offset = vk_to_raw_value(&src.sequences_index_offset);
}
}
impl VkRawType<VkGeneratedCommandsInfo> for RawVkGeneratedCommandsInfo {
fn vk_to_wrapped(src: &RawVkGeneratedCommandsInfo) -> VkGeneratedCommandsInfo {
VkGeneratedCommandsInfo {
pipeline_bind_point: RawVkPipelineBindPoint::vk_to_wrapped(&src.pipeline_bind_point),
pipeline: RawVkPipeline::vk_to_wrapped(&src.pipeline),
indirect_commands_layout: RawVkIndirectCommandsLayout::vk_to_wrapped(&src.indirect_commands_layout),
streams: new_vk_array(src.stream_count, src.streams),
sequences_count: u32::vk_to_wrapped(&src.sequences_count),
preprocess_buffer: RawVkBuffer::vk_to_wrapped(&src.preprocess_buffer),
preprocess_offset: u64::vk_to_wrapped(&src.preprocess_offset),
preprocess_size: u64::vk_to_wrapped(&src.preprocess_size),
sequences_count_buffer: Some(RawVkBuffer::vk_to_wrapped(&src.sequences_count_buffer)),
sequences_count_offset: u64::vk_to_wrapped(&src.sequences_count_offset),
sequences_index_buffer: Some(RawVkBuffer::vk_to_wrapped(&src.sequences_index_buffer)),
sequences_index_offset: u64::vk_to_wrapped(&src.sequences_index_offset),
}
}
}
impl Default for VkGeneratedCommandsInfo {
fn default() -> VkGeneratedCommandsInfo {
VkGeneratedCommandsInfo {
pipeline_bind_point: Default::default(),
pipeline: Default::default(),
indirect_commands_layout: Default::default(),
streams: Vec::new(),
sequences_count: 0,
preprocess_buffer: Default::default(),
preprocess_offset: 0,
preprocess_size: 0,
sequences_count_buffer: None,
sequences_count_offset: 0,
sequences_index_buffer: None,
sequences_index_offset: 0,
}
}
}
impl VkSetup for VkGeneratedCommandsInfo {
fn vk_setup(&mut self, fn_table: *mut VkFunctionTable) {
VkSetup::vk_setup(&mut self.pipeline, fn_table);
VkSetup::vk_setup(&mut self.indirect_commands_layout, fn_table);
VkSetup::vk_setup(&mut self.preprocess_buffer, fn_table);
}
}
impl VkFree for RawVkGeneratedCommandsInfo {
fn vk_free(&self) {
free_vk_ptr_array(self.stream_count as usize, self.streams);
}
}