[Bf-blender-cvs] [ea86ec200ac] master: GPU: Added VkVertexBuffer alloc/release data.
Jeroen Bakker
noreply at git.blender.org
Fri Dec 2 13:43:50 CET 2022
Commit: ea86ec200acca3071f23a65ec43d3c77fe02d8b3
Author: Jeroen Bakker
Date: Fri Dec 2 13:38:45 2022 +0100
Branches: master
https://developer.blender.org/rBea86ec200acca3071f23a65ec43d3c77fe02d8b3
GPU: Added VkVertexBuffer alloc/release data.
This makes sure that the GPU_batch_init will not crash on an assert
where the data of vertex buffer needs to be allocated.
===================================================================
M source/blender/gpu/vulkan/vk_vertex_buffer.cc
M source/blender/gpu/vulkan/vk_vertex_buffer.hh
===================================================================
diff --git a/source/blender/gpu/vulkan/vk_vertex_buffer.cc b/source/blender/gpu/vulkan/vk_vertex_buffer.cc
index 5791e20fb30..01353acfa46 100644
--- a/source/blender/gpu/vulkan/vk_vertex_buffer.cc
+++ b/source/blender/gpu/vulkan/vk_vertex_buffer.cc
@@ -5,10 +5,17 @@
* \ingroup gpu
*/
+#include "MEM_guardedalloc.h"
+
#include "vk_vertex_buffer.hh"
namespace blender::gpu {
+VKVertexBuffer::~VKVertexBuffer()
+{
+ release_data();
+}
+
void VKVertexBuffer::bind_as_ssbo(uint /*binding*/)
{
}
@@ -37,6 +44,13 @@ void *VKVertexBuffer::unmap(const void * /*mapped_data*/) const
void VKVertexBuffer::acquire_data()
{
+ if (usage_ == GPU_USAGE_DEVICE_ONLY) {
+ return;
+ }
+
+ /* Discard previous data if any. */
+ MEM_SAFE_FREE(data);
+ data = (uchar *)MEM_mallocN(sizeof(uchar) * this->size_alloc_get(), __func__);
}
void VKVertexBuffer::resize_data()
@@ -45,6 +59,7 @@ void VKVertexBuffer::resize_data()
void VKVertexBuffer::release_data()
{
+ MEM_SAFE_FREE(data);
}
void VKVertexBuffer::upload_data()
diff --git a/source/blender/gpu/vulkan/vk_vertex_buffer.hh b/source/blender/gpu/vulkan/vk_vertex_buffer.hh
index 84ccc65bcdf..04eb48f9bd0 100644
--- a/source/blender/gpu/vulkan/vk_vertex_buffer.hh
+++ b/source/blender/gpu/vulkan/vk_vertex_buffer.hh
@@ -13,6 +13,8 @@ namespace blender::gpu {
class VKVertexBuffer : public VertBuf {
public:
+ ~VKVertexBuffer();
+
void bind_as_ssbo(uint binding) override;
void bind_as_texture(uint binding) override;
void wrap_handle(uint64_t handle) override;
More information about the Bf-blender-cvs
mailing list