@@ -46,22 +46,28 @@ where
4646 }
4747}
4848
49- struct CStrStaticPtr ( [ * const std:: os:: raw:: c_char ; 1 ] ) ;
49+ struct CStrStaticPtr < const N : usize > ( [ * const std:: os:: raw:: c_char ; N ] ) ;
5050
51- impl core:: ops:: Deref for CStrStaticPtr {
52- type Target = [ * const std:: os:: raw:: c_char ; 1 ] ;
51+ impl < const N : usize > core:: ops:: Deref for CStrStaticPtr < N > {
52+ type Target = [ * const std:: os:: raw:: c_char ; N ] ;
5353
5454 fn deref ( & self ) -> & Self :: Target {
5555 & self . 0
5656 }
5757}
5858
59- unsafe impl Sync for CStrStaticPtr { }
59+ unsafe impl < const N : usize > Sync for CStrStaticPtr < N > { }
6060
6161const VK_LOADER_DEBUG : & str = "VK_LOADER_DEBUG" ;
6262const LAYER_KHRONOS_VALIDATION : & CStr = c_str ! ( "VK_LAYER_KHRONOS_validation" ) ;
63- static LAYER_KHRONOS_VALIDATION_ARRAY : CStrStaticPtr =
63+ static LAYER_KHRONOS_VALIDATION_ARRAY : CStrStaticPtr < 1 > =
6464 CStrStaticPtr ( [ LAYER_KHRONOS_VALIDATION . as_ptr ( ) ] ) ;
65+
66+ // erupt CreateInfoBuilder's has problem without passing enabled_extensions argument,
67+ // https://github.com/GpuZelenograd/memtest_vulkan/issues/53
68+ // Workaround it by explicitly passing empty array
69+ static NO_EXTENSIONS_ARRAY : CStrStaticPtr < 0 > = CStrStaticPtr ( [ ] ) ;
70+
6571const GB : f32 = ( 1024 * 1024 * 1024 ) as f32 ;
6672const READ_SHADER : & [ u32 ] = memtest_vulkan_build:: compiled_vk_compute_spirv!(
6773 r#"
@@ -593,8 +599,9 @@ fn prepare_and_test_device<Writer: std::io::Write>(
593599 . queue_priorities( & [ 1.0 ] ) ,
594600 ] ;
595601
596- let device_create_info =
597- vk:: DeviceCreateInfoBuilder :: new ( ) . queue_create_infos ( & queue_create_info) ;
602+ let device_create_info = vk:: DeviceCreateInfoBuilder :: new ( )
603+ . enabled_extension_names ( & * NO_EXTENSIONS_ARRAY )
604+ . queue_create_infos ( & queue_create_info) ;
598605
599606 let device =
600607 match unsafe { DeviceLoader :: new ( instance, selected. physical_device , & device_create_info) }
@@ -1316,7 +1323,9 @@ fn load_instance<Writer: std::io::Write>(
13161323 let simple_instance_try = unsafe {
13171324 InstanceLoader :: new (
13181325 & entry,
1319- & vk:: InstanceCreateInfoBuilder :: new ( ) . application_info ( & app_info) ,
1326+ & vk:: InstanceCreateInfoBuilder :: new ( )
1327+ . enabled_extension_names ( & * NO_EXTENSIONS_ARRAY )
1328+ . application_info ( & app_info) ,
13201329 )
13211330 }
13221331 . err_as_str_context ( "instance. Try specifying icd.json via VK_DRIVER_FILES env var" ) ;
0 commit comments