@@ -52,14 +52,14 @@ pub(crate) fn create_buffer_resource(
52
52
device : & crate :: dx12:: Device ,
53
53
desc : & crate :: BufferDescriptor ,
54
54
raw_desc : Direct3D12 :: D3D12_RESOURCE_DESC ,
55
- resource : & mut Option < Direct3D12 :: ID3D12Resource > ,
56
- ) -> Result < Option < AllocationWrapper > , crate :: DeviceError > {
55
+ ) -> Result < ( Direct3D12 :: ID3D12Resource , Option < AllocationWrapper > ) , crate :: DeviceError > {
57
56
let is_cpu_read = desc. usage . contains ( crate :: BufferUses :: MAP_READ ) ;
58
57
let is_cpu_write = desc. usage . contains ( crate :: BufferUses :: MAP_WRITE ) ;
59
58
60
59
// Workaround for Intel Xe drivers
61
60
if !device. private_caps . suballocation_supported {
62
- return create_committed_buffer_resource ( device, desc, raw_desc, resource) . map ( |( ) | None ) ;
61
+ return create_committed_buffer_resource ( device, desc, raw_desc)
62
+ . map ( |resource| ( resource, None ) ) ;
63
63
}
64
64
65
65
let location = match ( is_cpu_read, is_cpu_write) {
@@ -80,6 +80,7 @@ pub(crate) fn create_buffer_resource(
80
80
location,
81
81
) ;
82
82
let allocation = allocator. allocator . allocate ( & allocation_desc) ?;
83
+ let mut resource = None ;
83
84
84
85
unsafe {
85
86
device. raw . CreatePlacedResource (
@@ -88,32 +89,30 @@ pub(crate) fn create_buffer_resource(
88
89
& raw_desc,
89
90
Direct3D12 :: D3D12_RESOURCE_STATE_COMMON ,
90
91
None ,
91
- resource,
92
+ & mut resource,
92
93
)
93
94
}
94
95
. into_device_result ( "Placed buffer creation" ) ?;
95
96
96
- if resource. is_none ( ) {
97
- return Err ( crate :: DeviceError :: ResourceCreationFailed ) ;
98
- }
97
+ let resource = resource. ok_or ( crate :: DeviceError :: ResourceCreationFailed ) ?;
99
98
100
99
device
101
100
. counters
102
101
. buffer_memory
103
102
. add ( allocation. size ( ) as isize ) ;
104
103
105
- Ok ( Some ( AllocationWrapper { allocation } ) )
104
+ Ok ( ( resource , Some ( AllocationWrapper { allocation } ) ) )
106
105
}
107
106
108
107
pub ( crate ) fn create_texture_resource (
109
108
device : & crate :: dx12:: Device ,
110
109
desc : & crate :: TextureDescriptor ,
111
110
raw_desc : Direct3D12 :: D3D12_RESOURCE_DESC ,
112
- resource : & mut Option < Direct3D12 :: ID3D12Resource > ,
113
- ) -> Result < Option < AllocationWrapper > , crate :: DeviceError > {
111
+ ) -> Result < ( Direct3D12 :: ID3D12Resource , Option < AllocationWrapper > ) , crate :: DeviceError > {
114
112
// Workaround for Intel Xe drivers
115
113
if !device. private_caps . suballocation_supported {
116
- return create_committed_texture_resource ( device, desc, raw_desc, resource) . map ( |( ) | None ) ;
114
+ return create_committed_texture_resource ( device, desc, raw_desc)
115
+ . map ( |resource| ( resource, None ) ) ;
117
116
}
118
117
119
118
let location = MemoryLocation :: GpuOnly ;
@@ -128,6 +127,7 @@ pub(crate) fn create_texture_resource(
128
127
location,
129
128
) ;
130
129
let allocation = allocator. allocator . allocate ( & allocation_desc) ?;
130
+ let mut resource = None ;
131
131
132
132
unsafe {
133
133
device. raw . CreatePlacedResource (
@@ -136,21 +136,19 @@ pub(crate) fn create_texture_resource(
136
136
& raw_desc,
137
137
Direct3D12 :: D3D12_RESOURCE_STATE_COMMON ,
138
138
None , // clear value
139
- resource,
139
+ & mut resource,
140
140
)
141
141
}
142
142
. into_device_result ( "Placed texture creation" ) ?;
143
143
144
- if resource. is_none ( ) {
145
- return Err ( crate :: DeviceError :: ResourceCreationFailed ) ;
146
- }
144
+ let resource = resource. ok_or ( crate :: DeviceError :: ResourceCreationFailed ) ?;
147
145
148
146
device
149
147
. counters
150
148
. texture_memory
151
149
. add ( allocation. size ( ) as isize ) ;
152
150
153
- Ok ( Some ( AllocationWrapper { allocation } ) )
151
+ Ok ( ( resource , Some ( AllocationWrapper { allocation } ) ) )
154
152
}
155
153
156
154
pub ( crate ) fn free_buffer_allocation (
@@ -226,8 +224,7 @@ pub(crate) fn create_committed_buffer_resource(
226
224
device : & crate :: dx12:: Device ,
227
225
desc : & crate :: BufferDescriptor ,
228
226
raw_desc : Direct3D12 :: D3D12_RESOURCE_DESC ,
229
- resource : & mut Option < Direct3D12 :: ID3D12Resource > ,
230
- ) -> Result < ( ) , crate :: DeviceError > {
227
+ ) -> Result < Direct3D12 :: ID3D12Resource , crate :: DeviceError > {
231
228
let is_cpu_read = desc. usage . contains ( crate :: BufferUses :: MAP_READ ) ;
232
229
let is_cpu_write = desc. usage . contains ( crate :: BufferUses :: MAP_WRITE ) ;
233
230
@@ -250,6 +247,8 @@ pub(crate) fn create_committed_buffer_resource(
250
247
VisibleNodeMask : 0 ,
251
248
} ;
252
249
250
+ let mut resource = None ;
251
+
253
252
unsafe {
254
253
device. raw . CreateCommittedResource (
255
254
& heap_properties,
@@ -261,24 +260,19 @@ pub(crate) fn create_committed_buffer_resource(
261
260
& raw_desc,
262
261
Direct3D12 :: D3D12_RESOURCE_STATE_COMMON ,
263
262
None ,
264
- resource,
263
+ & mut resource,
265
264
)
266
265
}
267
266
. into_device_result ( "Committed buffer creation" ) ?;
268
267
269
- if resource. is_none ( ) {
270
- return Err ( crate :: DeviceError :: ResourceCreationFailed ) ;
271
- }
272
-
273
- Ok ( ( ) )
268
+ resource. ok_or ( crate :: DeviceError :: ResourceCreationFailed )
274
269
}
275
270
276
271
pub ( crate ) fn create_committed_texture_resource (
277
272
device : & crate :: dx12:: Device ,
278
273
_desc : & crate :: TextureDescriptor ,
279
274
raw_desc : Direct3D12 :: D3D12_RESOURCE_DESC ,
280
- resource : & mut Option < Direct3D12 :: ID3D12Resource > ,
281
- ) -> Result < ( ) , crate :: DeviceError > {
275
+ ) -> Result < Direct3D12 :: ID3D12Resource , crate :: DeviceError > {
282
276
let heap_properties = Direct3D12 :: D3D12_HEAP_PROPERTIES {
283
277
Type : Direct3D12 :: D3D12_HEAP_TYPE_CUSTOM ,
284
278
CPUPageProperty : Direct3D12 :: D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE ,
@@ -290,6 +284,8 @@ pub(crate) fn create_committed_texture_resource(
290
284
VisibleNodeMask : 0 ,
291
285
} ;
292
286
287
+ let mut resource = None ;
288
+
293
289
unsafe {
294
290
device. raw . CreateCommittedResource (
295
291
& heap_properties,
@@ -301,14 +297,10 @@ pub(crate) fn create_committed_texture_resource(
301
297
& raw_desc,
302
298
Direct3D12 :: D3D12_RESOURCE_STATE_COMMON ,
303
299
None , // clear value
304
- resource,
300
+ & mut resource,
305
301
)
306
302
}
307
303
. into_device_result ( "Committed texture creation" ) ?;
308
304
309
- if resource. is_none ( ) {
310
- return Err ( crate :: DeviceError :: ResourceCreationFailed ) ;
311
- }
312
-
313
- Ok ( ( ) )
305
+ resource. ok_or ( crate :: DeviceError :: ResourceCreationFailed )
314
306
}
0 commit comments