diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-11-03 07:04:52 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-11-15 13:13:27 -0500 |
| commit | 96e522ecf4e369bfc533db3914c0b06c2512bedd (patch) | |
| tree | da7cf96169955d7e0ae05423184d0cca2306e849 /src/entities.cpp | |
| parent | 0f586c10920346c8190af5a71adc289483a38e47 (diff) | |
confirm buffer size after calculating combined memory requirements
Diffstat (limited to 'src/entities.cpp')
| -rw-r--r-- | src/entities.cpp | 89 |
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; |
