From 1a8f32bacefeb3eb65df41aa2bb4b7fd4c5d4f6c Mon Sep 17 00:00:00 2001 From: expandingman Date: Mon, 15 Jun 2026 13:38:36 -0400 Subject: [PATCH] added high level Device method to bypass deprecation --- Project.toml | 2 +- src/device.jl | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 8a419819..49c065b7 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Vulkan" uuid = "9f14b124-c50e-4008-a7d4-969b3a6cd68a" authors = ["Cédric Belmant"] -version = "0.6.29" +version = "0.6.30" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" diff --git a/src/device.jl b/src/device.jl index b3176a5e..cf1d12a0 100644 --- a/src/device.jl +++ b/src/device.jl @@ -89,3 +89,37 @@ end device_or_nothing(device::Device) = device device_or_nothing(handle::Handle) = device_or_nothing(parent(handle)) device_or_nothing(::Nothing) = nothing + + +#==================================================================================================== +NOTE: the below is special handling of Device for the sake of removing a deprecation warning which + otherwise is always triggered by the wrapper constructors. + + The Device method provided here is more specific and thus usually takes precedence, + users should use this method. +====================================================================================================# +function _device_create_info(queue_create_infos::AbstractArray, enabled_extension_names::AbstractArray; + next = C_NULL, flags = 0, enabled_features = C_NULL, +) + queue_create_info_count = pointer_length(queue_create_infos) + enabled_layer_count = 0 + enabled_extension_count = pointer_length(enabled_extension_names) + next = cconvert(Ptr{Cvoid}, next) + queue_create_infos = cconvert(Ptr{VkDeviceQueueCreateInfo}, queue_create_infos) + enabled_layer_names = C_NULL + enabled_extension_names = cconvert(Ptr{Cstring}, enabled_extension_names) + enabled_features = cconvert(Ptr{VkPhysicalDeviceFeatures}, enabled_features) + deps = Any[next, queue_create_infos, enabled_layer_names, enabled_extension_names, enabled_features] + vks = VkDeviceCreateInfo(structure_type(VkDeviceCreateInfo), unsafe_convert(Ptr{Cvoid}, next), flags, queue_create_info_count, unsafe_convert(Ptr{VkDeviceQueueCreateInfo}, queue_create_infos), enabled_layer_count, unsafe_convert(Ptr{Cstring}, enabled_layer_names), enabled_extension_count, unsafe_convert(Ptr{Cstring}, enabled_extension_names), unsafe_convert(Ptr{VkPhysicalDeviceFeatures}, enabled_features)) + _DeviceCreateInfo(vks, deps) +end + +function Device(physical_device::PhysicalDevice, + queue_create_infos::AbstractArray, + enabled_layers::AbstractArray, enabled_extension_names::AbstractArray; + next=C_NULL, flags=0, enabled_features=C_NULL, +) + isempty(enabled_layers) || @warn("Device: enabled_layers is long deprecated, will be ignored") + info = _device_create_info(queue_create_infos, enabled_extension_names; next, flags, enabled_features) + unwrap(_create_device(physical_device, info)) +end