Mesa (main): panvk: Support calls to CreateDescriptorSetLayout without bindings
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jul 5 14:13:29 UTC 2021
Module: Mesa
Branch: main
Commit: 839eeaf30615bec8a4b58d7588d3ffded99161f5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=839eeaf30615bec8a4b58d7588d3ffded99161f5
Author: Tomeu Vizoso <tomeu.vizoso at collabora.com>
Date: Thu Jun 3 16:28:15 2021 +0200
panvk: Support calls to CreateDescriptorSetLayout without bindings
Signed-off-by: Tomeu Vizoso <tomeu.vizoso at collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11709>
---
src/panfrost/vulkan/panvk_descriptor_set.c | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/src/panfrost/vulkan/panvk_descriptor_set.c b/src/panfrost/vulkan/panvk_descriptor_set.c
index ed260476d0f..1f4caa5994c 100644
--- a/src/panfrost/vulkan/panvk_descriptor_set.c
+++ b/src/panfrost/vulkan/panvk_descriptor_set.c
@@ -47,27 +47,30 @@ panvk_CreateDescriptorSetLayout(VkDevice _device,
{
VK_FROM_HANDLE(panvk_device, device, _device);
struct panvk_descriptor_set_layout *set_layout;
- VkDescriptorSetLayoutBinding *bindings;
+ VkDescriptorSetLayoutBinding *bindings = NULL;
+ unsigned num_bindings = 0;
+ VkResult result;
- assert(pCreateInfo->bindingCount);
+ if (pCreateInfo->bindingCount) {
+ result =
+ vk_create_sorted_bindings(pCreateInfo->pBindings,
+ pCreateInfo->bindingCount,
+ &bindings);
+ if (result != VK_SUCCESS)
+ return vk_error(device->instance, result);
- VkResult result =
- vk_create_sorted_bindings(pCreateInfo->pBindings,
- pCreateInfo->bindingCount,
- &bindings);
- if (result != VK_SUCCESS)
- return vk_error(device->instance, result);
+ num_bindings = bindings[pCreateInfo->bindingCount - 1].binding + 1;
+ }
unsigned num_immutable_samplers = 0;
for (unsigned i = 0; i < pCreateInfo->bindingCount; i++) {
if (bindings[i].pImmutableSamplers)
- num_immutable_samplers += bindings[i].descriptorCount;
+ num_immutable_samplers += bindings[i].descriptorCount;
}
- unsigned max_binding = bindings[pCreateInfo->bindingCount - 1].binding;
size_t size = sizeof(*set_layout) +
(sizeof(struct panvk_descriptor_set_binding_layout) *
- (max_binding + 1)) +
+ num_bindings) +
(sizeof(struct panvk_sampler *) * num_immutable_samplers);
set_layout = vk_object_zalloc(&device->vk, pAllocator, size,
VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT);
@@ -79,10 +82,10 @@ panvk_CreateDescriptorSetLayout(VkDevice _device,
struct panvk_sampler **immutable_samplers =
(struct panvk_sampler **)((uint8_t *)set_layout + sizeof(*set_layout) +
(sizeof(struct panvk_descriptor_set_binding_layout) *
- (max_binding + 1)));
+ num_bindings));
set_layout->flags = pCreateInfo->flags;
- set_layout->binding_count = max_binding + 1;
+ set_layout->binding_count = num_bindings;
unsigned sampler_idx = 0, tex_idx = 0, ubo_idx = 0, ssbo_idx = 0;
unsigned dynoffset_idx = 0, desc_idx = 0;
More information about the mesa-commit
mailing list