Skip to content

Commit ef99192

Browse files
Firestar99LegNeato
authored andcommitted
difftest ash: allocate descriptor pool just as required
1 parent 7e4dbd9 commit ef99192

File tree

1 file changed

+25
-24
lines changed
  • tests/difftests/lib/src/scaffold/compute

1 file changed

+25
-24
lines changed

tests/difftests/lib/src/scaffold/compute/ash.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ pub struct AshBackend {
99
device: ash::Device,
1010
queue: vk::Queue,
1111
command_pool: vk::CommandPool,
12-
descriptor_pool: vk::DescriptorPool,
1312
memory_properties: vk::PhysicalDeviceMemoryProperties,
1413
_entry: ash::Entry,
1514
}
@@ -152,31 +151,11 @@ impl ComputeBackend for AshBackend {
152151
)
153152
.context("Failed to create command pool")?;
154153

155-
// Create descriptor pool
156-
let descriptor_pool = device
157-
.create_descriptor_pool(
158-
&vk::DescriptorPoolCreateInfo::default()
159-
.pool_sizes(&vec![
160-
vk::DescriptorPoolSize {
161-
ty: DescriptorType::STORAGE_BUFFER,
162-
descriptor_count: 16,
163-
},
164-
vk::DescriptorPoolSize {
165-
ty: DescriptorType::UNIFORM_BUFFER,
166-
descriptor_count: 16,
167-
},
168-
])
169-
.max_sets(16),
170-
None,
171-
)
172-
.context("Failed to create descriptor pool")?;
173-
174154
Ok(Self {
175155
instance,
176156
device,
177157
queue,
178158
command_pool,
179-
descriptor_pool,
180159
memory_properties,
181160
_entry: entry,
182161
})
@@ -263,11 +242,34 @@ impl ComputeBackend for AshBackend {
263242
}
264243

265244
// Allocate descriptor set
245+
let count_descriptor_types = |desc_type: DescriptorType| vk::DescriptorPoolSize {
246+
ty: desc_type,
247+
descriptor_count: buffers
248+
.iter()
249+
.filter(|buffer| buffer_usage_to_descriptor_type(buffer.usage) == desc_type)
250+
.count() as u32,
251+
};
252+
let pool_sizes = [
253+
count_descriptor_types(DescriptorType::STORAGE_BUFFER),
254+
count_descriptor_types(DescriptorType::UNIFORM_BUFFER),
255+
]
256+
.into_iter()
257+
.filter(|a| a.descriptor_count != 0)
258+
.collect::<Vec<_>>();
259+
let descriptor_pool = self
260+
.device
261+
.create_descriptor_pool(
262+
&vk::DescriptorPoolCreateInfo::default()
263+
.pool_sizes(&pool_sizes)
264+
.max_sets(1),
265+
None,
266+
)
267+
.context("Failed to create descriptor pool")?;
266268
let descriptor_set = self
267269
.device
268270
.allocate_descriptor_sets(
269271
&vk::DescriptorSetAllocateInfo::default()
270-
.descriptor_pool(self.descriptor_pool)
272+
.descriptor_pool(descriptor_pool)
271273
.set_layouts(&[descriptor_set_layout]),
272274
)
273275
.context("Failed to allocate descriptor sets")?[0];
@@ -374,6 +376,7 @@ impl ComputeBackend for AshBackend {
374376
self.device.destroy_buffer(*buffer, None);
375377
self.device.free_memory(*memory, None);
376378
}
379+
self.device.destroy_descriptor_pool(descriptor_pool, None);
377380
self.device.destroy_pipeline(pipeline, None);
378381
self.device.destroy_pipeline_layout(pipeline_layout, None);
379382
self.device
@@ -387,8 +390,6 @@ impl ComputeBackend for AshBackend {
387390
impl Drop for AshBackend {
388391
fn drop(&mut self) {
389392
unsafe {
390-
self.device
391-
.destroy_descriptor_pool(self.descriptor_pool, None);
392393
self.device.destroy_command_pool(self.command_pool, None);
393394
self.device.destroy_device(None);
394395
self.instance.destroy_instance(None);

0 commit comments

Comments
 (0)