[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