@@ -84,12 +84,7 @@ impl Global {
84
84
85
85
let device = & cmd_buf. device ;
86
86
87
- if !device
88
- . features
89
- . contains ( Features :: EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE )
90
- {
91
- return Err ( BuildAccelerationStructureError :: MissingFeature ) ;
92
- }
87
+ device. require_features ( Features :: EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE ) ?;
93
88
94
89
let build_command_index = NonZeroU64 :: new (
95
90
device
@@ -200,18 +195,13 @@ impl Global {
200
195
let mut tlas_buf_storage = Vec :: new ( ) ;
201
196
202
197
for entry in tlas_iter {
203
- let instance_buffer = match hub. buffers . get ( entry. instance_buffer_id ) . get ( ) {
204
- Ok ( buffer) => buffer,
205
- Err ( _) => {
206
- return Err ( BuildAccelerationStructureError :: InvalidBufferId ) ;
207
- }
208
- } ;
198
+ let instance_buffer = hub. buffers . get ( entry. instance_buffer_id ) . get ( ) ?;
209
199
let data = cmd_buf_data. trackers . buffers . set_single (
210
200
& instance_buffer,
211
201
BufferUses :: BOTTOM_LEVEL_ACCELERATION_STRUCTURE_INPUT ,
212
202
) ;
213
203
tlas_buf_storage. push ( TlasBufferStore {
214
- buffer : instance_buffer. clone ( ) ,
204
+ buffer : instance_buffer,
215
205
transition : data,
216
206
entry : entry. clone ( ) ,
217
207
} ) ;
@@ -222,14 +212,9 @@ impl Global {
222
212
let instance_buffer = {
223
213
let ( instance_buffer, instance_pending) =
224
214
( & mut tlas_buf. buffer , & mut tlas_buf. transition ) ;
225
- let instance_raw = instance_buffer. raw . get ( & snatch_guard) . ok_or (
226
- BuildAccelerationStructureError :: InvalidBuffer ( instance_buffer. error_ident ( ) ) ,
227
- ) ?;
228
- if !instance_buffer. usage . contains ( BufferUsages :: TLAS_INPUT ) {
229
- return Err ( BuildAccelerationStructureError :: MissingTlasInputUsageFlag (
230
- instance_buffer. error_ident ( ) ,
231
- ) ) ;
232
- }
215
+ let instance_raw = instance_buffer. try_raw ( & snatch_guard) ?;
216
+ instance_buffer. check_usage ( BufferUsages :: TLAS_INPUT ) ?;
217
+
233
218
if let Some ( barrier) = instance_pending
234
219
. take ( )
235
220
. map ( |pending| pending. into_hal ( instance_buffer, & snatch_guard) )
@@ -239,11 +224,7 @@ impl Global {
239
224
instance_raw
240
225
} ;
241
226
242
- let tlas = hub
243
- . tlas_s
244
- . get ( entry. tlas_id )
245
- . get ( )
246
- . map_err ( |_| BuildAccelerationStructureError :: InvalidTlasId ) ?;
227
+ let tlas = hub. tlas_s . get ( entry. tlas_id ) . get ( ) ?;
247
228
cmd_buf_data. trackers . tlas_s . set_single ( tlas. clone ( ) ) ;
248
229
if let Some ( queue) = device. get_queue ( ) {
249
230
queue. pending_writes . lock ( ) . insert_tlas ( & tlas) ;
@@ -267,7 +248,7 @@ impl Global {
267
248
tlas,
268
249
entries : hal:: AccelerationStructureEntries :: Instances (
269
250
hal:: AccelerationStructureInstances {
270
- buffer : Some ( instance_buffer. as_ref ( ) ) ,
251
+ buffer : Some ( instance_buffer) ,
271
252
offset : 0 ,
272
253
count : entry. instance_count ,
273
254
} ,
@@ -307,9 +288,7 @@ impl Global {
307
288
mode : hal:: AccelerationStructureBuildMode :: Build ,
308
289
flags : tlas. flags ,
309
290
source_acceleration_structure : None ,
310
- destination_acceleration_structure : tlas. raw ( & snatch_guard) . ok_or (
311
- BuildAccelerationStructureError :: InvalidTlas ( tlas. error_ident ( ) ) ,
312
- ) ?,
291
+ destination_acceleration_structure : tlas. try_raw ( & snatch_guard) ?,
313
292
scratch_buffer : scratch_buffer. raw ( ) ,
314
293
scratch_buffer_offset : * scratch_buffer_offset,
315
294
} )
@@ -374,12 +353,7 @@ impl Global {
374
353
375
354
let device = & cmd_buf. device ;
376
355
377
- if !device
378
- . features
379
- . contains ( Features :: EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE )
380
- {
381
- return Err ( BuildAccelerationStructureError :: MissingFeature ) ;
382
- }
356
+ device. require_features ( Features :: EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE ) ?;
383
357
384
358
let build_command_index = NonZeroU64 :: new (
385
359
device
@@ -512,17 +486,13 @@ impl Global {
512
486
let mut tlas_lock_store = Vec :: < ( Option < TlasPackage > , Arc < Tlas > ) > :: new ( ) ;
513
487
514
488
for package in tlas_iter {
515
- let tlas = hub
516
- . tlas_s
517
- . get ( package. tlas_id )
518
- . get ( )
519
- . map_err ( |_| BuildAccelerationStructureError :: InvalidTlasId ) ?;
489
+ let tlas = hub. tlas_s . get ( package. tlas_id ) . get ( ) ?;
520
490
if let Some ( queue) = device. get_queue ( ) {
521
491
queue. pending_writes . lock ( ) . insert_tlas ( & tlas) ;
522
492
}
523
493
cmd_buf_data. trackers . tlas_s . set_single ( tlas. clone ( ) ) ;
524
494
525
- tlas_lock_store. push ( ( Some ( package) , tlas. clone ( ) ) )
495
+ tlas_lock_store. push ( ( Some ( package) , tlas) )
526
496
}
527
497
528
498
let mut scratch_buffer_tlas_size = 0 ;
@@ -549,12 +519,7 @@ impl Global {
549
519
tlas. error_ident ( ) ,
550
520
) ) ;
551
521
}
552
- let blas = hub
553
- . blas_s
554
- . get ( instance. blas_id )
555
- . get ( )
556
- . map_err ( |_| BuildAccelerationStructureError :: InvalidBlasIdForInstance ) ?
557
- . clone ( ) ;
522
+ let blas = hub. blas_s . get ( instance. blas_id ) . get ( ) ?;
558
523
559
524
cmd_buf_data. trackers . blas_s . set_single ( blas. clone ( ) ) ;
560
525
@@ -569,7 +534,7 @@ impl Global {
569
534
dependencies. push ( blas. clone ( ) ) ;
570
535
571
536
cmd_buf_data. blas_actions . push ( BlasAction {
572
- blas : blas . clone ( ) ,
537
+ blas,
573
538
kind : crate :: ray_tracing:: BlasActionKind :: Use ,
574
539
} ) ;
575
540
}
@@ -642,13 +607,7 @@ impl Global {
642
607
mode : hal:: AccelerationStructureBuildMode :: Build ,
643
608
flags : tlas. flags ,
644
609
source_acceleration_structure : None ,
645
- destination_acceleration_structure : tlas
646
- . raw
647
- . get ( & snatch_guard)
648
- . ok_or ( BuildAccelerationStructureError :: InvalidTlas (
649
- tlas. error_ident ( ) ,
650
- ) ) ?
651
- . as_ref ( ) ,
610
+ destination_acceleration_structure : tlas. try_raw ( & snatch_guard) ?,
652
611
scratch_buffer : scratch_buffer. raw ( ) ,
653
612
scratch_buffer_offset : * scratch_buffer_offset,
654
613
} )
@@ -828,9 +787,7 @@ impl CommandBufferMutable {
828
787
action. tlas . error_ident ( ) ,
829
788
) ) ;
830
789
}
831
- if blas. raw . get ( snatch_guard) . is_none ( ) {
832
- return Err ( ValidateTlasActionsError :: InvalidBlas ( blas. error_ident ( ) ) ) ;
833
- }
790
+ blas. try_raw ( snatch_guard) ?;
834
791
}
835
792
}
836
793
}
@@ -850,11 +807,7 @@ fn iter_blas<'a>(
850
807
) -> Result < ( ) , BuildAccelerationStructureError > {
851
808
let mut temp_buffer = Vec :: new ( ) ;
852
809
for entry in blas_iter {
853
- let blas = hub
854
- . blas_s
855
- . get ( entry. blas_id )
856
- . get ( )
857
- . map_err ( |_| BuildAccelerationStructureError :: InvalidBlasId ) ?;
810
+ let blas = hub. blas_s . get ( entry. blas_id ) . get ( ) ?;
858
811
cmd_buf_data. trackers . blas_s . set_single ( blas. clone ( ) ) ;
859
812
if let Some ( queue) = device. get_queue ( ) {
860
813
queue. pending_writes . lock ( ) . insert_blas ( & blas) ;
@@ -937,19 +890,13 @@ fn iter_blas<'a>(
937
890
blas. error_ident ( ) ,
938
891
) ) ;
939
892
}
940
- let vertex_buffer = match hub. buffers . get ( mesh. vertex_buffer ) . get ( ) {
941
- Ok ( buffer) => buffer,
942
- Err ( _) => return Err ( BuildAccelerationStructureError :: InvalidBufferId ) ,
943
- } ;
893
+ let vertex_buffer = hub. buffers . get ( mesh. vertex_buffer ) . get ( ) ?;
944
894
let vertex_pending = cmd_buf_data. trackers . buffers . set_single (
945
895
& vertex_buffer,
946
896
BufferUses :: BOTTOM_LEVEL_ACCELERATION_STRUCTURE_INPUT ,
947
897
) ;
948
898
let index_data = if let Some ( index_id) = mesh. index_buffer {
949
- let index_buffer = match hub. buffers . get ( index_id) . get ( ) {
950
- Ok ( buffer) => buffer,
951
- Err ( _) => return Err ( BuildAccelerationStructureError :: InvalidBufferId ) ,
952
- } ;
899
+ let index_buffer = hub. buffers . get ( index_id) . get ( ) ?;
953
900
if mesh. index_buffer_offset . is_none ( )
954
901
|| mesh. size . index_count . is_none ( )
955
902
|| mesh. size . index_count . is_none ( )
@@ -962,15 +909,12 @@ fn iter_blas<'a>(
962
909
& index_buffer,
963
910
BufferUses :: BOTTOM_LEVEL_ACCELERATION_STRUCTURE_INPUT ,
964
911
) ;
965
- Some ( ( index_buffer. clone ( ) , data) )
912
+ Some ( ( index_buffer, data) )
966
913
} else {
967
914
None
968
915
} ;
969
916
let transform_data = if let Some ( transform_id) = mesh. transform_buffer {
970
- let transform_buffer = match hub. buffers . get ( transform_id) . get ( ) {
971
- Ok ( buffer) => buffer,
972
- Err ( _) => return Err ( BuildAccelerationStructureError :: InvalidBufferId ) ,
973
- } ;
917
+ let transform_buffer = hub. buffers . get ( transform_id) . get ( ) ?;
974
918
if mesh. transform_buffer_offset . is_none ( ) {
975
919
return Err ( BuildAccelerationStructureError :: MissingAssociatedData (
976
920
transform_buffer. error_ident ( ) ,
@@ -985,7 +929,7 @@ fn iter_blas<'a>(
985
929
None
986
930
} ;
987
931
temp_buffer. push ( TriangleBufferStore {
988
- vertex_buffer : vertex_buffer . clone ( ) ,
932
+ vertex_buffer,
989
933
vertex_transition : vertex_pending,
990
934
index_buffer_transition : index_data,
991
935
transform_buffer_transition : transform_data,
@@ -995,7 +939,7 @@ fn iter_blas<'a>(
995
939
}
996
940
997
941
if let Some ( last) = temp_buffer. last_mut ( ) {
998
- last. ending_blas = Some ( blas. clone ( ) ) ;
942
+ last. ending_blas = Some ( blas) ;
999
943
buf_storage. append ( & mut temp_buffer) ;
1000
944
}
1001
945
}
@@ -1020,14 +964,9 @@ fn iter_buffers<'a, 'b>(
1020
964
let mesh = & buf. geometry ;
1021
965
let vertex_buffer = {
1022
966
let vertex_buffer = buf. vertex_buffer . as_ref ( ) ;
1023
- let vertex_raw = vertex_buffer. raw . get ( snatch_guard) . ok_or (
1024
- BuildAccelerationStructureError :: InvalidBuffer ( vertex_buffer. error_ident ( ) ) ,
1025
- ) ?;
1026
- if !vertex_buffer. usage . contains ( BufferUsages :: BLAS_INPUT ) {
1027
- return Err ( BuildAccelerationStructureError :: MissingBlasInputUsageFlag (
1028
- vertex_buffer. error_ident ( ) ,
1029
- ) ) ;
1030
- }
967
+ let vertex_raw = vertex_buffer. try_raw ( snatch_guard) ?;
968
+ vertex_buffer. check_usage ( BufferUsages :: BLAS_INPUT ) ?;
969
+
1031
970
if let Some ( barrier) = buf
1032
971
. vertex_transition
1033
972
. take ( )
@@ -1047,10 +986,7 @@ fn iter_buffers<'a, 'b>(
1047
986
let vertex_buffer_offset = mesh. first_vertex as u64 * mesh. vertex_stride ;
1048
987
cmd_buf_data. buffer_memory_init_actions . extend (
1049
988
vertex_buffer. initialization_status . read ( ) . create_action (
1050
- & hub. buffers
1051
- . get ( mesh. vertex_buffer )
1052
- . get ( )
1053
- . map_err ( |_| BuildAccelerationStructureError :: InvalidBufferId ) ?,
989
+ & hub. buffers . get ( mesh. vertex_buffer ) . get ( ) ?,
1054
990
vertex_buffer_offset
1055
991
..( vertex_buffer_offset
1056
992
+ mesh. size . vertex_count as u64 * mesh. vertex_stride ) ,
@@ -1062,14 +998,9 @@ fn iter_buffers<'a, 'b>(
1062
998
let index_buffer = if let Some ( ( ref mut index_buffer, ref mut index_pending) ) =
1063
999
buf. index_buffer_transition
1064
1000
{
1065
- let index_raw = index_buffer. raw . get ( snatch_guard) . ok_or (
1066
- BuildAccelerationStructureError :: InvalidBuffer ( index_buffer. error_ident ( ) ) ,
1067
- ) ?;
1068
- if !index_buffer. usage . contains ( BufferUsages :: BLAS_INPUT ) {
1069
- return Err ( BuildAccelerationStructureError :: MissingBlasInputUsageFlag (
1070
- index_buffer. error_ident ( ) ,
1071
- ) ) ;
1072
- }
1001
+ let index_raw = index_buffer. try_raw ( snatch_guard) ?;
1002
+ index_buffer. check_usage ( BufferUsages :: BLAS_INPUT ) ?;
1003
+
1073
1004
if let Some ( barrier) = index_pending
1074
1005
. take ( )
1075
1006
. map ( |pending| pending. into_hal ( index_buffer, snatch_guard) )
@@ -1125,14 +1056,9 @@ fn iter_buffers<'a, 'b>(
1125
1056
transform_buffer. error_ident ( ) ,
1126
1057
) ) ;
1127
1058
}
1128
- let transform_raw = transform_buffer. raw . get ( snatch_guard) . ok_or (
1129
- BuildAccelerationStructureError :: InvalidBuffer ( transform_buffer. error_ident ( ) ) ,
1130
- ) ?;
1131
- if !transform_buffer. usage . contains ( BufferUsages :: BLAS_INPUT ) {
1132
- return Err ( BuildAccelerationStructureError :: MissingBlasInputUsageFlag (
1133
- transform_buffer. error_ident ( ) ,
1134
- ) ) ;
1135
- }
1059
+ let transform_raw = transform_buffer. try_raw ( snatch_guard) ?;
1060
+ transform_buffer. check_usage ( BufferUsages :: BLAS_INPUT ) ?;
1061
+
1136
1062
if let Some ( barrier) = transform_pending
1137
1063
. take ( )
1138
1064
. map ( |pending| pending. into_hal ( transform_buffer, snatch_guard) )
@@ -1166,7 +1092,7 @@ fn iter_buffers<'a, 'b>(
1166
1092
} ;
1167
1093
1168
1094
let triangles = hal:: AccelerationStructureTriangles {
1169
- vertex_buffer : Some ( vertex_buffer. as_ref ( ) ) ,
1095
+ vertex_buffer : Some ( vertex_buffer) ,
1170
1096
vertex_format : mesh. size . vertex_format ,
1171
1097
first_vertex : mesh. first_vertex ,
1172
1098
vertex_count : mesh. size . vertex_count ,
@@ -1175,13 +1101,13 @@ fn iter_buffers<'a, 'b>(
1175
1101
dyn hal:: DynBuffer ,
1176
1102
> {
1177
1103
format : mesh. size . index_format . unwrap ( ) ,
1178
- buffer : Some ( index_buffer. as_ref ( ) ) ,
1104
+ buffer : Some ( index_buffer) ,
1179
1105
offset : mesh. index_buffer_offset . unwrap ( ) as u32 ,
1180
1106
count : mesh. size . index_count . unwrap ( ) ,
1181
1107
} ) ,
1182
1108
transform : transform_buffer. map ( |transform_buffer| {
1183
1109
hal:: AccelerationStructureTriangleTransform {
1184
- buffer : transform_buffer. as_ref ( ) ,
1110
+ buffer : transform_buffer,
1185
1111
offset : mesh. transform_buffer_offset . unwrap ( ) as u32 ,
1186
1112
}
1187
1113
} ) ,
@@ -1231,13 +1157,7 @@ fn map_blas<'a>(
1231
1157
mode : hal:: AccelerationStructureBuildMode :: Build ,
1232
1158
flags : blas. flags ,
1233
1159
source_acceleration_structure : None ,
1234
- destination_acceleration_structure : blas
1235
- . raw
1236
- . get ( snatch_guard)
1237
- . ok_or ( BuildAccelerationStructureError :: InvalidBlas (
1238
- blas. error_ident ( ) ,
1239
- ) ) ?
1240
- . as_ref ( ) ,
1160
+ destination_acceleration_structure : blas. try_raw ( snatch_guard) ?,
1241
1161
scratch_buffer,
1242
1162
scratch_buffer_offset : * scratch_buffer_offset,
1243
1163
} )
0 commit comments