mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 11:50:09 +01:00
vulkan/debug_utils: copy debug util labels
The copied structures currently can point to freed memory. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16655>
This commit is contained in:
parent
a34fcaf326
commit
662e05c9fb
1 changed files with 33 additions and 7 deletions
|
|
@ -184,6 +184,34 @@ vk_common_SetDebugUtilsObjectTagEXT(
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
vk_common_cmd_buffer_append_debug_label(struct vk_command_buffer *command_buffer,
|
||||
const VkDebugUtilsLabelEXT *pLabelInfo)
|
||||
{
|
||||
struct vk_device *device = command_buffer->base.device;
|
||||
|
||||
util_dynarray_append(&command_buffer->labels, VkDebugUtilsLabelEXT,
|
||||
*pLabelInfo);
|
||||
VkDebugUtilsLabelEXT *current_label =
|
||||
util_dynarray_top_ptr(&command_buffer->labels, VkDebugUtilsLabelEXT);
|
||||
current_label->pLabelName =
|
||||
vk_strdup(&device->alloc, current_label->pLabelName,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
}
|
||||
|
||||
static void
|
||||
vk_common_cmd_buffer_pop_debug_label(struct vk_command_buffer *command_buffer)
|
||||
{
|
||||
struct vk_device *device = command_buffer->base.device;
|
||||
|
||||
if (command_buffer->labels.size == 0)
|
||||
return;
|
||||
|
||||
VkDebugUtilsLabelEXT previous_label =
|
||||
util_dynarray_pop(&command_buffer->labels, VkDebugUtilsLabelEXT);
|
||||
vk_free(&device->alloc, (void *)previous_label.pLabelName);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
vk_common_CmdBeginDebugUtilsLabelEXT(
|
||||
VkCommandBuffer _commandBuffer,
|
||||
|
|
@ -195,10 +223,9 @@ vk_common_CmdBeginDebugUtilsLabelEXT(
|
|||
* should remove it first.
|
||||
*/
|
||||
if (!command_buffer->region_begin)
|
||||
(void)util_dynarray_pop(&command_buffer->labels, VkDebugUtilsLabelEXT);
|
||||
vk_common_cmd_buffer_pop_debug_label(command_buffer);
|
||||
|
||||
util_dynarray_append(&command_buffer->labels, VkDebugUtilsLabelEXT,
|
||||
*pLabelInfo);
|
||||
vk_common_cmd_buffer_append_debug_label(command_buffer, pLabelInfo);
|
||||
command_buffer->region_begin = true;
|
||||
}
|
||||
|
||||
|
|
@ -211,9 +238,9 @@ vk_common_CmdEndDebugUtilsLabelEXT(VkCommandBuffer _commandBuffer)
|
|||
* should remove it first.
|
||||
*/
|
||||
if (!command_buffer->region_begin)
|
||||
(void)util_dynarray_pop(&command_buffer->labels, VkDebugUtilsLabelEXT);
|
||||
vk_common_cmd_buffer_pop_debug_label(command_buffer);
|
||||
|
||||
(void)util_dynarray_pop(&command_buffer->labels, VkDebugUtilsLabelEXT);
|
||||
vk_common_cmd_buffer_pop_debug_label(command_buffer);
|
||||
command_buffer->region_begin = true;
|
||||
}
|
||||
|
||||
|
|
@ -230,8 +257,7 @@ vk_common_CmdInsertDebugUtilsLabelEXT(
|
|||
if (!command_buffer->region_begin)
|
||||
(void)util_dynarray_pop(&command_buffer->labels, VkDebugUtilsLabelEXT);
|
||||
|
||||
util_dynarray_append(&command_buffer->labels, VkDebugUtilsLabelEXT,
|
||||
*pLabelInfo);
|
||||
vk_common_cmd_buffer_append_debug_label(command_buffer, pLabelInfo);
|
||||
command_buffer->region_begin = false;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue