radv: Don't allocate dynamic descriptors separately.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Mon, 17 Apr 2017 09:30:43 +0000 (11:30 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Wed, 19 Apr 2017 18:37:57 +0000 (20:37 +0200)
Signed-off-by: Bas Nieuwenhuizen <basni@google.com>
Reviewed-by: Bas Nieuwenhuizen <basni@google.com>
src/amd/vulkan/radv_descriptor_set.c

index 48cb8c2a30ae58f8913a5ec1e4f09abd36da7980..26f89152d52654230a930ce2f48c92cf7ff1c3fd 100644 (file)
@@ -261,8 +261,10 @@ radv_descriptor_set_create(struct radv_device *device,
                           struct radv_descriptor_set **out_set)
 {
        struct radv_descriptor_set *set;
-       unsigned mem_size = sizeof(struct radv_descriptor_set) +
+       unsigned range_offset = sizeof(struct radv_descriptor_set) +
                sizeof(struct radeon_winsys_bo *) * layout->buffer_count;
+       unsigned mem_size = range_offset +
+               sizeof(struct radv_descriptor_range) * layout->dynamic_offset_count;
        set = vk_alloc2(&device->alloc, NULL, mem_size, 8,
                          VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
 
@@ -272,15 +274,7 @@ radv_descriptor_set_create(struct radv_device *device,
        memset(set, 0, mem_size);
 
        if (layout->dynamic_offset_count) {
-               unsigned size = sizeof(struct radv_descriptor_range) *
-                               layout->dynamic_offset_count;
-               set->dynamic_descriptors = vk_alloc2(&device->alloc, NULL, size, 8,
-                                                      VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
-
-               if (!set->dynamic_descriptors) {
-                       vk_free2(&device->alloc, NULL, set);
-                       return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
-               }
+               set->dynamic_descriptors = (struct radv_descriptor_range*)((uint8_t*)set + range_offset);
        }
 
        set->layout = layout;
@@ -350,8 +344,6 @@ radv_descriptor_set_destroy(struct radv_device *device,
 {
        if (free_bo && set->size)
                list_del(&set->vram_list);
-       if (set->dynamic_descriptors)
-               vk_free2(&device->alloc, NULL, set->dynamic_descriptors);
        vk_free2(&device->alloc, NULL, set);
 }