=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Avoid allocating memory in d3d12_command_list_update_uav_counter_descriptors ().

Alexandre Julliard julliard at winehq.org
Tue Jun 11 16:49:24 CDT 2019


Module: vkd3d
Branch: master
Commit: 28f99600a568b6a58240057de416eabcfb17cee4
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=28f99600a568b6a58240057de416eabcfb17cee4

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue Jun 11 10:13:34 2019 +0200

vkd3d: Avoid allocating memory in d3d12_command_list_update_uav_counter_descriptors().

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/command.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index cb7f086..f4ad829 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -2721,11 +2721,11 @@ done:
 static void d3d12_command_list_update_uav_counter_descriptors(struct d3d12_command_list *list,
         VkPipelineBindPoint bind_point)
 {
+    VkWriteDescriptorSet vk_descriptor_writes[VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS];
     struct vkd3d_pipeline_bindings *bindings = &list->pipeline_bindings[bind_point];
     const struct vkd3d_vk_device_procs *vk_procs = &list->device->vk_procs;
     const struct d3d12_pipeline_state *state = list->state;
     VkDevice vk_device = list->device->vk_device;
-    VkWriteDescriptorSet *vk_descriptor_writes;
     VkDescriptorSet vk_descriptor_set;
     unsigned int uav_counter_count;
     unsigned int i;
@@ -2734,14 +2734,12 @@ static void d3d12_command_list_update_uav_counter_descriptors(struct d3d12_comma
         return;
 
     uav_counter_count = vkd3d_popcount(state->uav_counter_mask);
+    assert(uav_counter_count <= ARRAY_SIZE(vk_descriptor_writes));
 
     vk_descriptor_set = d3d12_command_allocator_allocate_descriptor_set(list->allocator, state->vk_set_layout);
     if (!vk_descriptor_set)
         return;
 
-    if (!(vk_descriptor_writes = vkd3d_calloc(uav_counter_count, sizeof(*vk_descriptor_writes))))
-        return;
-
     for (i = 0; i < uav_counter_count; ++i)
     {
         const struct vkd3d_shader_uav_counter_binding *uav_counter = &state->uav_counters[i];
@@ -2762,7 +2760,6 @@ static void d3d12_command_list_update_uav_counter_descriptors(struct d3d12_comma
     }
 
     VK_CALL(vkUpdateDescriptorSets(vk_device, uav_counter_count, vk_descriptor_writes, 0, NULL));
-    vkd3d_free(vk_descriptor_writes);
 
     VK_CALL(vkCmdBindDescriptorSets(list->vk_command_buffer, bind_point,
             state->vk_pipeline_layout, state->set_index, 1, &vk_descriptor_set, 0, NULL));




More information about the wine-cvs mailing list