SpiecsEngine
 
Loading...
Searching...
No Matches

◆ CreateBuffer()

template<typename T >
void Spices::Attribute< T >::CreateBuffer ( const std::string & name,
VkBufferUsageFlags usage = 0 )
inline

Create Attribute Buffer.

Parameters
[in]nameBuffer Debug Name.
[in]usageBuffer Usage.

Definition at line 80 of file Attribute.h.

81 {
83
84 VkDeviceSize bufferSize = sizeof((*attributes)[0]) * attributes->size();
85
86 if (bufferSize > 0)
87 {
88 VulkanBuffer stagingBuffer(
90 "StagingBuffer" ,
91 bufferSize ,
92 VK_BUFFER_USAGE_TRANSFER_SRC_BIT ,
93 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
94 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
95 );
96
97 buffer = std::make_shared<VulkanBuffer>(
99 name ,
100 bufferSize ,
101 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
102 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT |
103 usage ,
104 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
105 );
106
107 stagingBuffer.WriteToBuffer(attributes->data());
108 buffer->CopyBuffer(stagingBuffer.Get(), buffer->Get(), bufferSize);
109 }
110 else
111 {
112 bufferSize = 16;
113
114 VulkanBuffer stagingBuffer(
116 "StagingBuffer" ,
117 bufferSize ,
118 VK_BUFFER_USAGE_TRANSFER_SRC_BIT ,
119 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
120 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
121 );
122
123 buffer = std::make_shared<VulkanBuffer>(
125 name ,
126 bufferSize ,
127 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
128 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT |
129 usage ,
130 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
131 );
132
133 glm::vec4 empty = glm::vec4(0.0f);
134 stagingBuffer.WriteToBuffer(&empty);
135 buffer->CopyBuffer(stagingBuffer.Get(), buffer->Get(), bufferSize);
136 }
137 }
#define SPICES_PROFILE_ZONE
static VulkanState & GetState()
Get VulkanState in use.
std::shared_ptr< VulkanBuffer > buffer
Attribute Buffer.
Definition Attribute.h:54
std::shared_ptr< std::vector< T > > attributes
Attribute Data Array.
Definition Attribute.h:49