Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /