Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use ash::Entry instead of FunctionPointers #1876

Closed
wants to merge 15 commits into from
2 changes: 2 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ jobs:
linux_stable:
runs-on: ubuntu-latest
steps:
- name: Install Vulkan loader
run: sudo apt-get install libvulkan-dev
- uses: actions/checkout@v2
- name: Build
run: cargo build --verbose
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
- **Breaking** `UnsafeCommandBufferBuilder::pipeline_barrier` now takes a `DependencyInfo`. It will use `vkCmdPipelineBarrier2` if supported.
- `UnsafeCommandPoolCreateInfo` and `UnsafeCommandPoolCreationError` interfaces exposed.
- Fixed compile error in Vulkano-win on Android.
- You can now choose to link Vulkan directly at compile time by enabling the `linked` feature flag.
- **Breaking** Creating `Instance` with `Instance::new` now requires a `VulkanLibrary`, which could be created with `VulkanLibrary::linked()`, `VulkanLibrary::load()` or `VulkanLibrary::default()`. `FunctionPointers` and related types and functions are now removed.
- **Breaking** `InstanceExtensions::supported_by_core_with_loader` was removed in favor of `VulkanLibrary::instance_extensions`. `layers_list` was removed in favor of `VulkanLibrary::layers`

# Version 0.29.0 (2022-03-11)

Expand Down
5 changes: 3 additions & 2 deletions examples/src/bin/basic-compute-shader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,15 @@ use vulkano::{
physical::{PhysicalDevice, PhysicalDeviceType},
Device, DeviceCreateInfo, DeviceExtensions, QueueCreateInfo,
},
instance::Instance,
instance::{Instance, VulkanLibrary},
pipeline::{ComputePipeline, Pipeline, PipelineBindPoint},
sync::{self, GpuFuture},
};

fn main() {
// As with other examples, the first step is to create an instance.
let instance = Instance::new(Default::default()).unwrap();
let lib = VulkanLibrary::default();
let instance = Instance::new(lib, Default::default()).unwrap();

// Choose which physical device to use.
let device_extensions = DeviceExtensions {
Expand Down
16 changes: 10 additions & 6 deletions examples/src/bin/buffer-pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ use vulkano::{
},
image::{view::ImageView, ImageAccess, ImageUsage, SwapchainImage},
impl_vertex,
instance::{Instance, InstanceCreateInfo},
instance::{Instance, InstanceCreateInfo, VulkanLibrary},
pipeline::{
graphics::{
input_assembly::InputAssemblyState,
Expand Down Expand Up @@ -63,11 +63,15 @@ struct Vertex {
impl_vertex!(Vertex, position);

fn main() {
let required_extensions = vulkano_win::required_extensions();
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
})
let lib = VulkanLibrary::default();
let required_extensions = vulkano_win::required_extensions(&lib);
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
},
)
.unwrap();

let event_loop = EventLoop::new();
Expand Down
16 changes: 10 additions & 6 deletions examples/src/bin/clear_attachments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ use vulkano::{
view::ImageView,
ImageUsage, SwapchainImage,
},
instance::{Instance, InstanceCreateInfo},
instance::{Instance, InstanceCreateInfo, VulkanLibrary},
pipeline::{graphics::viewport::ViewportState, GraphicsPipeline},
render_pass::{Framebuffer, FramebufferCreateInfo, RenderPass, Subpass},
swapchain::{
Expand All @@ -39,11 +39,15 @@ fn main() {
// The start of this example is exactly the same as `triangle`. You should read the
// `triangle` example if you haven't done so yet.

let required_extensions = vulkano_win::required_extensions();
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
})
let lib = VulkanLibrary::default();
let required_extensions = vulkano_win::required_extensions(&lib);
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
},
)
.unwrap();

let event_loop = EventLoop::new();
Expand Down
18 changes: 11 additions & 7 deletions examples/src/bin/debug.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use vulkano::{
image::{ImageDimensions, ImmutableImage, MipmapsCount},
instance::{
debug::{DebugCallback, MessageSeverity, MessageType},
layers_list, Instance, InstanceCreateInfo, InstanceExtensions,
Instance, InstanceCreateInfo, InstanceExtensions, VulkanLibrary,
},
};

Expand Down Expand Up @@ -46,7 +46,8 @@ fn main() {
// and you should verify that list for safety - Vulkano will return an error if you specify
// any layers that are not installed on this system. That code to do could look like this:
println!("List of Vulkan debugging layers available to use:");
let mut layers = layers_list().unwrap();
let lib = VulkanLibrary::default();
let mut layers = lib.layers().unwrap();
while let Some(l) = layers.next() {
println!("\t{}", l.name());
}
Expand All @@ -59,11 +60,14 @@ fn main() {
let layers = vec!["VK_LAYER_KHRONOS_validation".to_owned()];

// Important: pass the extension(s) and layer(s) when creating the vulkano instance
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: extensions,
enabled_layers: layers,
..Default::default()
})
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: extensions,
enabled_layers: layers,
..Default::default()
},
)
.expect("failed to create Vulkan instance");

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
16 changes: 10 additions & 6 deletions examples/src/bin/deferred/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ use vulkano::{
Device, DeviceCreateInfo, DeviceExtensions, QueueCreateInfo,
},
image::{view::ImageView, ImageUsage},
instance::{Instance, InstanceCreateInfo},
instance::{Instance, InstanceCreateInfo, VulkanLibrary},
swapchain::{
acquire_next_image, AcquireError, Swapchain, SwapchainCreateInfo, SwapchainCreationError,
},
Expand All @@ -55,11 +55,15 @@ mod triangle_draw_system;
fn main() {
// Basic initialization. See the triangle example if you want more details about this.

let required_extensions = vulkano_win::required_extensions();
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
})
let lib = VulkanLibrary::default();
let required_extensions = vulkano_win::required_extensions(&lib);
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
},
)
.unwrap();

let event_loop = EventLoop::new();
Expand Down
5 changes: 3 additions & 2 deletions examples/src/bin/dynamic-buffers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,14 @@ use vulkano::{
physical::{PhysicalDevice, PhysicalDeviceType},
Device, DeviceCreateInfo, DeviceExtensions, QueueCreateInfo,
},
instance::Instance,
instance::{Instance, VulkanLibrary},
pipeline::{ComputePipeline, Pipeline, PipelineBindPoint},
sync::{self, GpuFuture},
};

fn main() {
let instance = Instance::new(Default::default()).unwrap();
let lib = VulkanLibrary::default();
let instance = Instance::new(lib, Default::default()).unwrap();

let device_extensions = DeviceExtensions {
khr_storage_buffer_storage_class: true,
Expand Down
22 changes: 13 additions & 9 deletions examples/src/bin/dynamic-local-size.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,26 @@ use vulkano::{
},
format::Format,
image::{view::ImageView, ImageDimensions, StorageImage},
instance::{Instance, InstanceCreateInfo, InstanceExtensions},
instance::{Instance, InstanceCreateInfo, InstanceExtensions, VulkanLibrary},
pipeline::{ComputePipeline, Pipeline, PipelineBindPoint},
sync::{self, GpuFuture},
};

fn main() {
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: InstanceExtensions {
// This extension is required to obtain physical device metadata
// about the device workgroup size limits
khr_get_physical_device_properties2: true,
let lib = VulkanLibrary::default();
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: InstanceExtensions {
// This extension is required to obtain physical device metadata
// about the device workgroup size limits
khr_get_physical_device_properties2: true,

..InstanceExtensions::none()
..InstanceExtensions::none()
},
..Default::default()
},
..Default::default()
})
)
.unwrap();

let device_extensions = DeviceExtensions {
Expand Down
38 changes: 22 additions & 16 deletions examples/src/bin/gl-interop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ mod linux {
format::Format,
image::{view::ImageView, ImageCreateFlags, ImageUsage, StorageImage, SwapchainImage},
impl_vertex,
instance::{debug::DebugCallback, Instance, InstanceCreateInfo, InstanceExtensions},
instance::{
debug::DebugCallback, Instance, InstanceCreateInfo, InstanceExtensions, VulkanLibrary,
},
pipeline::{
graphics::{
color_blend::ColorBlendState,
Expand Down Expand Up @@ -374,21 +376,25 @@ mod linux {
Arc<GraphicsPipeline>,
Arc<CpuAccessibleBuffer<[Vertex]>>,
) {
let required_extensions = vulkano_win::required_extensions();

let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: InstanceExtensions {
khr_get_physical_device_properties2: true,
khr_external_memory_capabilities: true,
khr_external_semaphore_capabilities: true,
khr_external_fence_capabilities: true,
ext_debug_utils: true,

..InstanceExtensions::none()
}
.union(&required_extensions),
..Default::default()
})
let lib = VulkanLibrary::default();
let required_extensions = vulkano_win::required_extensions(&lib);

let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: InstanceExtensions {
khr_get_physical_device_properties2: true,
khr_external_memory_capabilities: true,
khr_external_semaphore_capabilities: true,
khr_external_fence_capabilities: true,
ext_debug_utils: true,

..InstanceExtensions::none()
}
.union(&required_extensions),
..Default::default()
},
)
.unwrap();

let _debug_callback = DebugCallback::errors_and_warnings(&instance, |msg| {
Expand Down
16 changes: 10 additions & 6 deletions examples/src/bin/image-self-copy-blit/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use vulkano::{
view::ImageView, ImageAccess, ImageDimensions, ImageUsage, StorageImage, SwapchainImage,
},
impl_vertex,
instance::{Instance, InstanceCreateInfo},
instance::{Instance, InstanceCreateInfo, VulkanLibrary},
pipeline::{
graphics::{
color_blend::ColorBlendState,
Expand Down Expand Up @@ -52,11 +52,15 @@ fn main() {
// The start of this example is exactly the same as `triangle`. You should read the
// `triangle` example if you haven't done so yet.

let required_extensions = vulkano_win::required_extensions();
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
})
let lib = VulkanLibrary::default();
let required_extensions = vulkano_win::required_extensions(&lib);
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
},
)
.unwrap();

let event_loop = EventLoop::new();
Expand Down
16 changes: 10 additions & 6 deletions examples/src/bin/image/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use vulkano::{
SwapchainImage,
},
impl_vertex,
instance::{Instance, InstanceCreateInfo},
instance::{Instance, InstanceCreateInfo, VulkanLibrary},
pipeline::{
graphics::{
color_blend::ColorBlendState,
Expand Down Expand Up @@ -51,11 +51,15 @@ fn main() {
// The start of this example is exactly the same as `triangle`. You should read the
// `triangle` example if you haven't done so yet.

let required_extensions = vulkano_win::required_extensions();
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
})
let lib = VulkanLibrary::default();
let required_extensions = vulkano_win::required_extensions(&lib);
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
},
)
.unwrap();

let event_loop = EventLoop::new();
Expand Down
6 changes: 3 additions & 3 deletions examples/src/bin/immutable-buffer-initialization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ use vulkano::{
physical::{PhysicalDevice, PhysicalDeviceType},
Device, DeviceCreateInfo, DeviceExtensions, QueueCreateInfo,
},
instance::Instance,
instance::{Instance, VulkanLibrary},
pipeline::{ComputePipeline, Pipeline, PipelineBindPoint},
sync::{self, GpuFuture},
};

fn main() {
// The most part of this example is exactly the same as `basic-compute-shader`. You should read the
// `basic-compute-shader` example if you haven't done so yet.

let instance = Instance::new(Default::default()).unwrap();
let lib = VulkanLibrary::default();
let instance = Instance::new(lib, Default::default()).unwrap();

let device_extensions = DeviceExtensions {
khr_storage_buffer_storage_class: true,
Expand Down
16 changes: 10 additions & 6 deletions examples/src/bin/immutable-sampler/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ use vulkano::{
SwapchainImage,
},
impl_vertex,
instance::{Instance, InstanceCreateInfo},
instance::{Instance, InstanceCreateInfo, VulkanLibrary},
pipeline::{
graphics::{
color_blend::ColorBlendState,
Expand All @@ -57,11 +57,15 @@ use winit::{
};

fn main() {
let required_extensions = vulkano_win::required_extensions();
let instance = Instance::new(InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
})
let lib = VulkanLibrary::default();
let required_extensions = vulkano_win::required_extensions(&lib);
let instance = Instance::new(
lib,
InstanceCreateInfo {
enabled_extensions: required_extensions,
..Default::default()
},
)
.unwrap();

let event_loop = EventLoop::new();
Expand Down
Loading