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.
std::shared_ptr< std::vector< T > > attributes
Attribute Data Array.