Downloaded num_threads v0.1.2
  Downloaded ash-molten v0.12.0+1.1.5
  Downloaded 20 crates (2.0 MB) in 0.72s
   Compiling xml-rs v0.8.4
   Compiling itoa v1.0.1
   Compiling serde_json v1.0.72
   Compiling safemem v0.3.3
   Compiling unicode-segmentation v1.8.0
   Compiling ash v0.35.1+1.2.203
   Compiling crossbeam-queue v0.3.3
   Compiling indexmap v1.8.0
   Compiling libloading v0.7.2
   Compiling line-wrap v0.1.1
   Compiling num_threads v0.1.2
   Compiling shared_library v0.1.9
   Compiling crossbeam-channel v0.5.2
   Compiling parking_lot v0.11.2
   Compiling time v0.3.6
   Compiling ash v0.33.3+1.2.191
   Compiling spirv_cross v0.23.1
   Compiling heck v0.3.3
   Compiling dashmap v5.0.0
   Compiling vk-parse v0.6.0
   Compiling tokio v1.14.0
   Compiling naga v0.5.0
   Compiling autograph v0.1.1 (/Users/rjzak/Downloads/autograph)
   Compiling envmnt v0.8.4
   Compiling plist v1.3.1
   Compiling ci_info v0.10.2
   Compiling gfx-hal v0.9.0
   Compiling vulkano v0.27.1
   Compiling ash-molten v0.12.0+1.1.5
   Compiling rusty-hook v0.11.2
warning: unused imports: `SliceMut`, `Slice`
 --> src/device.rs:2:14
  |
2 |     buffer::{Slice, SliceMut},
  |              ^^^^^  ^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: unused import: `bytemuck::Pod`
 --> src/device.rs:6:5
  |
6 | use bytemuck::Pod;
  |     ^^^^^^^^^^^^^

warning: unused imports: `Weak`, `drop`, `iter`, `take`, `time::Duration`
  --> src/device/engine.rs:17:5
   |
17 |     iter,
   |     ^^^^
18 |     iter::once,
19 |     mem::{drop, take, transmute},
   |           ^^^^  ^^^^
...
23 |         Arc, Weak,
   |              ^^^^
24 |     },
25 |     time::Duration,
   |     ^^^^^^^^^^^^^^

warning: unused imports: `AutoCommandBufferBuilder`, `DescriptorSetResources`, `DescriptorSetWithOffsets`, `DescriptorWrite`, `FenceSignalFuture`, `FenceWaitError`, `StdDescriptorPool`, `UnsafeDescriptorSet`, `memory::DeviceMemoryAllocError`, `now`
  --> src/device/engine.rs:39:9
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |         ^^^^^^^^^^^^^^^^^^^^^^^^
...
46 |             StdDescriptorPool,
   |             ^^^^^^^^^^^^^^^^^
47 |         },
48 |         sys::{DescriptorWrite, UnsafeDescriptorSet},
   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |                        ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
...
57 |     memory::DeviceMemoryAllocError,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |            ^^^                      ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^

warning: unused import: `Capability`
 --> src/device/shader.rs:8:13
  |
8 |     spirv::{Capability, Decoration, ExecutionMode, ExecutionModel, Op, StorageClass, Word},
  |             ^^^^^^^^^^

warning: unused import: `ModuleId`
  --> src/device.rs:26:23
   |
26 | use shader::{EntryId, ModuleId};
   |                       ^^^^^^^^

warning: unused import: `PrimaryCommandBuffer`
  --> src/device/engine.rs:39:75
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |                                                                           ^^^^^^^^^^^^^^^^^^^^

warning: unused import: `DescriptorSet`
  --> src/device/engine.rs:49:9
   |
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |         ^^^^^^^^^^^^^

warning: unused import: `GpuFuture`
  --> src/device/engine.rs:63:72
   |
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |                                                                        ^^^^^^^^^

warning: unused variable: `base`
   --> src/device.rs:460:21
    |
460 |         if let Some(base) = self.base.as_ref() {
    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
    |
    = note: `#[warn(unused_variables)]` on by default

warning: unused variable: `src`
   --> src/device/buffer.rs:606:36
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_src`

warning: unused variable: `device`
   --> src/device/buffer.rs:606:47
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`

warning: unused variable: `guard`
   --> src/device/buffer.rs:942:26
    |
942 |             Self::Device(guard) => todo!(), // guard.as_slice().to_vec(),
    |                          ^^^^^ help: if this is intentional, prefix it with an underscore: `_guard`

warning: unnecessary `unsafe` block
   --> src/device/engine.rs:539:27
    |
539 |         let mut barrier = unsafe { UnsafeCommandBufferBuilderPipelineBarrier::new() };
    |                           ^^^^^^ unnecessary `unsafe` block
    |
    = note: `#[warn(unused_unsafe)]` on by default

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
  --> src/util.rs:35:21
   |
35 |             None => unreachable_unchecked(),
   |                     ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
   |
note: the lint level is defined here
  --> src/lib.rs:1:23
   |
1  | #![warn(missing_docs, unsafe_op_in_unsafe_fn)]
   |                       ^^^^^^^^^^^^^^^^^^^^^^
   = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:159:12
    |
159 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:388:12
    |
388 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:167:56
    |
167 |                           FloatType::F32 => Ok(Self::F32($buffer::alloc(device, len)?)),
    |                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:166:58
    |
166 |                           FloatType::BF16 => Ok(Self::BF16($buffer::alloc(device, len)?)),
    |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: field is never read: `descriptor_set_layout`
   --> src/device/engine.rs:529:5
    |
529 |     descriptor_set_layout: Arc<DescriptorSetLayout>,
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` on by default

warning: field is never read: `device`
   --> src/device/engine.rs:635:5
    |
635 |     device: Arc<Device>,
    |     ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `into_device`
   --> src/device/buffer.rs:262:14
    |
262 |     async fn into_device(self, device: DeviceBase) -> Result<DeviceBuffer<T>>
    |              ^^^^^^^^^^^

warning: associated function is never used: `specialization_size`
   --> src/device/shader.rs:181:19
    |
181 |     pub(super) fn specialization_size(&self) -> usize {
    |                   ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `size`
   --> src/device/shader.rs:203:19
    |
203 |     pub(super) fn size(&self) -> usize {
    |                   ^^^^

warning: field is never read: `local_size`
   --> src/device.rs:281:5
    |
281 |     local_size: [u32; 3],
    |     ^^^^^^^^^^^^^^^^^^^^

warning: `autograph` (lib test) generated 25 warnings
    Finished test [unoptimized + debuginfo] target(s) in 41.64s
     Running unittests (target/debug/deps/autograph-6651538b3f305376)

running 1 test
[mvk-info] MoltenVK version 1.1.5, supporting Vulkan version 1.1.189.
	The following 72 Vulkan extensions are supported:
		VK_KHR_16bit_storage v1
		VK_KHR_8bit_storage v1
		VK_KHR_bind_memory2 v1
		VK_KHR_create_renderpass2 v1
		VK_KHR_dedicated_allocation v3
		VK_KHR_depth_stencil_resolve v1
		VK_KHR_descriptor_update_template v1
		VK_KHR_device_group v4
		VK_KHR_device_group_creation v1
		VK_KHR_driver_properties v1
		VK_KHR_external_fence v1
		VK_KHR_external_fence_capabilities v1
		VK_KHR_external_memory v1
		VK_KHR_external_memory_capabilities v1
		VK_KHR_external_semaphore v1
		VK_KHR_external_semaphore_capabilities v1
		VK_KHR_get_memory_requirements2 v1
		VK_KHR_get_physical_device_properties2 v2
		VK_KHR_get_surface_capabilities2 v1
		VK_KHR_imageless_framebuffer v1
		VK_KHR_image_format_list v1
		VK_KHR_maintenance1 v2
		VK_KHR_maintenance2 v1
		VK_KHR_maintenance3 v1
		VK_KHR_multiview v1
		VK_KHR_portability_subset v1
		VK_KHR_push_descriptor v2
		VK_KHR_relaxed_block_layout v1
		VK_KHR_sampler_mirror_clamp_to_edge v3
		VK_KHR_sampler_ycbcr_conversion v14
		VK_KHR_shader_draw_parameters v1
		VK_KHR_shader_float16_int8 v1
		VK_KHR_shader_subgroup_extended_types v1
		VK_KHR_storage_buffer_storage_class v1
		VK_KHR_surface v25
		VK_KHR_swapchain v70
		VK_KHR_swapchain_mutable_format v1
		VK_KHR_timeline_semaphore v2
		VK_KHR_uniform_buffer_standard_layout v1
		VK_KHR_variable_pointers v1
		VK_EXT_debug_marker v4
		VK_EXT_debug_report v10
		VK_EXT_debug_utils v2
		VK_EXT_descriptor_indexing v2
		VK_EXT_fragment_shader_interlock v1
		VK_EXT_hdr_metadata v2
		VK_EXT_host_query_reset v1
		VK_EXT_image_robustness v1
		VK_EXT_inline_uniform_block v1
		VK_EXT_memory_budget v1
		VK_EXT_metal_surface v1
		VK_EXT_post_depth_coverage v1
		VK_EXT_private_data v1
		VK_EXT_robustness2 v1
		VK_EXT_scalar_block_layout v1
		VK_EXT_shader_stencil_export v1
		VK_EXT_shader_viewport_index_layer v1
		VK_EXT_subgroup_size_control v2
		VK_EXT_swapchain_colorspace v4
		VK_EXT_texel_buffer_alignment v1
		VK_EXT_texture_compression_astc_hdr v1
		VK_EXT_vertex_attribute_divisor v3
		VK_AMD_gpu_shader_half_float v2
		VK_AMD_negative_viewport_height v1
		VK_AMD_shader_image_load_store_lod v1
		VK_AMD_shader_trinary_minmax v1
		VK_IMG_format_pvrtc v1
		VK_INTEL_shader_integer_functions2 v1
		VK_GOOGLE_display_timing v1
		VK_MVK_macos_surface v3
		VK_MVK_moltenvk v32
		VK_NV_glsl_shader v1
[mvk-info] GPU device:
		model: Apple M1
		type: Integrated
		vendorID: 0x106b
		deviceID: 0xa140
		pipelineCacheUUID: C1D03328-0400-03EF-0000-000000000000
	supports the following Metal Versions, GPU's and Feature Sets:
		Metal Shading Language 2.3
		GPU Family Apple 7
		GPU Family Apple 6
		GPU Family Apple 5
		GPU Family Apple 4
		GPU Family Apple 3
		GPU Family Apple 2
		GPU Family Apple 1
		GPU Family Mac 2
		GPU Family Mac 1
		GPU Family Common 3
		GPU Family Common 2
		GPU Family Common 1
		macOS GPU Family 2 v1
		macOS GPU Family 1 v4
		macOS GPU Family 1 v3
		macOS GPU Family 1 v2
		macOS GPU Family 1 v1
[mvk-info] Created VkInstance for Vulkan version 1.1.0, as requested by app, with the following 0 Vulkan extensions enabled:
test device::tests::device_new ... FAILED

failures:

---- device::tests::device_new stdout ----
thread 'device::tests::device_new' panicked at 'Unable to load MoltenVK!', src/device/engine.rs:80:22
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

failures:
    device::tests::device_new

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 41 filtered out; finished in 0.01s

Well that's encouraging. I'm trying to figure out how to use ash-molten to do the static linking, it seems like it worked but the function I used returned None for some reason. But all the extensions are provided in the api so it will be possible to select impls based on that rather than guessing based on platform.

I think I was unnecessarily unwrapping the optional fn pointers when they are meant to be null for 1.2 which isn't supported, so it should work now.

 % git status
On branch vulkano
Your branch is up to date with 'origin/vulkano'.

nothing to commit, working tree clean
% cargo test --features device_tests device_new
   Compiling autograph v0.1.1 (/Users/rjzak/Downloads/autograph)
warning: unused imports: `SliceMut`, `Slice`
 --> src/device.rs:2:14
  |
2 |     buffer::{Slice, SliceMut},
  |              ^^^^^  ^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: unused import: `bytemuck::Pod`
 --> src/device.rs:6:5
  |
6 | use bytemuck::Pod;
  |     ^^^^^^^^^^^^^

warning: unused imports: `Weak`, `drop`, `iter`, `take`, `time::Duration`
  --> src/device/engine.rs:17:5
   |
17 |     iter,
   |     ^^^^
18 |     iter::once,
19 |     mem::{drop, take, transmute},
   |           ^^^^  ^^^^
...
23 |         Arc, Weak,
   |              ^^^^
24 |     },
25 |     time::Duration,
   |     ^^^^^^^^^^^^^^

warning: unused imports: `AutoCommandBufferBuilder`, `DescriptorSetResources`, `DescriptorSetWithOffsets`, `DescriptorWrite`, `FenceSignalFuture`, `FenceWaitError`, `StdDescriptorPool`, `UnsafeDescriptorSet`, `memory::DeviceMemoryAllocError`, `now`
  --> src/device/engine.rs:39:9
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |         ^^^^^^^^^^^^^^^^^^^^^^^^
...
46 |             StdDescriptorPool,
   |             ^^^^^^^^^^^^^^^^^
47 |         },
48 |         sys::{DescriptorWrite, UnsafeDescriptorSet},
   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |                        ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
...
57 |     memory::DeviceMemoryAllocError,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |            ^^^                      ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^

warning: unused import: `Capability`
 --> src/device/shader.rs:8:13
  |
8 |     spirv::{Capability, Decoration, ExecutionMode, ExecutionModel, Op, StorageClass, Word},
  |             ^^^^^^^^^^

warning: unused import: `ModuleId`
  --> src/device.rs:26:23
   |
26 | use shader::{EntryId, ModuleId};
   |                       ^^^^^^^^

warning: unused import: `PrimaryCommandBuffer`
  --> src/device/engine.rs:39:75
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |                                                                           ^^^^^^^^^^^^^^^^^^^^

warning: unused import: `DescriptorSet`
  --> src/device/engine.rs:49:9
   |
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |         ^^^^^^^^^^^^^

warning: unused import: `GpuFuture`
  --> src/device/engine.rs:63:72
   |
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |                                                                        ^^^^^^^^^

warning: unused variable: `base`
   --> src/device.rs:460:21
    |
460 |         if let Some(base) = self.base.as_ref() {
    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
    |
    = note: `#[warn(unused_variables)]` on by default

warning: unused variable: `src`
   --> src/device/buffer.rs:606:36
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_src`

warning: unused variable: `device`
   --> src/device/buffer.rs:606:47
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`

warning: unused variable: `guard`
   --> src/device/buffer.rs:942:26
    |
942 |             Self::Device(guard) => todo!(), // guard.as_slice().to_vec(),
    |                          ^^^^^ help: if this is intentional, prefix it with an underscore: `_guard`

warning: unnecessary `unsafe` block
   --> src/device/engine.rs:539:27
    |
539 |         let mut barrier = unsafe { UnsafeCommandBufferBuilderPipelineBarrier::new() };
    |                           ^^^^^^ unnecessary `unsafe` block
    |
    = note: `#[warn(unused_unsafe)]` on by default

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
  --> src/util.rs:35:21
   |
35 |             None => unreachable_unchecked(),
   |                     ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
   |
note: the lint level is defined here
  --> src/lib.rs:1:23
   |
1  | #![warn(missing_docs, unsafe_op_in_unsafe_fn)]
   |                       ^^^^^^^^^^^^^^^^^^^^^^
   = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:159:12
    |
159 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:388:12
    |
388 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:167:56
    |
167 |                           FloatType::F32 => Ok(Self::F32($buffer::alloc(device, len)?)),
    |                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:166:58
    |
166 |                           FloatType::BF16 => Ok(Self::BF16($buffer::alloc(device, len)?)),
    |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: field is never read: `descriptor_set_layout`
   --> src/device/engine.rs:529:5
    |
529 |     descriptor_set_layout: Arc<DescriptorSetLayout>,
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` on by default

warning: field is never read: `device`
   --> src/device/engine.rs:635:5
    |
635 |     device: Arc<Device>,
    |     ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `into_device`
   --> src/device/buffer.rs:262:14
    |
262 |     async fn into_device(self, device: DeviceBase) -> Result<DeviceBuffer<T>>
    |              ^^^^^^^^^^^

warning: associated function is never used: `specialization_size`
   --> src/device/shader.rs:181:19
    |
181 |     pub(super) fn specialization_size(&self) -> usize {
    |                   ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `size`
   --> src/device/shader.rs:203:19
    |
203 |     pub(super) fn size(&self) -> usize {
    |                   ^^^^

warning: field is never read: `local_size`
   --> src/device.rs:281:5
    |
281 |     local_size: [u32; 3],
    |     ^^^^^^^^^^^^^^^^^^^^

warning: `autograph` (lib test) generated 25 warnings
    Finished test [unoptimized + debuginfo] target(s) in 3.03s
     Running unittests (target/debug/deps/autograph-6651538b3f305376)

running 1 test
[mvk-info] MoltenVK version 1.1.5, supporting Vulkan version 1.1.189.
	The following 72 Vulkan extensions are supported:
		VK_KHR_16bit_storage v1
		VK_KHR_8bit_storage v1
		VK_KHR_bind_memory2 v1
		VK_KHR_create_renderpass2 v1
		VK_KHR_dedicated_allocation v3
		VK_KHR_depth_stencil_resolve v1
		VK_KHR_descriptor_update_template v1
		VK_KHR_device_group v4
		VK_KHR_device_group_creation v1
		VK_KHR_driver_properties v1
		VK_KHR_external_fence v1
		VK_KHR_external_fence_capabilities v1
		VK_KHR_external_memory v1
		VK_KHR_external_memory_capabilities v1
		VK_KHR_external_semaphore v1
		VK_KHR_external_semaphore_capabilities v1
		VK_KHR_get_memory_requirements2 v1
		VK_KHR_get_physical_device_properties2 v2
		VK_KHR_get_surface_capabilities2 v1
		VK_KHR_imageless_framebuffer v1
		VK_KHR_image_format_list v1
		VK_KHR_maintenance1 v2
		VK_KHR_maintenance2 v1
		VK_KHR_maintenance3 v1
		VK_KHR_multiview v1
		VK_KHR_portability_subset v1
		VK_KHR_push_descriptor v2
		VK_KHR_relaxed_block_layout v1
		VK_KHR_sampler_mirror_clamp_to_edge v3
		VK_KHR_sampler_ycbcr_conversion v14
		VK_KHR_shader_draw_parameters v1
		VK_KHR_shader_float16_int8 v1
		VK_KHR_shader_subgroup_extended_types v1
		VK_KHR_storage_buffer_storage_class v1
		VK_KHR_surface v25
		VK_KHR_swapchain v70
		VK_KHR_swapchain_mutable_format v1
		VK_KHR_timeline_semaphore v2
		VK_KHR_uniform_buffer_standard_layout v1
		VK_KHR_variable_pointers v1
		VK_EXT_debug_marker v4
		VK_EXT_debug_report v10
		VK_EXT_debug_utils v2
		VK_EXT_descriptor_indexing v2
		VK_EXT_fragment_shader_interlock v1
		VK_EXT_hdr_metadata v2
		VK_EXT_host_query_reset v1
		VK_EXT_image_robustness v1
		VK_EXT_inline_uniform_block v1
		VK_EXT_memory_budget v1
		VK_EXT_metal_surface v1
		VK_EXT_post_depth_coverage v1
		VK_EXT_private_data v1
		VK_EXT_robustness2 v1
		VK_EXT_scalar_block_layout v1
		VK_EXT_shader_stencil_export v1
		VK_EXT_shader_viewport_index_layer v1
		VK_EXT_subgroup_size_control v2
		VK_EXT_swapchain_colorspace v4
		VK_EXT_texel_buffer_alignment v1
		VK_EXT_texture_compression_astc_hdr v1
		VK_EXT_vertex_attribute_divisor v3
		VK_AMD_gpu_shader_half_float v2
		VK_AMD_negative_viewport_height v1
		VK_AMD_shader_image_load_store_lod v1
		VK_AMD_shader_trinary_minmax v1
		VK_IMG_format_pvrtc v1
		VK_INTEL_shader_integer_functions2 v1
		VK_GOOGLE_display_timing v1
		VK_MVK_macos_surface v3
		VK_MVK_moltenvk v32
		VK_NV_glsl_shader v1
[mvk-info] GPU device:
		model: Apple M1
		type: Integrated
		vendorID: 0x106b
		deviceID: 0xa140
		pipelineCacheUUID: C1D03328-0400-03EF-0000-000000000000
	supports the following Metal Versions, GPU's and Feature Sets:
		Metal Shading Language 2.3
		GPU Family Apple 7
		GPU Family Apple 6
		GPU Family Apple 5
		GPU Family Apple 4
		GPU Family Apple 3
		GPU Family Apple 2
		GPU Family Apple 1
		GPU Family Mac 2
		GPU Family Mac 1
		GPU Family Common 3
		GPU Family Common 2
		GPU Family Common 1
		macOS GPU Family 2 v1
		macOS GPU Family 1 v4
		macOS GPU Family 1 v3
		macOS GPU Family 1 v2
		macOS GPU Family 1 v1
[mvk-info] Created VkInstance for Vulkan version 1.1.0, as requested by app, with the following 0 Vulkan extensions enabled:
test device::tests::device_new ... FAILED

failures:

---- device::tests::device_new stdout ----
Error: Device doesn't support required_features! Features {
    acceleration_structure: false,
    acceleration_structure_capture_replay: false,
    acceleration_structure_host_commands: false,
    acceleration_structure_indirect_build: false,
    advanced_blend_coherent_operations: false,
    alpha_to_one: false,
    attachment_fragment_shading_rate: false,
    bresenham_lines: false,
    buffer_device_address: false,
    buffer_device_address_capture_replay: false,
    buffer_device_address_multi_device: false,
    color_write_enable: false,
    compute_derivative_group_linear: false,
    compute_derivative_group_quads: false,
    compute_full_subgroups: false,
    conditional_rendering: false,
    constant_alpha_color_blend_factors: false,
    cooperative_matrix: false,
    cooperative_matrix_robust_buffer_access: false,
    corner_sampled_image: false,
    coverage_reduction_mode: false,
    custom_border_color_without_format: false,
    custom_border_colors: false,
    decode_mode_shared_exponent: false,
    dedicated_allocation_image_aliasing: false,
    depth_bias_clamp: false,
    depth_bounds: false,
    depth_clamp: false,
    depth_clip_enable: false,
    descriptor_binding_acceleration_structure_update_after_bind: false,
    descriptor_binding_inline_uniform_block_update_after_bind: false,
    descriptor_binding_partially_bound: false,
    descriptor_binding_sampled_image_update_after_bind: false,
    descriptor_binding_storage_buffer_update_after_bind: false,
    descriptor_binding_storage_image_update_after_bind: false,
    descriptor_binding_storage_texel_buffer_update_after_bind: false,
    descriptor_binding_uniform_buffer_update_after_bind: false,
    descriptor_binding_uniform_texel_buffer_update_after_bind: false,
    descriptor_binding_update_unused_while_pending: false,
    descriptor_binding_variable_descriptor_count: false,
    descriptor_indexing: false,
    device_coherent_memory: false,
    device_generated_commands: false,
    device_memory_report: false,
    diagnostics_config: false,
    draw_indirect_count: false,
    draw_indirect_first_instance: false,
    dual_src_blend: false,
    events: false,
    exclusive_scissor: false,
    extended_dynamic_state: false,
    extended_dynamic_state2: false,
    extended_dynamic_state2_logic_op: false,
    extended_dynamic_state2_patch_control_points: false,
    external_memory_rdma: false,
    fill_mode_non_solid: false,
    format_a4b4g4r4: false,
    format_a4r4g4b4: false,
    fragment_density_map: false,
    fragment_density_map_deferred: false,
    fragment_density_map_dynamic: false,
    fragment_density_map_non_subsampled_images: false,
    fragment_shader_barycentric: false,
    fragment_shader_pixel_interlock: false,
    fragment_shader_sample_interlock: false,
    fragment_shader_shading_rate_interlock: false,
    fragment_shading_rate_enums: false,
    fragment_stores_and_atomics: false,
    full_draw_index_uint32: false,
    geometry_shader: false,
    geometry_streams: false,
    global_priority_query: false,
    host_query_reset: false,
    image_cube_array: false,
    image_footprint: false,
    image_view2_d_on3_d_image: false,
    image_view_format_reinterpretation: false,
    image_view_format_swizzle: false,
    imageless_framebuffer: false,
    independent_blend: false,
    index_type_uint8: false,
    inherited_conditional_rendering: false,
    inherited_queries: false,
    inherited_viewport_scissor2_d: false,
    inline_uniform_block: false,
    invocation_mask: false,
    large_points: false,
    logic_op: false,
    memory_priority: false,
    mesh_shader: false,
    multi_draw: false,
    multi_draw_indirect: false,
    multi_viewport: false,
    multisample_array_image: false,
    multiview: false,
    multiview_geometry_shader: false,
    multiview_tessellation_shader: false,
    mutable_comparison_samplers: false,
    mutable_descriptor_type: false,
    no_invocation_fragment_shading_rates: false,
    null_descriptor: false,
    occlusion_query_precise: false,
    pageable_device_local_memory: false,
    performance_counter_multiple_query_pools: false,
    performance_counter_query_pools: false,
    pipeline_creation_cache_control: false,
    pipeline_executable_info: false,
    pipeline_fragment_shading_rate: false,
    pipeline_statistics_query: false,
    point_polygons: false,
    present_id: false,
    present_wait: false,
    primitive_fragment_shading_rate: false,
    primitive_topology_list_restart: false,
    primitive_topology_patch_list_restart: false,
    private_data: false,
    protected_memory: false,
    provoking_vertex_last: false,
    ray_query: false,
    ray_tracing_motion_blur: false,
    ray_tracing_motion_blur_pipeline_trace_rays_indirect: false,
    ray_tracing_pipeline: false,
    ray_tracing_pipeline_shader_group_handle_capture_replay: false,
    ray_tracing_pipeline_shader_group_handle_capture_replay_mixed: false,
    ray_tracing_pipeline_trace_rays_indirect: false,
    ray_traversal_primitive_culling: false,
    rectangular_lines: false,
    representative_fragment_test: false,
    robust_buffer_access: false,
    robust_buffer_access2: false,
    robust_image_access: false,
    robust_image_access2: false,
    runtime_descriptor_array: false,
    sample_rate_shading: false,
    sampler_anisotropy: false,
    sampler_filter_minmax: false,
    sampler_mip_lod_bias: false,
    sampler_mirror_clamp_to_edge: false,
    sampler_ycbcr_conversion: false,
    scalar_block_layout: false,
    separate_depth_stencil_layouts: false,
    separate_stencil_mask_ref: false,
    shader_buffer_float16_atomic_add: false,
    shader_buffer_float16_atomic_min_max: false,
    shader_buffer_float16_atomics: false,
    shader_buffer_float32_atomic_add: false,
    shader_buffer_float32_atomic_min_max: false,
    shader_buffer_float32_atomics: false,
    shader_buffer_float64_atomic_add: false,
    shader_buffer_float64_atomic_min_max: false,
    shader_buffer_float64_atomics: false,
    shader_buffer_int64_atomics: false,
    shader_clip_distance: false,
    shader_cull_distance: false,
    shader_demote_to_helper_invocation: false,
    shader_device_clock: false,
    shader_draw_parameters: false,
    shader_float16: false,
    shader_float64: false,
    shader_image_float32_atomic_add: false,
    shader_image_float32_atomic_min_max: false,
    shader_image_float32_atomics: false,
    shader_image_gather_extended: false,
    shader_image_int64_atomics: false,
    shader_input_attachment_array_dynamic_indexing: false,
    shader_input_attachment_array_non_uniform_indexing: false,
    shader_int16: false,
    shader_int64: false,
    shader_int8: false,
    shader_integer_dot_product: false,
    shader_integer_functions2: false,
    shader_output_layer: false,
    shader_output_viewport_index: false,
    shader_resource_min_lod: false,
    shader_resource_residency: false,
    shader_sample_rate_interpolation_functions: false,
    shader_sampled_image_array_dynamic_indexing: false,
    shader_sampled_image_array_non_uniform_indexing: false,
    shader_shared_float16_atomic_add: false,
    shader_shared_float16_atomic_min_max: false,
    shader_shared_float16_atomics: false,
    shader_shared_float32_atomic_add: false,
    shader_shared_float32_atomic_min_max: false,
    shader_shared_float32_atomics: false,
    shader_shared_float64_atomic_add: false,
    shader_shared_float64_atomic_min_max: false,
    shader_shared_float64_atomics: false,
    shader_shared_int64_atomics: false,
    shader_sm_builtins: false,
    shader_storage_buffer_array_dynamic_indexing: false,
    shader_storage_buffer_array_non_uniform_indexing: false,
    shader_storage_image_array_dynamic_indexing: false,
    shader_storage_image_array_non_uniform_indexing: false,
    shader_storage_image_extended_formats: false,
    shader_storage_image_multisample: false,
    shader_storage_image_read_without_format: false,
    shader_storage_image_write_without_format: false,
    shader_storage_texel_buffer_array_dynamic_indexing: false,
    shader_storage_texel_buffer_array_non_uniform_indexing: false,
    shader_subgroup_clock: false,
    shader_subgroup_extended_types: false,
    shader_subgroup_uniform_control_flow: false,
    shader_terminate_invocation: false,
    shader_tessellation_and_geometry_point_size: false,
    shader_uniform_buffer_array_dynamic_indexing: false,
    shader_uniform_buffer_array_non_uniform_indexing: false,
    shader_uniform_texel_buffer_array_dynamic_indexing: false,
    shader_uniform_texel_buffer_array_non_uniform_indexing: false,
    shader_zero_initialize_workgroup_memory: false,
    shading_rate_coarse_sample_order: false,
    shading_rate_image: false,
    smooth_lines: false,
    sparse_binding: false,
    sparse_image_float32_atomic_add: false,
    sparse_image_float32_atomic_min_max: false,
    sparse_image_float32_atomics: false,
    sparse_image_int64_atomics: false,
    sparse_residency16_samples: false,
    sparse_residency2_samples: false,
    sparse_residency4_samples: false,
    sparse_residency8_samples: false,
    sparse_residency_aliased: false,
    sparse_residency_buffer: false,
    sparse_residency_image2_d: false,
    sparse_residency_image3_d: false,
    stippled_bresenham_lines: false,
    stippled_rectangular_lines: false,
    stippled_smooth_lines: false,
    storage_buffer16_bit_access: false,
    storage_buffer8_bit_access: false,
    storage_input_output16: false,
    storage_push_constant16: false,
    storage_push_constant8: false,
    subgroup_broadcast_dynamic_id: false,
    subgroup_size_control: false,
    subpass_shading: false,
    supersample_fragment_shading_rates: false,
    synchronization2: false,
    task_shader: false,
    tessellation_isolines: false,
    tessellation_point_mode: false,
    tessellation_shader: false,
    texel_buffer_alignment: false,
    texture_compression_astc_hdr: false,
    texture_compression_astc_ldr: false,
    texture_compression_bc: false,
    texture_compression_etc2: false,
    timeline_semaphore: false,
    transform_feedback: false,
    transform_feedback_preserves_provoking_vertex: false,
    triangle_fans: false,
    uniform_and_storage_buffer16_bit_access: false,
    uniform_and_storage_buffer8_bit_access: false,
    uniform_buffer_standard_layout: false,
    variable_multisample_rate: false,
    variable_pointers: false,
    variable_pointers_storage_buffer: false,
    vertex_attribute_access_beyond_stride: false,
    vertex_attribute_instance_rate_divisor: false,
    vertex_attribute_instance_rate_zero_divisor: false,
    vertex_input_dynamic_state: false,
    vertex_pipeline_stores_and_atomics: false,
    vulkan_memory_model: true,
    vulkan_memory_model_availability_visibility_chains: false,
    vulkan_memory_model_device_scope: false,
    wide_lines: false,
    workgroup_memory_explicit_layout: false,
    workgroup_memory_explicit_layout16_bit_access: false,
    workgroup_memory_explicit_layout8_bit_access: false,
    workgroup_memory_explicit_layout_scalar_block_layout: false,
    ycbcr2plane444_formats: false,
    ycbcr_image_arrays: false,
}
thread 'device::tests::device_new' panicked at 'assertion failed: `(left == right)`
  left: `1`,
 right: `0`: the test returned a termination value with a non-zero status code (1) which indicates a failure', /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c/library/test/src/lib.rs:195:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

failures:
    device::tests::device_new

I think it doesn't support the vulkan_memory_model, which is the only feature I required. But I think this isn't necessary when it will be converted to metal anyway. I removed the requirement, see it that works.

Making some progress!! The "device new" test worked, so I also ran all of the tests. 145 passed, 1 failed, 2 ignored.
% git status
On branch vulkano
Your branch is up to date with 'origin/vulkano'.

nothing to commit, working tree clean
% cargo test --features device_tests device_new
   Compiling autograph v0.1.1 (/Users/rjzak/Downloads/autograph)
warning: unused imports: `SliceMut`, `Slice`
 --> src/device.rs:2:14
  |
2 |     buffer::{Slice, SliceMut},
  |              ^^^^^  ^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: unused import: `bytemuck::Pod`
 --> src/device.rs:6:5
  |
6 | use bytemuck::Pod;
  |     ^^^^^^^^^^^^^

warning: unused imports: `Weak`, `drop`, `iter`, `take`, `time::Duration`
  --> src/device/engine.rs:17:5
   |
17 |     iter,
   |     ^^^^
18 |     iter::once,
19 |     mem::{drop, take, transmute},
   |           ^^^^  ^^^^
...
23 |         Arc, Weak,
   |              ^^^^
24 |     },
25 |     time::Duration,
   |     ^^^^^^^^^^^^^^

warning: unused imports: `AutoCommandBufferBuilder`, `DescriptorSetResources`, `DescriptorSetWithOffsets`, `DescriptorWrite`, `FenceSignalFuture`, `FenceWaitError`, `StdDescriptorPool`, `UnsafeDescriptorSet`, `memory::DeviceMemoryAllocError`, `now`
  --> src/device/engine.rs:39:9
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |         ^^^^^^^^^^^^^^^^^^^^^^^^
...
46 |             StdDescriptorPool,
   |             ^^^^^^^^^^^^^^^^^
47 |         },
48 |         sys::{DescriptorWrite, UnsafeDescriptorSet},
   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |                        ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
...
57 |     memory::DeviceMemoryAllocError,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |            ^^^                      ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^

warning: unused import: `Capability`
 --> src/device/shader.rs:8:13
  |
8 |     spirv::{Capability, Decoration, ExecutionMode, ExecutionModel, Op, StorageClass, Word},
  |             ^^^^^^^^^^

warning: unused import: `ModuleId`
  --> src/device.rs:26:23
   |
26 | use shader::{EntryId, ModuleId};
   |                       ^^^^^^^^

warning: unused import: `PrimaryCommandBuffer`
  --> src/device/engine.rs:39:75
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |                                                                           ^^^^^^^^^^^^^^^^^^^^

warning: unused import: `DescriptorSet`
  --> src/device/engine.rs:49:9
   |
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |         ^^^^^^^^^^^^^

warning: unused import: `GpuFuture`
  --> src/device/engine.rs:63:72
   |
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |                                                                        ^^^^^^^^^

warning: unused variable: `base`
   --> src/device.rs:460:21
    |
460 |         if let Some(base) = self.base.as_ref() {
    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
    |
    = note: `#[warn(unused_variables)]` on by default

warning: unused variable: `src`
   --> src/device/buffer.rs:606:36
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_src`

warning: unused variable: `device`
   --> src/device/buffer.rs:606:47
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`

warning: unused variable: `guard`
   --> src/device/buffer.rs:942:26
    |
942 |             Self::Device(guard) => todo!(), // guard.as_slice().to_vec(),
    |                          ^^^^^ help: if this is intentional, prefix it with an underscore: `_guard`

warning: unnecessary `unsafe` block
   --> src/device/engine.rs:538:27
    |
538 |         let mut barrier = unsafe { UnsafeCommandBufferBuilderPipelineBarrier::new() };
    |                           ^^^^^^ unnecessary `unsafe` block
    |
    = note: `#[warn(unused_unsafe)]` on by default

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
  --> src/util.rs:35:21
   |
35 |             None => unreachable_unchecked(),
   |                     ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
   |
note: the lint level is defined here
  --> src/lib.rs:1:23
   |
1  | #![warn(missing_docs, unsafe_op_in_unsafe_fn)]
   |                       ^^^^^^^^^^^^^^^^^^^^^^
   = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:159:12
    |
159 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:388:12
    |
388 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:167:56
    |
167 |                           FloatType::F32 => Ok(Self::F32($buffer::alloc(device, len)?)),
    |                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:166:58
    |
166 |                           FloatType::BF16 => Ok(Self::BF16($buffer::alloc(device, len)?)),
    |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: field is never read: `descriptor_set_layout`
   --> src/device/engine.rs:528:5
    |
528 |     descriptor_set_layout: Arc<DescriptorSetLayout>,
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` on by default

warning: field is never read: `device`
   --> src/device/engine.rs:634:5
    |
634 |     device: Arc<Device>,
    |     ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `into_device`
   --> src/device/buffer.rs:262:14
    |
262 |     async fn into_device(self, device: DeviceBase) -> Result<DeviceBuffer<T>>
    |              ^^^^^^^^^^^

warning: associated function is never used: `specialization_size`
   --> src/device/shader.rs:181:19
    |
181 |     pub(super) fn specialization_size(&self) -> usize {
    |                   ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `size`
   --> src/device/shader.rs:203:19
    |
203 |     pub(super) fn size(&self) -> usize {
    |                   ^^^^

warning: field is never read: `local_size`
   --> src/device.rs:281:5
    |
281 |     local_size: [u32; 3],
    |     ^^^^^^^^^^^^^^^^^^^^

warning: `autograph` (lib test) generated 25 warnings
    Finished test [unoptimized + debuginfo] target(s) in 4.87s
     Running unittests (target/debug/deps/autograph-6651538b3f305376)

running 1 test
[mvk-info] MoltenVK version 1.1.5, supporting Vulkan version 1.1.189.
	The following 72 Vulkan extensions are supported:
		VK_KHR_16bit_storage v1
		VK_KHR_8bit_storage v1
		VK_KHR_bind_memory2 v1
		VK_KHR_create_renderpass2 v1
		VK_KHR_dedicated_allocation v3
		VK_KHR_depth_stencil_resolve v1
		VK_KHR_descriptor_update_template v1
		VK_KHR_device_group v4
		VK_KHR_device_group_creation v1
		VK_KHR_driver_properties v1
		VK_KHR_external_fence v1
		VK_KHR_external_fence_capabilities v1
		VK_KHR_external_memory v1
		VK_KHR_external_memory_capabilities v1
		VK_KHR_external_semaphore v1
		VK_KHR_external_semaphore_capabilities v1
		VK_KHR_get_memory_requirements2 v1
		VK_KHR_get_physical_device_properties2 v2
		VK_KHR_get_surface_capabilities2 v1
		VK_KHR_imageless_framebuffer v1
		VK_KHR_image_format_list v1
		VK_KHR_maintenance1 v2
		VK_KHR_maintenance2 v1
		VK_KHR_maintenance3 v1
		VK_KHR_multiview v1
		VK_KHR_portability_subset v1
		VK_KHR_push_descriptor v2
		VK_KHR_relaxed_block_layout v1
		VK_KHR_sampler_mirror_clamp_to_edge v3
		VK_KHR_sampler_ycbcr_conversion v14
		VK_KHR_shader_draw_parameters v1
		VK_KHR_shader_float16_int8 v1
		VK_KHR_shader_subgroup_extended_types v1
		VK_KHR_storage_buffer_storage_class v1
		VK_KHR_surface v25
		VK_KHR_swapchain v70
		VK_KHR_swapchain_mutable_format v1
		VK_KHR_timeline_semaphore v2
		VK_KHR_uniform_buffer_standard_layout v1
		VK_KHR_variable_pointers v1
		VK_EXT_debug_marker v4
		VK_EXT_debug_report v10
		VK_EXT_debug_utils v2
		VK_EXT_descriptor_indexing v2
		VK_EXT_fragment_shader_interlock v1
		VK_EXT_hdr_metadata v2
		VK_EXT_host_query_reset v1
		VK_EXT_image_robustness v1
		VK_EXT_inline_uniform_block v1
		VK_EXT_memory_budget v1
		VK_EXT_metal_surface v1
		VK_EXT_post_depth_coverage v1
		VK_EXT_private_data v1
		VK_EXT_robustness2 v1
		VK_EXT_scalar_block_layout v1
		VK_EXT_shader_stencil_export v1
		VK_EXT_shader_viewport_index_layer v1
		VK_EXT_subgroup_size_control v2
		VK_EXT_swapchain_colorspace v4
		VK_EXT_texel_buffer_alignment v1
		VK_EXT_texture_compression_astc_hdr v1
		VK_EXT_vertex_attribute_divisor v3
		VK_AMD_gpu_shader_half_float v2
		VK_AMD_negative_viewport_height v1
		VK_AMD_shader_image_load_store_lod v1
		VK_AMD_shader_trinary_minmax v1
		VK_IMG_format_pvrtc v1
		VK_INTEL_shader_integer_functions2 v1
		VK_GOOGLE_display_timing v1
		VK_MVK_macos_surface v3
		VK_MVK_moltenvk v32
		VK_NV_glsl_shader v1
[mvk-info] GPU device:
		model: Apple M1
		type: Integrated
		vendorID: 0x106b
		deviceID: 0xa140
		pipelineCacheUUID: C1D03328-0400-03EF-0000-000000000000
	supports the following Metal Versions, GPU's and Feature Sets:
		Metal Shading Language 2.3
		GPU Family Apple 7
		GPU Family Apple 6
		GPU Family Apple 5
		GPU Family Apple 4
		GPU Family Apple 3
		GPU Family Apple 2
		GPU Family Apple 1
		GPU Family Mac 2
		GPU Family Mac 1
		GPU Family Common 3
		GPU Family Common 2
		GPU Family Common 1
		macOS GPU Family 2 v1
		macOS GPU Family 1 v4
		macOS GPU Family 1 v3
		macOS GPU Family 1 v2
		macOS GPU Family 1 v1
[mvk-info] Created VkInstance for Vulkan version 1.1.0, as requested by app, with the following 0 Vulkan extensions enabled:
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test device::tests::device_new ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 41 filtered out; finished in 0.10s

% cargo test --features "full device_tests" --no-fail-fast
   Compiling indexmap v1.8.0
   Compiling tokio v1.14.0
   Compiling serde_json v1.0.72
   Compiling naga v0.5.0
   Compiling autograph v0.1.1 (/Users/rjzak/Downloads/autograph)
   Compiling plist v1.3.1
   Compiling envmnt v0.8.4
   Compiling gfx-hal v0.9.0
   Compiling vulkano v0.27.1
   Compiling ci_info v0.10.2
   Compiling ash-molten v0.12.0+1.1.5
   Compiling rusty-hook v0.11.2
   Compiling tokio-util v0.6.9
   Compiling tokio-native-tls v0.3.0
   Compiling h2 v0.3.9
   Compiling hyper v0.14.16
   Compiling hyper-tls v0.5.0
   Compiling reqwest v0.11.7
   Compiling downloader v0.2.6
warning: unused imports: `SliceMut`, `Slice`
 --> src/device.rs:2:14
  |
2 |     buffer::{Slice, SliceMut},
  |              ^^^^^  ^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: unused import: `bytemuck::Pod`
 --> src/device.rs:6:5
  |
6 | use bytemuck::Pod;
  |     ^^^^^^^^^^^^^

warning: unused imports: `Weak`, `drop`, `iter`, `take`, `time::Duration`
  --> src/device/engine.rs:17:5
   |
17 |     iter,
   |     ^^^^
18 |     iter::once,
19 |     mem::{drop, take, transmute},
   |           ^^^^  ^^^^
...
23 |         Arc, Weak,
   |              ^^^^
24 |     },
25 |     time::Duration,
   |     ^^^^^^^^^^^^^^

warning: unused imports: `AutoCommandBufferBuilder`, `DescriptorSetResources`, `DescriptorSetWithOffsets`, `DescriptorWrite`, `FenceSignalFuture`, `FenceWaitError`, `StdDescriptorPool`, `UnsafeDescriptorSet`, `memory::DeviceMemoryAllocError`, `now`
  --> src/device/engine.rs:39:9
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |         ^^^^^^^^^^^^^^^^^^^^^^^^
...
46 |             StdDescriptorPool,
   |             ^^^^^^^^^^^^^^^^^
47 |         },
48 |         sys::{DescriptorWrite, UnsafeDescriptorSet},
   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |                        ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
...
57 |     memory::DeviceMemoryAllocError,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |            ^^^                      ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^

warning: unused import: `Capability`
 --> src/device/shader.rs:8:13
  |
8 |     spirv::{Capability, Decoration, ExecutionMode, ExecutionModel, Op, StorageClass, Word},
  |             ^^^^^^^^^^

warning: unused import: `ModuleId`
  --> src/device.rs:26:23
   |
26 | use shader::{EntryId, ModuleId};
   |                       ^^^^^^^^

warning: unused import: `PrimaryCommandBuffer`
  --> src/device/engine.rs:39:75
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |                                                                           ^^^^^^^^^^^^^^^^^^^^

warning: unused import: `DescriptorSet`
  --> src/device/engine.rs:49:9
   |
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |         ^^^^^^^^^^^^^

warning: unused import: `GpuFuture`
  --> src/device/engine.rs:63:72
   |
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |                                                                        ^^^^^^^^^

warning: unused variable: `base`
   --> src/device.rs:460:21
    |
460 |         if let Some(base) = self.base.as_ref() {
    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
    |
    = note: `#[warn(unused_variables)]` on by default

warning: unused variable: `src`
   --> src/device/buffer.rs:606:36
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_src`

warning: unused variable: `device`
   --> src/device/buffer.rs:606:47
    |
606 |             (DynBufferBase::Device(src), Some(device)) => todo!(), // Ok(src.into_device(device).await?.into()),
    |                                               ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`

warning: unused variable: `guard`
   --> src/device/buffer.rs:942:26
    |
942 |             Self::Device(guard) => todo!(), // guard.as_slice().to_vec(),
    |                          ^^^^^ help: if this is intentional, prefix it with an underscore: `_guard`

warning: unnecessary `unsafe` block
   --> src/device/engine.rs:538:27
    |
538 |         let mut barrier = unsafe { UnsafeCommandBufferBuilderPipelineBarrier::new() };
    |                           ^^^^^^ unnecessary `unsafe` block
    |
    = note: `#[warn(unused_unsafe)]` on by default

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
  --> src/util.rs:35:21
   |
35 |             None => unreachable_unchecked(),
   |                     ^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
   |
note: the lint level is defined here
  --> src/lib.rs:1:23
   |
1  | #![warn(missing_docs, unsafe_op_in_unsafe_fn)]
   |                       ^^^^^^^^^^^^^^^^^^^^^^
   = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:159:12
    |
159 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer.rs:388:12
    |
388 |         Ok(Buffer::alloc(device, len)?.into())
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/tensor/float.rs:338:35
    |
338 |         let data = S::from_buffer(FloatBuffer::alloc(float_type, device, dim.size())?);
    |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:167:56
    |
167 |                           FloatType::F32 => Ok(Self::F32($buffer::alloc(device, len)?)),
    |                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
   --> src/buffer/float.rs:166:58
    |
166 |                           FloatType::BF16 => Ok(Self::BF16($buffer::alloc(device, len)?)),
    |                                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
...
210 | / impl_float_buffer_owned! {
211 | |     (FloatBuffer, Buffer),
212 | |     (FloatArcBuffer, ArcBuffer),
213 | |     (FloatCowBuffer<'a>, CowBuffer<'a>),
214 | | }
    | |_- in this macro invocation
    |
    = note: consult the function's documentation for information on how to avoid undefined behavior
    = note: this warning originates in the macro `impl_float_buffer_owned` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: field is never read: `descriptor_set_layout`
   --> src/device/engine.rs:528:5
    |
528 |     descriptor_set_layout: Arc<DescriptorSetLayout>,
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` on by default

warning: field is never read: `device`
   --> src/device/engine.rs:634:5
    |
634 |     device: Arc<Device>,
    |     ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `into_device`
   --> src/device/buffer.rs:262:14
    |
262 |     async fn into_device(self, device: DeviceBase) -> Result<DeviceBuffer<T>>
    |              ^^^^^^^^^^^

warning: associated function is never used: `specialization_size`
   --> src/device/shader.rs:181:19
    |
181 |     pub(super) fn specialization_size(&self) -> usize {
    |                   ^^^^^^^^^^^^^^^^^^^

warning: associated function is never used: `size`
   --> src/device/shader.rs:203:19
    |
203 |     pub(super) fn size(&self) -> usize {
    |                   ^^^^

warning: field is never read: `local_size`
   --> src/device.rs:281:5
    |
281 |     local_size: [u32; 3],
    |     ^^^^^^^^^^^^^^^^^^^^

warning: unused import: `half::bf16`
   --> src/tensor/linalg.rs:181:9
    |
181 |     use half::bf16;
    |         ^^^^^^^^^^

warning: `autograph` (lib) generated 26 warnings
warning: `autograph` (lib test) generated 27 warnings (26 duplicates)
    Finished test [unoptimized + debuginfo] target(s) in 36.74s
     Running unittests (target/debug/deps/autograph-6263cc1c4b31f23f)

running 148 tests
[mvk-info] MoltenVK version 1.1.5, supporting Vulkan version 1.1.189.
	The following 72 Vulkan extensions are supported:
		VK_KHR_16bit_storage v1
		VK_KHR_8bit_storage v1
		VK_KHR_bind_memory2 v1
		VK_KHR_create_renderpass2 v1
		VK_KHR_dedicated_allocation v3
		VK_KHR_depth_stencil_resolve v1
		VK_KHR_descriptor_update_template v1
		VK_KHR_device_group v4
		VK_KHR_device_group_creation v1
		VK_KHR_driver_properties v1
		VK_KHR_external_fence v1
		VK_KHR_external_fence_capabilities v1
		VK_KHR_external_memory v1
		VK_KHR_external_memory_capabilities v1
		VK_KHR_external_semaphore v1
		VK_KHR_external_semaphore_capabilities v1
		VK_KHR_get_memory_requirements2 v1
		VK_KHR_get_physical_device_properties2 v2
		VK_KHR_get_surface_capabilities2 v1
		VK_KHR_imageless_framebuffer v1
		VK_KHR_image_format_list v1
		VK_KHR_maintenance1 v2
		VK_KHR_maintenance2 v1
		VK_KHR_maintenance3 v1
		VK_KHR_multiview v1
		VK_KHR_portability_subset v1
		VK_KHR_push_descriptor v2
		VK_KHR_relaxed_block_layout v1
		VK_KHR_sampler_mirror_clamp_to_edge v3
		VK_KHR_sampler_ycbcr_conversion v14
		VK_KHR_shader_draw_parameters v1
		VK_KHR_shader_float16_int8 v1
		VK_KHR_shader_subgroup_extended_types v1
		VK_KHR_storage_buffer_storage_class v1
		VK_KHR_surface v25
		VK_KHR_swapchain v70
		VK_KHR_swapchain_mutable_format v1
		VK_KHR_timeline_semaphore v2
		VK_KHR_uniform_buffer_standard_layout v1
		VK_KHR_variable_pointers v1
		VK_EXT_debug_marker v4
		VK_EXT_debug_report v10
		VK_EXT_debug_utils v2
		VK_EXT_descriptor_indexing v2
		VK_EXT_fragment_shader_interlock v1
		VK_EXT_hdr_metadata v2
		VK_EXT_host_query_reset v1
		VK_EXT_image_robustness v1
		VK_EXT_inline_uniform_block v1
		VK_EXT_memory_budget v1
		VK_EXT_metal_surface v1
		VK_EXT_post_depth_coverage v1
		VK_EXT_private_data v1
		VK_EXT_robustness2 v1
		VK_EXT_scalar_block_layout v1
		VK_EXT_shader_stencil_export v1
		VK_EXT_shader_viewport_index_layer v1
		VK_EXT_subgroup_size_control v2
		VK_EXT_swapchain_colorspace v4
		VK_EXT_texel_buffer_alignment v1
		VK_EXT_texture_compression_astc_hdr v1
		VK_EXT_vertex_attribute_divisor v3
		VK_AMD_gpu_shader_half_float v2
		VK_AMD_negative_viewport_height v1
		VK_AMD_shader_image_load_store_lod v1
		VK_AMD_shader_trinary_minmax v1
		VK_IMG_format_pvrtc v1
		VK_INTEL_shader_integer_functions2 v1
		VK_GOOGLE_display_timing v1
		VK_MVK_macos_surface v3
		VK_MVK_moltenvk v32
		VK_NV_glsl_shader v1
[mvk-info] GPU device:
		model: Apple M1
		type: Integrated
		vendorID: 0x106b
		deviceID: 0xa140
		pipelineCacheUUID: C1D03328-0400-03EF-0000-000000000000
	supports the following Metal Versions, GPU's and Feature Sets:
		Metal Shading Language 2.3
		GPU Family Apple 7
		GPU Family Apple 6
		GPU Family Apple 5
		GPU Family Apple 4
		GPU Family Apple 3
		GPU Family Apple 2
		GPU Family Apple 1
		GPU Family Mac 2
		GPU Family Mac 1
		GPU Family Common 3
		GPU Family Common 2
		GPU Family Common 1
		macOS GPU Family 2 v1
		macOS GPU Family 1 v4
		macOS GPU Family 1 v3
		macOS GPU Family 1 v2
		macOS GPU Family 1 v1
[mvk-info] Created VkInstance for Vulkan version 1.1.0, as requested by app, with the following 0 Vulkan extensions enabled:
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::device_buffer_from_vec ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::device_buffer_serde ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::device_buffer_copy_from_slice ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_i64 ... ok
test buffer::tests::fill_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_bf16 ... ok
test buffer::tests::fill_i8 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::host_buffer_copy_from_slice ... ok
test buffer::tests::fill_u16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::host_buffer_serde ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_f16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_u8 ... ok
test buffer::tests::fill_u64 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_i16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::fill_f64 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
test buffer::tests::scale::f32::f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
test buffer::tests::scale::bf16::i32 ... ok
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::f32::u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::i32::i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::bf16::u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::bf16::f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::i32::u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::i32::f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::f32::i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u16::f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u16::i32 ... ok
test device::engine::tests::instance ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u32::f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test device::tests::device_new ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u32::u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u16::u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u8::i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u8::f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u8::u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test buffer::tests::scale::u32::i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::autograd::tests::cross_entropy_loss_backward_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::autograd::tests::bias_backward_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::autograd::tests::cross_entropy_loss_f32 ... FAILED
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::kmeans::tests::compute_distances_f32_m11_k5_n13 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::max_pool_2d_backward_atomic_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::autograd::tests::bias_backward_bf16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test device::shader::tests::shader_module_from_spirv ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::kmeans::tests::compute_distances_bf16_m11_k5_n13 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::relu_backward_f32 ... ok[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1

[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
test learn::neural_network::layer::tests::relu_backward_bf16 ... [mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::max_pool_2d_f32 ... ok
test learn::neural_network::layer::tests::mean_pool_2d_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::mean_pool_2d_backward_atomic_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::mean_pool_2d_backward_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::max_pool_2d_backward_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::relu_bf16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test glsl_shaders::tests::to_metal ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test learn::neural_network::layer::tests::relu_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::accuracy::tests::accuracy_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_f32_m25_k611_n6_N_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_f32_m21_k31_n41_N_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_f32_m121_k131_n141_N_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_f32_m121_k131_n141_N_T ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_f32_m121_k131_n141_T_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_f32_m121_k131_n141_T_T ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_i32_m21_k31_n41_N_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_i32_m121_k131_n141_N_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_i32_m121_k131_n141_N_T ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test rust_shaders::tests::core_to_metal ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_u32_m21_k31_n41_N_N ... ok
test tensor::ops::tests::im2col_convolution_bf16 ... ignored
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::ops::tests::col2im_convolution_f32 ... ok
test tensor::reduce::tests::atomic_add_f32 ... ignored
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmax_bf16_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmax_bf16_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmax_f32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmax_f32_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::ops::tests::im2col_convolution_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmax_i32_22x23_axis1 ... ok
test tensor::reduce::tests::tensor_argmax_i32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmax_u32_22x23_axis1 ... ok
test tensor::reduce::tests::tensor_argmax_u32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmin_bf16_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmin_bf16_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_i32_m121_k131_n141_T_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
test tensor::reduce::tests::tensor_argmin_f32_11x12_axis0 ... ok
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmin_f32_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmin_u32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmin_u32_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_sum_bf16_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_sum_bf16_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmin_i32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_argmin_i32_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_sum_f32_22x23_axis1 ... ok
test tensor::reduce::tests::tensor_sum_f32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_sum_u32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_sum_u32_22x23_axis1 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reduce::tests::tensor_sum_i32_22x23_axis1 ... ok
test tensor::reduce::tests::tensor_sum_i32_11x12_axis0 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reorder::tests::into_standard_layout_4d_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reorder::tests::into_standard_layout_6d_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_u32_m121_k131_n141_T_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_i32_m121_k131_n141_T_T ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::reorder::tests::reorder_2d_f32_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u16_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u16_bf16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u16_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_u32_m121_k131_n141_N_T ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u32_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u16_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::linalg::tests::tensor_dot_u32_m121_k131_n141_N_N ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u32_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u32_bf16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_bf16_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_bf16_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_bf16_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u8_bf16 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_i32_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_i32_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u8_f32 ... ok
test tensor::tests::scaled_cast_i32_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_u16_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_u16_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_u16_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u8_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_u32_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u32_u32 ... ok
test tensor::tests::scaled_cast_u32_i32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_u32_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::one_hot_u8_u32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_u8_f32 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::scaled_cast_u8_i32 ... ok
test tensor::tests::tensor_from_array0 ... ok
test tensor::tests::tensor_from_array1 ... ok
test tensor::tests::tensor_from_array2 ... ok
test tensor::tests::tensor_from_array3 ... ok
test tensor::tests::scaled_cast_u8_u32 ... ok
test tensor::tests::tensor_from_array4 ... ok
test tensor::tests::tensor_from_array6 ... ok
[mvk-info] Using MTLEvent for Vulkan semaphores.
[mvk-info] Created VkDevice to run on GPU Apple M1 with the following 1 Vulkan extensions enabled:
		VK_KHR_portability_subset v1
test tensor::tests::tensor_from_arrayD ... ok
test tensor::tests::tensor_serde_host ... ok
test tensor::tests::tensor_serde_device ... ok
test util::tests::size_eq ... ok
test tensor::tests::test_from_array5 ... ok
test util::tests::type_eq ... ok
test tensor::tests::scaled_cast_bf16_bf16 ... ok
test tensor::tests::scaled_cast_i32_bf16 ... ok
test tensor::tests::scaled_cast_u32_bf16 ... ok
test tensor::tests::scaled_cast_u8_bf16 ... ok
test tensor::linalg::tests::tensor_dot_u32_m121_k131_n141_T_T ... ok
test tensor::tests::scaled_cast_u16_bf16 ... ok

failures:

---- learn::neural_network::autograd::tests::cross_entropy_loss_f32 stdout ----
[src/device/engine.rs:191] physical_device.supported_features() = Features {
    acceleration_structure: false,
    acceleration_structure_capture_replay: false,
    acceleration_structure_host_commands: false,
    acceleration_structure_indirect_build: false,
    advanced_blend_coherent_operations: false,
    alpha_to_one: true,
    attachment_fragment_shading_rate: false,
    bresenham_lines: false,
    buffer_device_address: false,
    buffer_device_address_capture_replay: false,
    buffer_device_address_multi_device: false,
    color_write_enable: false,
    compute_derivative_group_linear: false,
    compute_derivative_group_quads: false,
    compute_full_subgroups: true,
    conditional_rendering: false,
    constant_alpha_color_blend_factors: true,
    cooperative_matrix: false,
    cooperative_matrix_robust_buffer_access: false,
    corner_sampled_image: false,
    coverage_reduction_mode: false,
    custom_border_color_without_format: false,
    custom_border_colors: false,
    decode_mode_shared_exponent: false,
    dedicated_allocation_image_aliasing: false,
    depth_bias_clamp: true,
    depth_bounds: false,
    depth_clamp: true,
    depth_clip_enable: false,
    descriptor_binding_acceleration_structure_update_after_bind: false,
    descriptor_binding_inline_uniform_block_update_after_bind: true,
    descriptor_binding_partially_bound: true,
    descriptor_binding_sampled_image_update_after_bind: true,
    descriptor_binding_storage_buffer_update_after_bind: true,
    descriptor_binding_storage_image_update_after_bind: true,
    descriptor_binding_storage_texel_buffer_update_after_bind: true,
    descriptor_binding_uniform_buffer_update_after_bind: true,
    descriptor_binding_uniform_texel_buffer_update_after_bind: true,
    descriptor_binding_update_unused_while_pending: true,
    descriptor_binding_variable_descriptor_count: true,
    descriptor_indexing: false,
    device_coherent_memory: false,
    device_generated_commands: false,
    device_memory_report: false,
    diagnostics_config: false,
    draw_indirect_count: false,
    draw_indirect_first_instance: true,
    dual_src_blend: true,
    events: true,
    exclusive_scissor: false,
    extended_dynamic_state: false,
    extended_dynamic_state2: false,
    extended_dynamic_state2_logic_op: false,
    extended_dynamic_state2_patch_control_points: false,
    external_memory_rdma: false,
    fill_mode_non_solid: true,
    format_a4b4g4r4: false,
    format_a4r4g4b4: false,
    fragment_density_map: false,
    fragment_density_map_deferred: false,
    fragment_density_map_dynamic: false,
    fragment_density_map_non_subsampled_images: false,
    fragment_shader_barycentric: false,
    fragment_shader_pixel_interlock: true,
    fragment_shader_sample_interlock: true,
    fragment_shader_shading_rate_interlock: false,
    fragment_shading_rate_enums: false,
    fragment_stores_and_atomics: true,
    full_draw_index_uint32: true,
    geometry_shader: false,
    geometry_streams: false,
    global_priority_query: false,
    host_query_reset: true,
    image_cube_array: true,
    image_footprint: false,
    image_view2_d_on3_d_image: false,
    image_view_format_reinterpretation: true,
    image_view_format_swizzle: true,
    imageless_framebuffer: true,
    independent_blend: true,
    index_type_uint8: false,
    inherited_conditional_rendering: false,
    inherited_queries: true,
    inherited_viewport_scissor2_d: false,
    inline_uniform_block: true,
    invocation_mask: false,
    large_points: true,
    logic_op: false,
    memory_priority: false,
    mesh_shader: false,
    multi_draw: false,
    multi_draw_indirect: true,
    multi_viewport: true,
    multisample_array_image: true,
    multiview: true,
    multiview_geometry_shader: false,
    multiview_tessellation_shader: false,
    mutable_comparison_samplers: true,
    mutable_descriptor_type: false,
    no_invocation_fragment_shading_rates: false,
    null_descriptor: false,
    occlusion_query_precise: true,
    pageable_device_local_memory: false,
    performance_counter_multiple_query_pools: false,
    performance_counter_query_pools: false,
    pipeline_creation_cache_control: false,
    pipeline_executable_info: false,
    pipeline_fragment_shading_rate: false,
    pipeline_statistics_query: false,
    point_polygons: false,
    present_id: false,
    present_wait: false,
    primitive_fragment_shading_rate: false,
    primitive_topology_list_restart: false,
    primitive_topology_patch_list_restart: false,
    private_data: true,
    protected_memory: false,
    provoking_vertex_last: false,
    ray_query: false,
    ray_tracing_motion_blur: false,
    ray_tracing_motion_blur_pipeline_trace_rays_indirect: false,
    ray_tracing_pipeline: false,
    ray_tracing_pipeline_shader_group_handle_capture_replay: false,
    ray_tracing_pipeline_shader_group_handle_capture_replay_mixed: false,
    ray_tracing_pipeline_trace_rays_indirect: false,
    ray_traversal_primitive_culling: false,
    rectangular_lines: false,
    representative_fragment_test: false,
    robust_buffer_access: true,
    robust_buffer_access2: false,
    robust_image_access: true,
    robust_image_access2: true,
    runtime_descriptor_array: true,
    sample_rate_shading: true,
    sampler_anisotropy: true,
    sampler_filter_minmax: false,
    sampler_mip_lod_bias: false,
    sampler_mirror_clamp_to_edge: false,
    sampler_ycbcr_conversion: true,
    scalar_block_layout: true,
    separate_depth_stencil_layouts: false,
    separate_stencil_mask_ref: true,
    shader_buffer_float16_atomic_add: false,
    shader_buffer_float16_atomic_min_max: false,
    shader_buffer_float16_atomics: false,
    shader_buffer_float32_atomic_add: false,
    shader_buffer_float32_atomic_min_max: false,
    shader_buffer_float32_atomics: false,
    shader_buffer_float64_atomic_add: false,
    shader_buffer_float64_atomic_min_max: false,
    shader_buffer_float64_atomics: false,
    shader_buffer_int64_atomics: false,
    shader_clip_distance: true,
    shader_cull_distance: false,
    shader_demote_to_helper_invocation: false,
    shader_device_clock: false,
    shader_draw_parameters: true,
    shader_float16: true,
    shader_float64: false,
    shader_image_float32_atomic_add: false,
    shader_image_float32_atomic_min_max: false,
    shader_image_float32_atomics: false,
    shader_image_gather_extended: true,
    shader_image_int64_atomics: false,
    shader_input_attachment_array_dynamic_indexing: true,
    shader_input_attachment_array_non_uniform_indexing: true,
    shader_int16: true,
    shader_int64: true,
    shader_int8: true,
    shader_integer_dot_product: false,
    shader_integer_functions2: true,
    shader_output_layer: false,
    shader_output_viewport_index: false,
    shader_resource_min_lod: true,
    shader_resource_residency: false,
    shader_sample_rate_interpolation_functions: true,
    shader_sampled_image_array_dynamic_indexing: true,
    shader_sampled_image_array_non_uniform_indexing: true,
    shader_shared_float16_atomic_add: false,
    shader_shared_float16_atomic_min_max: false,
    shader_shared_float16_atomics: false,
    shader_shared_float32_atomic_add: false,
    shader_shared_float32_atomic_min_max: false,
    shader_shared_float32_atomics: false,
    shader_shared_float64_atomic_add: false,
    shader_shared_float64_atomic_min_max: false,
    shader_shared_float64_atomics: false,
    shader_shared_int64_atomics: false,
    shader_sm_builtins: false,
    shader_storage_buffer_array_dynamic_indexing: true,
    shader_storage_buffer_array_non_uniform_indexing: false,
    shader_storage_image_array_dynamic_indexing: true,
    shader_storage_image_array_non_uniform_indexing: true,
    shader_storage_image_extended_formats: true,
    shader_storage_image_multisample: false,
    shader_storage_image_read_without_format: true,
    shader_storage_image_write_without_format: true,
    shader_storage_texel_buffer_array_dynamic_indexing: true,
    shader_storage_texel_buffer_array_non_uniform_indexing: true,
    shader_subgroup_clock: false,
    shader_subgroup_extended_types: true,
    shader_subgroup_uniform_control_flow: false,
    shader_terminate_invocation: false,
    shader_tessellation_and_geometry_point_size: true,
    shader_uniform_buffer_array_dynamic_indexing: true,
    shader_uniform_buffer_array_non_uniform_indexing: false,
    shader_uniform_texel_buffer_array_dynamic_indexing: true,
    shader_uniform_texel_buffer_array_non_uniform_indexing: true,
    shader_zero_initialize_workgroup_memory: false,
    shading_rate_coarse_sample_order: false,
    shading_rate_image: false,
    smooth_lines: false,
    sparse_binding: false,
    sparse_image_float32_atomic_add: false,
    sparse_image_float32_atomic_min_max: false,
    sparse_image_float32_atomics: false,
    sparse_image_int64_atomics: false,
    sparse_residency16_samples: false,
    sparse_residency2_samples: false,
    sparse_residency4_samples: false,
    sparse_residency8_samples: false,
    sparse_residency_aliased: false,
    sparse_residency_buffer: false,
    sparse_residency_image2_d: false,
    sparse_residency_image3_d: false,
    stippled_bresenham_lines: false,
    stippled_rectangular_lines: false,
    stippled_smooth_lines: false,
    storage_buffer16_bit_access: true,
    storage_buffer8_bit_access: true,
    storage_input_output16: true,
    storage_push_constant16: true,
    storage_push_constant8: true,
    subgroup_broadcast_dynamic_id: false,
    subgroup_size_control: true,
    subpass_shading: false,
    supersample_fragment_shading_rates: false,
    synchronization2: false,
    task_shader: false,
    tessellation_isolines: false,
    tessellation_point_mode: false,
    tessellation_shader: true,
    texel_buffer_alignment: true,
    texture_compression_astc_hdr: true,
    texture_compression_astc_ldr: true,
    texture_compression_bc: true,
    texture_compression_etc2: true,
    timeline_semaphore: true,
    transform_feedback: false,
    transform_feedback_preserves_provoking_vertex: false,
    triangle_fans: false,
    uniform_and_storage_buffer16_bit_access: true,
    uniform_and_storage_buffer8_bit_access: true,
    uniform_buffer_standard_layout: true,
    variable_multisample_rate: false,
    variable_pointers: true,
    variable_pointers_storage_buffer: true,
    vertex_attribute_access_beyond_stride: true,
    vertex_attribute_instance_rate_divisor: true,
    vertex_attribute_instance_rate_zero_divisor: true,
    vertex_input_dynamic_state: false,
    vertex_pipeline_stores_and_atomics: true,
    vulkan_memory_model: false,
    vulkan_memory_model_availability_visibility_chains: false,
    vulkan_memory_model_device_scope: false,
    wide_lines: false,
    workgroup_memory_explicit_layout: false,
    workgroup_memory_explicit_layout16_bit_access: false,
    workgroup_memory_explicit_layout8_bit_access: false,
    workgroup_memory_explicit_layout_scalar_block_layout: false,
    ycbcr2plane444_formats: false,
    ycbcr_image_arrays: false,
}
thread 'learn::neural_network::autograd::tests::cross_entropy_loss_f32' panicked at 'assert_relative_eq!(y_array, y_true, max_relative = 0.000_001)

    left  = [[761.26965, 663.8111, 568.35254, 474.89398, 383.43542, 293.97687, 206.51831, 121.05977, 37.601215],
 [685.14264, 596.6841, 510.22556, 425.767, 343.30847, 262.8499, 184.39136, 107.9328, 33.47425],
 [609.0157, 529.5571, 452.0986, 376.64005, 303.1815, 231.72295, 162.26439, 94.80584, 29.34729],
 [532.88885, 462.4303, 393.97174, 327.51318, 263.05466, 200.5961, 140.13754, 81.678986, 25.220432],
 [456.76187, 395.3033, 335.8448, 278.38623, 222.92767, 169.46912, 118.01056, 68.552, 21.093452],
 ...,
 [372.17633, 320.7178, 271.25925, 223.80069, 178.34213, 134.88358, 93.425026, 53.966473, 16.50792],
 [296.04938, 253.59082, 213.13226, 174.6737, 138.21515, 103.7566, 71.29805, 40.839493, 12.3809395],
 [219.92229, 186.46375, 155.00519, 125.54664, 98.08809, 72.62954, 49.17099, 27.71244, 8.253891],
 [143.79535, 119.33679, 96.87824, 76.41969, 57.961143, 41.502594, 27.044044, 14.585495, 4.1269455],
 [67.668396, 52.209846, 38.751297, 27.292747, 17.834198, 10.3756485, 4.917099, 1.4585495, 0.0]], shape=[67, 9], strides=[9, 1], layout=Cc (0x5), const ndim=2
    right = [[761.26965, 663.8111, 568.35254, 474.894, 383.43546, 293.9769, 206.51834, 121.0598, 37.601242],
 [685.14264, 596.68414, 510.2256, 425.76706, 343.3085, 262.8499, 184.39137, 107.93283, 33.474277],
 [609.0157, 529.5572, 452.09863, 376.64008, 303.18152, 231.72296, 162.2644, 94.80586, 29.347311],
 [532.88873, 462.4302, 393.97168, 327.51312, 263.05457, 200.596, 140.13745, 81.6789, 25.220345],
 [456.76178, 395.30325, 335.8447, 278.38614, 222.9276, 169.46902, 118.01048, 68.55193, 21.09338],
 ...,
 [372.17627, 320.71774, 271.2592, 223.80063, 178.34207, 134.88351, 93.424965, 53.966415, 16.507862],
 [296.0493, 253.59076, 213.13222, 174.67366, 138.2151, 103.756546, 71.298, 40.83945, 12.380897],
 [219.92233, 186.46379, 155.00525, 125.54669, 98.08814, 72.629585, 49.171032, 27.712484, 8.253931],
 [143.79538, 119.33683, 96.87828, 76.41972, 57.961174, 41.50262, 27.044067, 14.585518, 4.1269655],
 [67.66841, 52.20986, 38.751312, 27.292759, 17.834208, 10.375655, 4.9171033, 1.4585518, 0.0]], shape=[67, 9], strides=[9, 1], layout=Cc (0x5), const ndim=2

', src/learn/neural_network/autograd.rs:1369:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

failures:
    learn::neural_network::autograd::tests::cross_entropy_loss_f32

test result: FAILED. 145 passed; 1 failed; 2 ignored; 0 measured; 0 filtered out; finished in 5.21s

   Doc-tests autograph

running 2 tests
test src/lib.rs - buffer (line 62) - compile ... ok
test src/learn.rs - learn::neural_network (line 26) - compile ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s

Looks like potentially rounding error. I changed it to print everything out to make sure.

% cargo test --features device_tests device_new
   Compiling autograph v0.1.1 (/Users/rjzak/Downloads/autograph)
warning: unused imports: `SliceMut`, `Slice`
 --> src/device.rs:2:14
  |
2 |     buffer::{Slice, SliceMut},
  |              ^^^^^  ^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: unused import: `bytemuck::Pod`
 --> src/device.rs:6:5
  |
6 | use bytemuck::Pod;
  |     ^^^^^^^^^^^^^

warning: unused imports: `Weak`, `drop`, `iter`, `take`, `time::Duration`
  --> src/device/engine.rs:17:5
   |
17 |     iter,
   |     ^^^^
18 |     iter::once,
19 |     mem::{drop, take, transmute},
   |           ^^^^  ^^^^
...
23 |         Arc, Weak,
   |              ^^^^
24 |     },
25 |     time::Duration,
   |     ^^^^^^^^^^^^^^

warning: unused imports: `AutoCommandBufferBuilder`, `DescriptorSetResources`, `DescriptorSetWithOffsets`, `DescriptorWrite`, `FenceSignalFuture`, `FenceWaitError`, `StdDescriptorPool`, `UnsafeDescriptorSet`, `memory::DeviceMemoryAllocError`, `now`
  --> src/device/engine.rs:39:9
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |         ^^^^^^^^^^^^^^^^^^^^^^^^
...
46 |             StdDescriptorPool,
   |             ^^^^^^^^^^^^^^^^^
47 |         },
48 |         sys::{DescriptorWrite, UnsafeDescriptorSet},
   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
49 |         DescriptorSet, DescriptorSetResources, DescriptorSetWithOffsets,
   |                        ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
...
57 |     memory::DeviceMemoryAllocError,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
63 |     sync::{now, AccessFlags, Fence, FenceSignalFuture, FenceWaitError, GpuFuture, PipelineStages},
   |            ^^^                      ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^

warning: unused import: `Capability`
 --> src/device/shader.rs:8:13
  |
8 |     spirv::{Capability, Decoration, ExecutionMode, ExecutionModel, Op, StorageClass, Word},
  |             ^^^^^^^^^^

warning: unused import: `ModuleId`
  --> src/device.rs:26:23
   |
26 | use shader::{EntryId, ModuleId};
   |                       ^^^^^^^^

warning: unused import: `PrimaryCommandBuffer`
  --> src/device/engine.rs:39:75
   |
39 |         AutoCommandBufferBuilder, CommandBufferLevel, CommandBufferUsage, PrimaryCommandBuffer,
   |                                                                           ^^^^^^^^^^^^^^^^^^^^

warning: unused import: `DescriptorSet`
  --> src/device/engine.rs:49:9
   |