vulkan_raw

Docs status License

Usage

  1. Almost names are the same as the Vulkan C API. But for some simplification reasons, a little change must be taken. The enum variant name is changed to without VK_ prefix and enum name. For example the VkFormat.VK_FORMAT_UNDEFINED is changed to VkFormat::UNDEFINED. Because of language limitations, some exceptions exist. They are the following:

    | C version | Corresponding vulkan_raw version| | ------ | ------ | | VkImageCreateFlagBits.VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT | VkImageCreateFlagBits::IC_2D_ARRAY_COMPATIBLE_BIT | | VkQueryResultFlagBits.VK_QUERY_RESULT_64_BIT | VkQueryResultFlagBits::U64_BIT | | VkSampleCountFlagBits.VK_SAMPLE_COUNT_1_BIT | VkSampleCountFlagBits::SC_1_BIT | | VkSampleCountFlagBits.VK_SAMPLE_COUNT_2_BIT | VkSampleCountFlagBits::SC_2_BIT | | VkSampleCountFlagBits.VK_SAMPLE_COUNT_4_BIT | VkSampleCountFlagBits::SC_4_BIT | | VkSampleCountFlagBits.VK_SAMPLE_COUNT_8_BIT | VkSampleCountFlagBits::SC_8_BIT | | VkSampleCountFlagBits.VK_SAMPLE_COUNT_16_BIT | VkSampleCountFlagBits::SC_16_BIT | | VkSampleCountFlagBits.VK_SAMPLE_COUNT_32_BIT | VkSampleCountFlagBits::SC_32_BIT | | VkSampleCountFlagBits.VK_SAMPLE_COUNT_64_BIT | VkSampleCountFlagBits::SC_64_BIT | | VkImageType.VK_IMAGE_TYPE_1D | VkImageType::IT_1D | | VkImageType.VK_IMAGE_TYPE_2D | VkImageType::IT_2D | | VkImageType.VK_IMAGE_TYPE_3D | VkImageType::IT_3D | | VkImageViewType.VK_IMAGE_VIEW_TYPE_1D | VkImageViewType::IVT_1D | | VkImageViewType.VK_IMAGE_VIEW_TYPE_2D | VkImageViewType::IVT_2D | | VkImageViewType.VK_IMAGE_VIEW_TYPE_3D | VkImageViewType::IVT_3D | | VkImageViewType.VK_IMAGE_VIEW_TYPE_1D_ARRAY | VkImageViewType::IVT_1D_ARRAY | | VkImageViewType.VK_IMAGE_VIEW_TYPE_2D_ARRAY | VkImageViewType::IVT_2D_ARRAY | | VkShaderFloatControlsIndependence.VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY | VkShaderFloatControlsIndependence::F32_BIT_ONLY |

  2. Most functions must need to obtain a corresponding function pointer before use. We provide a Functions object to do this on every module, echo one corresponding to the module's functions set.

  3. All structures have Debug trait and Default trait. You don't need to set the sType field manually if it contains.

    Example

```rust use vulkan_raw::*; use std::ptr; use std::ffi::CStr;

fn main(){ let mut instanceversion: u32 = 0; unsafe {vkEnumerateInstanceVersion(&mut instanceversion)}; println!("instance version: {}", ApiVersion::from(instance_version));

// Create Vulkan instance
let mut app_info: VkApplicationInfo = Default::default();
app_info.apiVersion = ApiVersion::new(1, 2, 0).into();
let mut create_info: VkInstanceCreateInfo = Default::default();
create_info.pApplicationInfo = &app_info;
let mut instance: VkInstance = VkInstance::none();
let result = unsafe {vkCreateInstance(&create_info, ptr::null(), &mut instance)};
if result != VkResult::SUCCESS { panic!("error!") }

let core_functions = Functions::load_from_instance(instance).unwrap();

// Enumerate all devices
let mut count: u32 = 0;
let result = unsafe { core_functions.vkEnumeratePhysicalDevices(instance, &mut count, ptr::null_mut())};
if result != VkResult::SUCCESS { panic!("error!") }

let mut physical_devices: Vec<VkPhysicalDevice> = Vec::with_capacity(count as usize);
let result = unsafe {core_functions.vkEnumeratePhysicalDevices(instance, &mut count, physical_devices.as_mut_ptr())};
if result != VkResult::SUCCESS { panic!("error!") }
unsafe {physical_devices.set_len(count as usize); }

for physical_device  in physical_devices{
    let mut physical_device_properties = Default::default();
    unsafe { core_functions.vkGetPhysicalDeviceProperties2(physical_device, &mut physical_device_properties); }
    println!(
        "device: {}, supported vulkan version: {}",
        unsafe {CStr::from_ptr(physical_device_properties.properties.deviceName.as_ptr())}.to_str().unwrap(),
        ApiVersion::from(physical_device_properties.properties.apiVersion)
    );
}

unsafe { core_functions.vkDestroyInstance(instance, ptr::null())};

} ```

Supported API