Blender V4.3
vk_vertex_buffer.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "GPU_vertex_buffer.hh"
12
13#include "vk_buffer.hh"
14#include "vk_data_conversion.hh"
15
16namespace blender::gpu {
17
18class VKVertexBuffer : public VertBuf {
19 VKBuffer buffer_;
21 VkBufferView vk_buffer_view_ = VK_NULL_HANDLE;
22
23 VertexFormatConverter vertex_format_converter;
24
25 public:
27
28 void bind_as_ssbo(uint binding) override;
29 void bind_as_texture(uint binding) override;
30 void wrap_handle(uint64_t handle) override;
31
32 void update_sub(uint start, uint len, const void *data) override;
33 void read(void *data) const override;
34
35 VkBuffer vk_handle() const
36 {
37 BLI_assert(buffer_.is_allocated());
38 return buffer_.vk_handle();
39 }
40
41 VkBufferView vk_buffer_view_get() const
42 {
43 BLI_assert(vk_buffer_view_ != VK_NULL_HANDLE);
44 return vk_buffer_view_;
45 }
46
48 const GPUVertFormat &device_format_get() const;
49 void ensure_updated();
50 void ensure_buffer_view();
51
52 protected:
53 void acquire_data() override;
54 void resize_data() override;
55 void release_data() override;
56 void upload_data() override;
57 void duplicate_data(VertBuf *dst) override;
58
59 private:
60 void allocate();
61
62 void upload_data_direct(const VKBuffer &host_buffer);
63 void upload_data_via_staging_buffer(VKContext &context);
64
65 /* VKTexture requires access to `buffer_` to convert a vertex buffer to a texture. */
66 friend class VKTexture;
67};
68
70{
71 return static_cast<VKVertexBuffer *>(vertex_buffer);
72}
73
74} // namespace blender::gpu
#define BLI_assert(a)
Definition BLI_assert.h:50
#define BLI_INLINE
unsigned int uint
bool is_allocated() const
Definition vk_buffer.cc:22
VkBuffer vk_handle() const
Definition vk_buffer.hh:69
void duplicate_data(VertBuf *dst) override
const GPUVertFormat & device_format_get() const
void update_sub(uint start, uint len, const void *data) override
VkBufferView vk_buffer_view_get() const
void wrap_handle(uint64_t handle) override
void bind_as_ssbo(uint binding) override
void bind_as_texture(uint binding) override
void read(void *data) const override
int len
static Context * unwrap(GPUContext *ctx)
unsigned __int64 uint64_t
Definition stdint.h:90