9 个版本

0.1.9 2022 年 3 月 27 日
0.1.8 2020 年 6 月 26 日
0.1.7 2020 年 5 月 4 日
0.1.6 2020 年 3 月 14 日
0.1.4 2020 年 2 月 25 日

图形 API 中排名第 415

每月下载量 22

MIT 许可证

2.5MB
24K SLoC

Rust 10K SLoC // 0.0% comments C++ 9K SLoC // 0.1% comments Python 3K SLoC // 0.3% comments JavaScript 1.5K SLoC // 0.1% comments GLSL 46 SLoC // 0.6% comments Batch 4 SLoC

包含 (DOS exe, 395KB) VmaSample_Release_vs2019.exe

vklnk_raw

Docs status License

用法

  1. 几乎所有名称都与 Vulkan C API 相同。但出于简化的原因,需要进行一些更改。枚举变体名称改为不带 VK_ 前缀和枚举名称。例如,将 VkFormat.VK_FORMAT_UNDEFINED 更改为 VkFormat::UNDEFINED。由于语言限制,存在一些例外。如下所示

    C 版本 相应的 vklnk_raw 版本
    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. 大多数函数在使用之前必须获取相应的函数指针。我们提供了InstanceLevelFunctions对象和/或DeviceLevelFunctions对象,以便在各个模块上执行此操作,每个对象对应于模块的函数集。InstanceLevelFunctions只能从VkInstance加载,但DeviceLevelFunctions也可以从VkDevice加载。

  3. 所有结构都具有Debug特性和Default特性。如果您不包含在sType字段中,则无需手动设置。

示例

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

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

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

    let functions = InstanceLevelFunctions::load_from_instance(instance);

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

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

    let mut physical_device_properties = Default::default();
    for physical_device in physical_devices {
        unsafe {
            functions
                .vkGetPhysicalDeviceProperties2(physical_device, &mut physical_device_properties);
        }
        println!(
            "Physical 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 { functions.vkDestroyInstance(instance, ptr::null()) };
}

支持的API

  • Vulkan 1.2核心API
  • VK_KHR_external_fence_fd(修订版:1)
  • VK_KHR_external_fence_win32(修订版:1)
  • VK_KHR_surface(修订版:25)
  • VK_KHR_swapchain(修订版:70)
  • VK_KHR_win32_surface(修订版:6)
  • VK_KHR_pipeline_library(修订版:1)
  • VK_KHR_deferred_host_operations(修订版:4)
  • VK_KHR_acceleration_structure(修订版:13)
  • VK_KHR_ray_tracing_pipeline(修订版:1)
  • VK_KHR_ray_query(修订版:1)
  • VK_EXT_debug_utils(修订版:2)
  • VK_EXT_index_type_uint8(修订版:1)
  • VK_EXT_memory_budget(修订版:1)

依赖项