Files
test/source/blender/gpu/vulkan/vk_immediate.hh
Jeroen Bakker 1f47a51335 Fix #142305: Vulkan: Memory leak immediate mode
Resetting and recycling of immediate drawing buffers was never done and
would leak memory as the buffers were only destroyed when Blender
exited.

This is solved by not recycling or resetting the buffers and rely on the
discard pools. Additional cleanup of removing unused code-paths is also
part of this change so it can be backported to 4.5.

Pull Request: https://projects.blender.org/blender/blender/pulls/143995
2025-08-05 14:40:54 +02:00

56 lines
1.1 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup gpu
*
* Mimics old style OpenGL immediate mode drawing.
*/
#pragma once
#include "MEM_guardedalloc.h"
#include "gpu_immediate_private.hh"
#include "gpu_vertex_format_private.hh"
#include "vk_buffer.hh"
#include "vk_data_conversion.hh"
#include "vk_mem_alloc.h"
#include "vk_resource_tracker.hh"
#include "vk_vertex_attribute_object.hh"
namespace blender::gpu {
class VKDevice;
/* Size of internal buffer. */
constexpr size_t DEFAULT_INTERNAL_BUFFER_SIZE = 4 * 1024 * 1024;
class VKImmediate : public Immediate {
private:
VKVertexAttributeObject vertex_attributes_;
VkDeviceSize buffer_offset_ = 0;
VkDeviceSize current_subbuffer_len_ = 0;
std::optional<VKBuffer> active_buffer_;
public:
void deinit(VKDevice &device);
uchar *begin() override;
void end() override;
friend class VKVertexAttributeObject;
private:
VKBufferWithOffset active_buffer() const;
VkDeviceSize buffer_bytes_free();
VKBuffer &ensure_space(VkDeviceSize bytes_needed, VkDeviceSize offset_alignment);
};
} // namespace blender::gpu