@@ -5,9 +5,9 @@ use ash::{
5
5
use bevy_xr:: presentation:: XrGraphicsContext ;
6
6
use openxr as xr;
7
7
use std:: { error:: Error , ffi:: CString , sync:: Arc } ;
8
- // use wgpu_hal as hal;
9
- // #[cfg(windows)]
10
- // use winapi::um::d3d11::ID3D11Device;
8
+ use wgpu_hal as hal;
9
+ #[ cfg( windows) ]
10
+ use winapi:: um:: d3d11:: ID3D11Device ;
11
11
12
12
#[ derive( Clone ) ]
13
13
pub enum GraphicsContextHandles {
@@ -51,25 +51,25 @@ pub fn create_graphics_context(
51
51
. engine_version ( 0 )
52
52
. api_version ( vk_version) ;
53
53
54
- // let mut flags = hal::InstanceFlags::empty();
55
- // if cfg!(debug_assertions) {
56
- // flags |= hal::InstanceFlags::VALIDATION;
57
- // flags |= hal::InstanceFlags::DEBUG;
58
- // }
59
-
60
- // let instance_extensions = <hal::api::Vulkan as hal::Api>::Instance::required_extensions(
61
- // &vk_entry, vk_version, flags,
62
- // )
63
- // .map_err(Box::new)?;
64
- // let mut instance_extensions_ptrs = instance_extensions
65
- // .iter()
66
- // .map(|x| x.as_ptr())
67
- // .collect::<Vec<_>>();
68
- let mut instance_extensions_ptrs = vec ! [ ] ;
54
+ let mut flags = hal:: InstanceFlags :: empty ( ) ;
55
+ if cfg ! ( debug_assertions) {
56
+ flags |= hal:: InstanceFlags :: VALIDATION ;
57
+ flags |= hal:: InstanceFlags :: DEBUG ;
58
+ }
59
+
60
+ let instance_extensions = <hal:: api:: Vulkan as hal:: Api >:: Instance :: required_extensions (
61
+ & vk_entry, vk_version, flags,
62
+ )
63
+ . map_err ( Box :: new) ?;
64
+ let mut instance_extensions_ptrs = instance_extensions
65
+ . iter ( )
66
+ . map ( |x| x. as_ptr ( ) )
67
+ . collect :: < Vec < _ > > ( ) ;
68
+ // let mut instance_extensions_ptrs = vec![];
69
69
70
70
let vk_instance = if vulkan_ext2 {
71
- let vk_instance = unsafe {
72
- instance
71
+ unsafe {
72
+ let vk_instance = instance
73
73
. create_vulkan_instance (
74
74
system,
75
75
std:: mem:: transmute ( vk_entry. static_fn ( ) . get_instance_proc_addr ) ,
@@ -79,10 +79,8 @@ pub fn create_graphics_context(
79
79
as * const _ as * const _ ,
80
80
)
81
81
. map_err ( Box :: new) ?
82
- . map_err ( |e| Box :: new ( vk:: Result :: from_raw ( e) ) ) ?
83
- } ;
82
+ . map_err ( |e| Box :: new ( vk:: Result :: from_raw ( e) ) ) ?;
84
83
85
- unsafe {
86
84
ash:: Instance :: load (
87
85
vk_entry. static_fn ( ) ,
88
86
vk:: Instance :: from_raw ( vk_instance as _ ) ,
@@ -109,26 +107,26 @@ pub fn create_graphics_context(
109
107
. map_err ( Box :: new) ?
110
108
}
111
109
} ;
112
- // let hal_instance = unsafe {
113
- // <hal::api::Vulkan as hal::Api>::Instance::from_raw(
114
- // vk_entry.clone(),
115
- // vk_instance.clone(),
116
- // vk_version,
117
- // instance_extensions,
118
- // flags,
119
- // Box::new(instance.clone()),
120
- // )
121
- // .map_err(Box::new)?
122
- // };
110
+ let hal_instance = unsafe {
111
+ <hal:: api:: Vulkan as hal:: Api >:: Instance :: from_raw (
112
+ vk_entry. clone ( ) ,
113
+ vk_instance. clone ( ) ,
114
+ vk_version,
115
+ instance_extensions,
116
+ flags,
117
+ Box :: new ( instance. clone ( ) ) ,
118
+ )
119
+ . map_err ( Box :: new) ?
120
+ } ;
123
121
124
122
let vk_physical_device = vk:: PhysicalDevice :: from_raw (
125
123
instance
126
124
. vulkan_graphics_device ( system, vk_instance. handle ( ) . as_raw ( ) as _ )
127
125
. map_err ( Box :: new) ? as _ ,
128
126
) ;
129
- // let hal_exposed_adapter = hal_instance
130
- // .expose_adapter(vk_physical_device)
131
- // .ok_or_else(|| Box::new(AdapterError))?;
127
+ let hal_exposed_adapter = hal_instance
128
+ . expose_adapter ( vk_physical_device)
129
+ . ok_or_else ( || Box :: new ( AdapterError ) ) ?;
132
130
133
131
let queue_family_index = unsafe {
134
132
vk_instance
@@ -146,18 +144,18 @@ pub fn create_graphics_context(
146
144
} ;
147
145
let queue_index = 0 ;
148
146
149
- // let device_extensions = hal_exposed_adapter
150
- // .adapter
151
- // .required_device_extensions(device_descriptor.features);
152
- // let mut device_extensions_ptrs = device_extensions
153
- // .iter()
154
- // .map(|x| x.as_ptr())
155
- // .collect::<Vec<_>>();
156
- let mut device_extensions_ptrs = vec ! [ ] ;
147
+ let device_extensions = hal_exposed_adapter
148
+ . adapter
149
+ . required_device_extensions ( device_descriptor. features ) ;
150
+ let mut device_extensions_ptrs = device_extensions
151
+ . iter ( )
152
+ . map ( |x| x. as_ptr ( ) )
153
+ . collect :: < Vec < _ > > ( ) ;
154
+ // let mut device_extensions_ptrs = vec![];
157
155
158
- // let mut physical_features = hal_exposed_adapter
159
- // .adapter
160
- // .physical_device_features(&device_extensions, device_descriptor.features);
156
+ let mut physical_features = hal_exposed_adapter
157
+ . adapter
158
+ . physical_device_features ( & device_extensions, device_descriptor. features ) ;
161
159
162
160
let family_info = vk:: DeviceQueueCreateInfo :: builder ( )
163
161
. queue_family_index ( queue_family_index)
@@ -169,7 +167,7 @@ pub fn create_graphics_context(
169
167
let info = vk:: DeviceCreateInfo :: builder ( )
170
168
. queue_create_infos ( & family_infos)
171
169
. enabled_extension_names ( & device_extensions_ptrs) ;
172
- // let info = physical_features.add_to_device_create_builder(info).build();
170
+ let info = physical_features. add_to_device_create_builder ( info) . build ( ) ;
173
171
174
172
unsafe {
175
173
let vk_device = instance
@@ -197,25 +195,25 @@ pub fn create_graphics_context(
197
195
let info = vk:: DeviceCreateInfo :: builder ( )
198
196
. queue_create_infos ( & family_infos)
199
197
. enabled_extension_names ( & device_extensions_ptrs) ;
200
- // let info = physical_features.add_to_device_create_builder(info).build();
198
+ let info = physical_features. add_to_device_create_builder ( info) . build ( ) ;
201
199
202
200
unsafe {
203
201
vk_instance
204
202
. create_device ( vk_physical_device, & info, None )
205
203
. map_err ( Box :: new) ?
206
204
}
207
205
} ;
208
- // let hal_device = unsafe {
209
- // hal_exposed_adapter
210
- // .adapter
211
- // .device_from_raw(
212
- // vk_device.clone(),
213
- // &device_extensions,
214
- // queue_family_index,
215
- // queue_index,
216
- // )
217
- // .map_err(Box::new)?
218
- // };
206
+ let hal_device = unsafe {
207
+ hal_exposed_adapter
208
+ . adapter
209
+ . device_from_raw (
210
+ vk_device. clone ( ) ,
211
+ & device_extensions,
212
+ queue_family_index,
213
+ queue_index,
214
+ )
215
+ . map_err ( Box :: new) ?
216
+ } ;
219
217
220
218
// let wgpu_instance = unsafe { wgpu::Instance::from_hal::<hal::api::Vulkan>(hal_instance) };
221
219
// let wgpu_adapter = unsafe { wgpu_instance.adapter_from_hal(hal_exposed_adapter) };
0 commit comments