Re: [Mesa-dev] [PATCH 07/16] radv: Implement VK_KHR_maintenance3.
On 7 March 2018 at 19:56, Emil Velikov wrote: > On 7 March 2018 at 18:32, Bas Nieuwenhuizen wrote: > >>> >>> Missing break? >> >> So much for the tests ... >> > Speaking of tests, I hope they check that both KHR and non KHR > annotated functions (the ones changed in 04/16) are tested. > We don't want them to disappear for setups using a pre 1.1 loader. > To answer my own nit: The python scripts produce both entrypoints, hence using an old loader should be fine ;-) -Emil ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 07/16] radv: Implement VK_KHR_maintenance3.
On 7 March 2018 at 18:32, Bas Nieuwenhuizen wrote: >> >> Missing break? > > So much for the tests ... > Speaking of tests, I hope they check that both KHR and non KHR annotated functions (the ones changed in 04/16) are tested. We don't want them to disappear for setups using a pre 1.1 loader. Just a fly-by comment ;-) -Emil ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 07/16] radv: Implement VK_KHR_maintenance3.
On 03/07/2018 07:32 PM, Bas Nieuwenhuizen wrote: On Wed, Mar 7, 2018 at 7:19 PM, Samuel Pitoiset wrote: On 03/07/2018 03:47 PM, Bas Nieuwenhuizen wrote: Reviewed-by: Dave Airlie --- src/amd/vulkan/radv_descriptor_set.c | 82 ++-- src/amd/vulkan/radv_device.c | 10 + src/amd/vulkan/radv_extensions.py| 1 + 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c index 38b8dc78e1..265028df2b 100644 --- a/src/amd/vulkan/radv_descriptor_set.c +++ b/src/amd/vulkan/radv_descriptor_set.c @@ -31,6 +31,20 @@ #include "radv_private.h" #include "sid.h" + +static bool has_equal_immutable_samplers(const VkSampler *samplers, uint32_t count) +{ + if (!samplers) + return false; + for(uint32_t i = 1; i < count; ++i) { + if (memcmp(radv_sampler_from_handle(samplers[0])->state, + radv_sampler_from_handle(samplers[i])->state, 16)) { + return false; + } + } + return true; +} + VkResult radv_CreateDescriptorSetLayout( VkDevice_device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, @@ -132,15 +146,13 @@ VkResult radv_CreateDescriptorSetLayout( if (binding->pImmutableSamplers) { set_layout->binding[b].immutable_samplers_offset = samplers_offset; - set_layout->binding[b].immutable_samplers_equal = true; + set_layout->binding[b].immutable_samplers_equal = + has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount); set_layout->has_immutable_samplers = true; for (uint32_t i = 0; i < binding->descriptorCount; i++) memcpy(samplers + 4 * i, &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16); - for (uint32_t i = 1; i < binding->descriptorCount; i++) - if (memcmp(samplers + 4 * i, samplers, 16) != 0) - set_layout->binding[b].immutable_samplers_equal = false; /* Don't reserve space for the samplers if they're not accessed. */ if (set_layout->binding[b].immutable_samplers_equal) { @@ -182,6 +194,68 @@ void radv_DestroyDescriptorSetLayout( vk_free2(&device->alloc, pAllocator, set_layout); } +void radv_GetDescriptorSetLayoutSupport(VkDevice device, +const VkDescriptorSetLayoutCreateInfo* pCreateInfo, +VkDescriptorSetLayoutSupport* pSupport) +{ + bool supported = true; + uint64_t size = 0; + for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) { + const VkDescriptorSetLayoutBinding *binding = &pCreateInfo->pBindings[i]; + + if (binding->descriptorCount == 0) + continue; + + uint64_t descriptor_size = 0; + uint64_t descriptor_alignment = 1; + switch (binding->descriptorType) { + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + descriptor_size = 16; + descriptor_alignment = 16; + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + descriptor_size = 64; + descriptor_alignment = 32; + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + if (!has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount)) { + descriptor_size = 64; + } else { + descriptor_size = 96; + } + descriptor_alignment = 32; Missing break? So much for the tests ... Yes... The rest looks good to me, nice work! Fixed locally. + case VK_DESCRIPTOR_TYPE_SAMPLER: + if (!has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount)) { + descriptor_size = 16; + descriptor_alignment = 16; + } + break; + default: + unreachable("unknown descriptor t
Re: [Mesa-dev] [PATCH 07/16] radv: Implement VK_KHR_maintenance3.
On Wed, Mar 7, 2018 at 7:19 PM, Samuel Pitoiset wrote: > > > On 03/07/2018 03:47 PM, Bas Nieuwenhuizen wrote: >> >> Reviewed-by: Dave Airlie >> --- >> src/amd/vulkan/radv_descriptor_set.c | 82 >> ++-- >> src/amd/vulkan/radv_device.c | 10 + >> src/amd/vulkan/radv_extensions.py| 1 + >> 3 files changed, 89 insertions(+), 4 deletions(-) >> >> diff --git a/src/amd/vulkan/radv_descriptor_set.c >> b/src/amd/vulkan/radv_descriptor_set.c >> index 38b8dc78e1..265028df2b 100644 >> --- a/src/amd/vulkan/radv_descriptor_set.c >> +++ b/src/amd/vulkan/radv_descriptor_set.c >> @@ -31,6 +31,20 @@ >> #include "radv_private.h" >> #include "sid.h" >> + >> +static bool has_equal_immutable_samplers(const VkSampler *samplers, >> uint32_t count) >> +{ >> + if (!samplers) >> + return false; >> + for(uint32_t i = 1; i < count; ++i) { >> + if (memcmp(radv_sampler_from_handle(samplers[0])->state, >> + radv_sampler_from_handle(samplers[i])->state, >> 16)) { >> + return false; >> + } >> + } >> + return true; >> +} >> + >> VkResult radv_CreateDescriptorSetLayout( >> VkDevice_device, >> const VkDescriptorSetLayoutCreateInfo* pCreateInfo, >> @@ -132,15 +146,13 @@ VkResult radv_CreateDescriptorSetLayout( >> if (binding->pImmutableSamplers) { >> set_layout->binding[b].immutable_samplers_offset = >> samplers_offset; >> - set_layout->binding[b].immutable_samplers_equal = >> true; >> + set_layout->binding[b].immutable_samplers_equal = >> + >> has_equal_immutable_samplers(binding->pImmutableSamplers, >> binding->descriptorCount); >> set_layout->has_immutable_samplers = true; >> for (uint32_t i = 0; i < binding->descriptorCount; >> i++) >> memcpy(samplers + 4 * i, >> &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16); >> - for (uint32_t i = 1; i < binding->descriptorCount; >> i++) >> - if (memcmp(samplers + 4 * i, samplers, 16) >> != 0) >> - >> set_layout->binding[b].immutable_samplers_equal = false; >> /* Don't reserve space for the samplers if they're >> not accessed. */ >> if >> (set_layout->binding[b].immutable_samplers_equal) { >> @@ -182,6 +194,68 @@ void radv_DestroyDescriptorSetLayout( >> vk_free2(&device->alloc, pAllocator, set_layout); >> } >> +void radv_GetDescriptorSetLayoutSupport(VkDevice device, >> +const >> VkDescriptorSetLayoutCreateInfo* pCreateInfo, >> +VkDescriptorSetLayoutSupport* >> pSupport) >> +{ >> + bool supported = true; >> + uint64_t size = 0; >> + for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) { >> + const VkDescriptorSetLayoutBinding *binding = >> &pCreateInfo->pBindings[i]; >> + >> + if (binding->descriptorCount == 0) >> + continue; >> + >> + uint64_t descriptor_size = 0; >> + uint64_t descriptor_alignment = 1; >> + switch (binding->descriptorType) { >> + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: >> + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: >> + break; >> + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: >> + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: >> + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: >> + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: >> + descriptor_size = 16; >> + descriptor_alignment = 16; >> + break; >> + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: >> + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: >> + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: >> + descriptor_size = 64; >> + descriptor_alignment = 32; >> + break; >> + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: >> + if >> (!has_equal_immutable_samplers(binding->pImmutableSamplers, >> binding->descriptorCount)) { >> + descriptor_size = 64; >> + } else { >> + descriptor_size = 96; >> + } >> + descriptor_alignment = 32; > > > Missing break? So much for the tests ... Fixed locally. > > >> + case VK_DESCRIPTOR_TYPE_SAMPLER: >> + if >> (!has_equal_immutable_samplers(binding->pImmutableSamplers, >> binding->descriptorCount)) { >> + descr
Re: [Mesa-dev] [PATCH 07/16] radv: Implement VK_KHR_maintenance3.
On 03/07/2018 03:47 PM, Bas Nieuwenhuizen wrote: Reviewed-by: Dave Airlie --- src/amd/vulkan/radv_descriptor_set.c | 82 ++-- src/amd/vulkan/radv_device.c | 10 + src/amd/vulkan/radv_extensions.py| 1 + 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c index 38b8dc78e1..265028df2b 100644 --- a/src/amd/vulkan/radv_descriptor_set.c +++ b/src/amd/vulkan/radv_descriptor_set.c @@ -31,6 +31,20 @@ #include "radv_private.h" #include "sid.h" + +static bool has_equal_immutable_samplers(const VkSampler *samplers, uint32_t count) +{ + if (!samplers) + return false; + for(uint32_t i = 1; i < count; ++i) { + if (memcmp(radv_sampler_from_handle(samplers[0])->state, + radv_sampler_from_handle(samplers[i])->state, 16)) { + return false; + } + } + return true; +} + VkResult radv_CreateDescriptorSetLayout( VkDevice_device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, @@ -132,15 +146,13 @@ VkResult radv_CreateDescriptorSetLayout( if (binding->pImmutableSamplers) { set_layout->binding[b].immutable_samplers_offset = samplers_offset; - set_layout->binding[b].immutable_samplers_equal = true; + set_layout->binding[b].immutable_samplers_equal = + has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount); set_layout->has_immutable_samplers = true; for (uint32_t i = 0; i < binding->descriptorCount; i++) memcpy(samplers + 4 * i, &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16); - for (uint32_t i = 1; i < binding->descriptorCount; i++) - if (memcmp(samplers + 4 * i, samplers, 16) != 0) - set_layout->binding[b].immutable_samplers_equal = false; /* Don't reserve space for the samplers if they're not accessed. */ if (set_layout->binding[b].immutable_samplers_equal) { @@ -182,6 +194,68 @@ void radv_DestroyDescriptorSetLayout( vk_free2(&device->alloc, pAllocator, set_layout); } +void radv_GetDescriptorSetLayoutSupport(VkDevice device, +const VkDescriptorSetLayoutCreateInfo* pCreateInfo, +VkDescriptorSetLayoutSupport* pSupport) +{ + bool supported = true; + uint64_t size = 0; + for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) { + const VkDescriptorSetLayoutBinding *binding = &pCreateInfo->pBindings[i]; + + if (binding->descriptorCount == 0) + continue; + + uint64_t descriptor_size = 0; + uint64_t descriptor_alignment = 1; + switch (binding->descriptorType) { + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + descriptor_size = 16; + descriptor_alignment = 16; + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + descriptor_size = 64; + descriptor_alignment = 32; + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + if (!has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount)) { + descriptor_size = 64; + } else { + descriptor_size = 96; + } + descriptor_alignment = 32; Missing break? + case VK_DESCRIPTOR_TYPE_SAMPLER: + if (!has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount)) { + descriptor_size = 16; + descriptor_alignment = 16; + } + break; + default: + unreachable("unknown descriptor type\n"); + break; + } + + if (size && !align_u64(size, descriptor_alignment)) { + supported = false; +
Re: [Mesa-dev] [PATCH 07/16] radv: Implement VK_KHR_maintenance3.
2018-03-07 15:47 GMT+01:00 Bas Nieuwenhuizen : > Reviewed-by: Dave Airlie > --- > src/amd/vulkan/radv_descriptor_set.c | 82 ++ > -- > src/amd/vulkan/radv_device.c | 10 + > src/amd/vulkan/radv_extensions.py| 1 + > 3 files changed, 89 insertions(+), 4 deletions(-) > > diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_ > descriptor_set.c > index 38b8dc78e1..265028df2b 100644 > --- a/src/amd/vulkan/radv_descriptor_set.c > +++ b/src/amd/vulkan/radv_descriptor_set.c > @@ -31,6 +31,20 @@ > #include "radv_private.h" > #include "sid.h" > > + > +static bool has_equal_immutable_samplers(const VkSampler *samplers, > uint32_t count) > +{ > + if (!samplers) > + return false; > + for(uint32_t i = 1; i < count; ++i) { > + if (memcmp(radv_sampler_from_handle(samplers[0])->state, > + radv_sampler_from_handle(samplers[i])->state, > 16)) { > + return false; > + } > + } > + return true; > +} > + > VkResult radv_CreateDescriptorSetLayout( > VkDevice_device, > const VkDescriptorSetLayoutCreateInfo* pCreateInfo, > @@ -132,15 +146,13 @@ VkResult radv_CreateDescriptorSetLayout( > > if (binding->pImmutableSamplers) { > set_layout->binding[b].immutable_samplers_offset > = samplers_offset; > - set_layout->binding[b].immutable_samplers_equal = > true; > + set_layout->binding[b].immutable_samplers_equal = > + > has_equal_immutable_samplers(binding->pImmutableSamplers, > binding->descriptorCount); > set_layout->has_immutable_samplers = true; > > > for (uint32_t i = 0; i < binding->descriptorCount; > i++) > memcpy(samplers + 4 * i, > &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16); > - for (uint32_t i = 1; i < binding->descriptorCount; > i++) > - if (memcmp(samplers + 4 * i, samplers, 16) > != 0) > - > set_layout->binding[b].immutable_samplers_equal > = false; > > /* Don't reserve space for the samplers if they're > not accessed. */ > if (set_layout->binding[b].immutable_samplers_equal) > { > @@ -182,6 +194,68 @@ void radv_DestroyDescriptorSetLayout( > vk_free2(&device->alloc, pAllocator, set_layout); > } > > +void radv_GetDescriptorSetLayoutSupport(VkDevice device, > +const > VkDescriptorSetLayoutCreateInfo* pCreateInfo, > +VkDescriptorSetLayoutSupport* > pSupport) > +{ > + bool supported = true; > + uint64_t size = 0; > + for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) { > + const VkDescriptorSetLayoutBinding *binding = > &pCreateInfo->pBindings[i]; > + > + if (binding->descriptorCount == 0) > + continue; > + > + uint64_t descriptor_size = 0; > + uint64_t descriptor_alignment = 1; > + switch (binding->descriptorType) { > + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: > + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: > + break; > + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: > + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: > + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: > + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: > + descriptor_size = 16; > + descriptor_alignment = 16; > + break; > + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: > + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: > + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: > + descriptor_size = 64; > + descriptor_alignment = 32; > + break; > + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: > + if > (!has_equal_immutable_samplers(binding->pImmutableSamplers, > binding->descriptorCount)) { > + descriptor_size = 64; > + } else { > + descriptor_size = 96; > + } > + descriptor_alignment = 32; > + case VK_DESCRIPTOR_TYPE_SAMPLER: > + if > (!has_equal_immutable_samplers(binding->pImmutableSamplers, > binding->descriptorCount)) { > + descriptor_size = 16; > + descriptor_alignment = 16; > + } > + break; > + default: > +
[Mesa-dev] [PATCH 07/16] radv: Implement VK_KHR_maintenance3.
Reviewed-by: Dave Airlie --- src/amd/vulkan/radv_descriptor_set.c | 82 ++-- src/amd/vulkan/radv_device.c | 10 + src/amd/vulkan/radv_extensions.py| 1 + 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c index 38b8dc78e1..265028df2b 100644 --- a/src/amd/vulkan/radv_descriptor_set.c +++ b/src/amd/vulkan/radv_descriptor_set.c @@ -31,6 +31,20 @@ #include "radv_private.h" #include "sid.h" + +static bool has_equal_immutable_samplers(const VkSampler *samplers, uint32_t count) +{ + if (!samplers) + return false; + for(uint32_t i = 1; i < count; ++i) { + if (memcmp(radv_sampler_from_handle(samplers[0])->state, + radv_sampler_from_handle(samplers[i])->state, 16)) { + return false; + } + } + return true; +} + VkResult radv_CreateDescriptorSetLayout( VkDevice_device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, @@ -132,15 +146,13 @@ VkResult radv_CreateDescriptorSetLayout( if (binding->pImmutableSamplers) { set_layout->binding[b].immutable_samplers_offset = samplers_offset; - set_layout->binding[b].immutable_samplers_equal = true; + set_layout->binding[b].immutable_samplers_equal = + has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount); set_layout->has_immutable_samplers = true; for (uint32_t i = 0; i < binding->descriptorCount; i++) memcpy(samplers + 4 * i, &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16); - for (uint32_t i = 1; i < binding->descriptorCount; i++) - if (memcmp(samplers + 4 * i, samplers, 16) != 0) - set_layout->binding[b].immutable_samplers_equal = false; /* Don't reserve space for the samplers if they're not accessed. */ if (set_layout->binding[b].immutable_samplers_equal) { @@ -182,6 +194,68 @@ void radv_DestroyDescriptorSetLayout( vk_free2(&device->alloc, pAllocator, set_layout); } +void radv_GetDescriptorSetLayoutSupport(VkDevice device, +const VkDescriptorSetLayoutCreateInfo* pCreateInfo, +VkDescriptorSetLayoutSupport* pSupport) +{ + bool supported = true; + uint64_t size = 0; + for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) { + const VkDescriptorSetLayoutBinding *binding = &pCreateInfo->pBindings[i]; + + if (binding->descriptorCount == 0) + continue; + + uint64_t descriptor_size = 0; + uint64_t descriptor_alignment = 1; + switch (binding->descriptorType) { + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: + break; + case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: + case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: + descriptor_size = 16; + descriptor_alignment = 16; + break; + case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: + case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: + case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: + descriptor_size = 64; + descriptor_alignment = 32; + break; + case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: + if (!has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount)) { + descriptor_size = 64; + } else { + descriptor_size = 96; + } + descriptor_alignment = 32; + case VK_DESCRIPTOR_TYPE_SAMPLER: + if (!has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount)) { + descriptor_size = 16; + descriptor_alignment = 16; + } + break; + default: + unreachable("unknown descriptor type\n"); + break; + } + + if (size && !align_u64(size, descriptor_alignment)) { + supported = false; + } + size = alig