summaryrefslogtreecommitdiff
path: root/src/entities.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-11-03 07:04:52 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-11-15 13:13:27 -0500
commit96e522ecf4e369bfc533db3914c0b06c2512bedd (patch)
treeda7cf96169955d7e0ae05423184d0cca2306e849 /src/entities.cpp
parent0f586c10920346c8190af5a71adc289483a38e47 (diff)
confirm buffer size after calculating combined memory requirements
Diffstat (limited to 'src/entities.cpp')
-rw-r--r--src/entities.cpp89
1 files changed, 50 insertions, 39 deletions
diff --git a/src/entities.cpp b/src/entities.cpp
index be7cb4a..c49d948 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -660,74 +660,85 @@ void EntityType_Load(EntityType &et) {
}
}
- VkBufferCreateInfo physBufferCI;
- physBufferCI.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
- physBufferCI.pNext = nullptr;
- physBufferCI.flags = {};
- physBufferCI.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
- physBufferCI.queueFamilyIndexCount = 1;
- physBufferCI.pQueueFamilyIndices = &graphicsFamilyIndex;
+ VkBufferCreateInfo physBufferCI[4];
+ for (long i = 0; i < 4; ++i) {
+ physBufferCI[i].sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
+ physBufferCI[i].pNext = nullptr;
+ physBufferCI[i].flags = {};
+ physBufferCI[i].sharingMode = VK_SHARING_MODE_EXCLUSIVE;
+ physBufferCI[i].queueFamilyIndexCount = 1;
+ physBufferCI[i].pQueueFamilyIndices = &graphicsFamilyIndex;
+ }
VkMemoryRequirements memReqs[4];
// vertex
index = 0;
- physBufferCI.size = sizeof(glm::vec3) * vertexes.Count();
- physBufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physVertBD.buffer);
+ physBufferCI[index].size = sizeof(glm::vec3) * vertexes.Count();
+ physBufferCI[index].usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physVertBD.buffer);
vkGetBufferMemoryRequirements(vkDevice, grBinds.physVertBD.buffer, &memReqs[index]);
- if (memReqs[index].size != physBufferCI.size) {
- vkDestroyBuffer(vkDevice, grBinds.physVertBD.buffer, vkAllocator);
- physBufferCI.size = memReqs[index].size;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physVertBD.buffer);
- }
grBinds.physVertBD.bindingCount = vertexes.Count();
grBinds.physVertBD.firstBinding = index;
// norm
index = 1;
- physBufferCI.size = sizeof(glm::vec3) * normals.Count();
- physBufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physNormBD.buffer);
+ physBufferCI[index].size = sizeof(glm::vec3) * normals.Count();
+ physBufferCI[index].usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physNormBD.buffer);
vkGetBufferMemoryRequirements(vkDevice, grBinds.physNormBD.buffer, &memReqs[index]);
- if (memReqs[index].size != physBufferCI.size) {
- vkDestroyBuffer(vkDevice, grBinds.physNormBD.buffer, vkAllocator);
- physBufferCI.size = memReqs[index].size;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physNormBD.buffer);
- }
grBinds.physNormBD.bindingCount = normals.Count();
grBinds.physNormBD.firstBinding = index;
// uv
index = 2;
- physBufferCI.size = sizeof(glm::vec2) * uv.Count();
- physBufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physUvBD.buffer);
+ physBufferCI[index].size = sizeof(glm::vec2) * uv.Count();
+ physBufferCI[index].usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physUvBD.buffer);
vkGetBufferMemoryRequirements(vkDevice, grBinds.physUvBD.buffer, &memReqs[index]);
- if (memReqs[index].size != physBufferCI.size) {
- vkDestroyBuffer(vkDevice, grBinds.physUvBD.buffer, vkAllocator);
- physBufferCI.size = memReqs[index].size;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physUvBD.buffer);
- }
grBinds.physUvBD.bindingCount = uv.Count();
grBinds.physUvBD.firstBinding = index;
// index
index = 3;
- physBufferCI.size = sizeof(uint16_t) * indexes.Count();
- physBufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physIndxBD.buffer);
+ physBufferCI[index].size = sizeof(uint16_t) * indexes.Count();
+ physBufferCI[index].usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physIndxBD.buffer);
vkGetBufferMemoryRequirements(vkDevice, grBinds.physIndxBD.buffer, &memReqs[index]);
- if (memReqs[index].size != physBufferCI.size) {
- vkDestroyBuffer(vkDevice, grBinds.physIndxBD.buffer, vkAllocator);
- physBufferCI.size = memReqs[index].size;
- vkCreateBuffer(vkDevice, &physBufferCI, vkAllocator, &grBinds.physIndxBD.buffer);
- }
grBinds.physIndxBD.bindingCount = indexes.Count();
// grBinds.physIndxBD.firstBinding = index;
CalculateCombinedMemReqs(4, memReqs, combinedMemReqs);
+ // vert
+ index = 0;
+ if (memReqs[index].size != physBufferCI[index].size) {
+ vkDestroyBuffer(vkDevice, grBinds.physVertBD.buffer, vkAllocator);
+ physBufferCI[index].size = memReqs[index].size;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physVertBD.buffer);
+ }
+ // norm
+ index = 1;
+ if (memReqs[index].size != physBufferCI[index].size) {
+ vkDestroyBuffer(vkDevice, grBinds.physNormBD.buffer, vkAllocator);
+ physBufferCI[index].size = memReqs[index].size;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physNormBD.buffer);
+ }
+ // uv
+ index = 2;
+ if (memReqs[index].size != physBufferCI[index].size) {
+ vkDestroyBuffer(vkDevice, grBinds.physUvBD.buffer, vkAllocator);
+ physBufferCI[index].size = memReqs[index].size;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physUvBD.buffer);
+ }
+ // index
+ index = 3;
+ if (memReqs[index].size != physBufferCI[index].size) {
+ vkDestroyBuffer(vkDevice, grBinds.physIndxBD.buffer, vkAllocator);
+ physBufferCI[index].size = memReqs[index].size;
+ vkCreateBuffer(vkDevice, &physBufferCI[index], vkAllocator, &grBinds.physIndxBD.buffer);
+ }
+
// allocate memory
VkMemoryAllocateInfo physVertMemAI;
physVertMemAI.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;