15个版本 (6个破坏性更新)

使用旧的Rust 2015

0.7.0 2017年9月19日
0.6.1 2017年7月9日
0.5.1 2017年7月8日
0.4.0 2017年6月25日
0.1.0 2017年6月5日

#268 in 渲染


用于 2 crates

ISC 许可证

1MB
15K SLoC

dacite

Rust的Vulkan库,主要安全。

build status dacite on crates.io dacite on docs.rs dacite license

当前状态

  • 版本:0.7.0
  • 支持的Vulkan规范:1.0.30

开发活跃且持续进行。将逐步添加对新Vulkan修订的支持。新扩展也将在这个过程中得到支持。

辉石在文档方面严重不足。我并不打算完全记录每个类型和函数(因此实际上会重复Vulkan规范)。但至少在辉石与C API不同的部分将会随着时间的推移被记录下来。

用法

需要Rust 1.18.0或更高版本。

辉石可在crates.io上使用。将其添加到您的Cargo.toml

[dependencies]
dacite = "0.7"

查看examples子目录以开始。

在运行时动态加载Vulkan库(或更具体地说,Vulkan icd加载器)。这意味着,使用辉石进行开发无需安装任何其他东西(如C头文件或在Windows上安装LunarG Vulkan SDK)。

辉石使用vks作为其Vulkan FFI绑定和符号加载器。

目标和非目标

  • 尽可能将整个Vulkan API一对一映射到等效的Rust类型和函数,除非有很好的理由不这么做。
  • 支持多线程使用。
  • 不要隐藏Vulkan的灵活性和复杂性。
  • 不重新实现验证层:不检查有效使用,而是假设。

完整性和C和Rust API之间的简单映射可能是最重要的目标。因此,辉石的大部分责任在于将提供的Rust类型转换为它们的C对应物,反之亦然。

Vulkan 规范对有效使用和无效使用的定义非常严格。一般规则是,无效使用会导致未定义的行为。Dacite的设计方式在任何方面都不会强制执行有效的API使用。

如果Dacite不符合您的需求,我强烈建议您查看vulkano项目。

安全性

Dacite在按照Vulkan规范使用的情况下是安全的。然而,无效使用将导致未定义的行为。在开发期间启用验证层是一种防止发生不良事件的好方法。在这一点上,Dacite自己能做的很少。

这个规则的例外之一是,对象的生存期与其直接父对象(通过引用计数动态绑定)相关联,即其创建的对象。例如,一个Image将始终比其父Device存活得更久。然而,其他依赖关系没有建模。例如,将某些DeviceMemory绑定到Buffer,并不能确保DeviceMemoryBuffer存活得更久。对于Vulkan API中的所有此类关系都是如此。

稳定性

Dacite遵循语义版本化方案。尽管当前版本仍然低于1.0.0,但在进行破坏性更改时,将增加次要版本号。在Dacite支持最新的Vulkan修订版和所有扩展之前,不会发布1.0.0版本。

破坏性API更改的主要来源是新的Vulkan扩展。更具体地说,新扩展添加到现有枚举的新变体必须被视为破坏性更改。

Dacite的设计方式是,所有其他新扩展的添加不应破坏现有应用程序。然而,vks的开发表明,许多Vulkan修订版包含一些小错误,这些错误后来得到了修复。如果其中之一进入了Dacite,其移除可能是一个破坏性更改。

支持的扩展

KHR 扩展

扩展 修订版
VK_KHR_android_surface 6
VK_KHR_display_swapchain 9
VK_KHR_display 21
VK_KHR_get_physical_device_properties2 1
VK_KHR_mir_surface 4
VK_KHR_sampler_mirror_clamp_to_edge 1
VK_KHR_surface 25
VK_KHR_swapchain 68
VK_KHR_wayland_surface 5
VK_KHR_win32_surface 5
VK_KHR_xcb_surface 6
VK_KHR_xlib_surface 6

EXT 扩展

扩展 修订版
VK_EXT_debug_marker 3
VK_EXT_debug_report 3
VK_EXT_validation_flags 1

NV 扩展

扩展 修订版
VK_NV_dedicated_allocation 1
VK_NV_external_memory_capabilities 1
VK_NV_external_memory_win32 1
VK_NV_external_memory 1
VK_NV_glsl_shader 1
VK_NV_win32_keyed_mutex 1

AMD 扩展

扩展 修订版
VK_AMD_draw_indirect_count 1
VK_AMD_gcn_shader 1
VK_AMD_gpu_shader_half_float 1
VK_AMD_rasterization_order 1
VK_AMD_shader_explicit_vertex_parameter 1
VK_AMD_shader_trinary_minmax 1

IMG 扩展

扩展 修订版
VK_IMG_filter_cubic 1
VK_IMG_format_pvrtc 1

许可证

Dacite采用ISC许可证授权

Copyright (c) 2017, Dennis Hamester <[email protected]>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

依赖项

~1.5MB
~14K SLoC