Files
test2/source/blender/gpu/vulkan/vk_immediate.hh
Jeroen Bakker 481c8fd5a7 Vulkan: Memory leak in immediate mode during exit
When exiting the immediate buffers are discarded, but where not
destroyed making the buffers still leak.
Detected when looking into descriptor set freeze issue.

Pull Request: https://projects.blender.org/blender/blender/pulls/128249
2024-09-27 15:01:10 +02:00

62 lines
1.3 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;
VertexFormatConverter vertex_format_converter;
Vector<std::unique_ptr<VKBuffer>> active_buffers_;
Vector<std::unique_ptr<VKBuffer>> recycling_buffers_;
public:
VKImmediate();
virtual ~VKImmediate();
void deinit(VKDevice &device);
void reset();
uchar *begin() override;
void end() override;
friend class VKVertexAttributeObject;
private:
VKBufferWithOffset active_buffer() const;
VkDeviceSize buffer_bytes_free();
VKBuffer &ensure_space(size_t bytes_needed);
};
} // namespace blender::gpu