summaryrefslogtreecommitdiff
path: root/src/entities.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-01-23 21:57:31 -0500
committerJonathan Bradley <jcb@pikum.xyz>2025-01-23 21:57:31 -0500
commite93eb289ca44e98967482ab80fd5329f85ccd03e (patch)
tree4164b6d5b9ac2e40d18ec3eea52730c9f9606ccb /src/entities.cpp
parent846a6e1185417ee3e187edc06ef327d180bf0d9b (diff)
pke: first-pass 2d overlay render pass scaffolding
Diffstat (limited to 'src/entities.cpp')
-rw-r--r--src/entities.cpp72
1 files changed, 19 insertions, 53 deletions
diff --git a/src/entities.cpp b/src/entities.cpp
index 179ce4b..123c095 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -133,40 +133,6 @@ EntityType *EntityType_FindByEntityHandle(EntityHandle handle) {
return nullptr;
}
-void CalculateCombinedMemReqs(uint64_t memReqsCount, VkMemoryRequirements *memReqs, VkMemoryRequirements &combinedMemReqs) {
- combinedMemReqs.size = 0;
- combinedMemReqs.alignment = memReqs[0].alignment;
- combinedMemReqs.memoryTypeBits = memReqs[0].memoryTypeBits;
- for (uint64_t i = 1; i < memReqsCount; ++i) {
- combinedMemReqs.memoryTypeBits |= memReqs[i].memoryTypeBits;
- if (combinedMemReqs.alignment == memReqs[i].alignment) {
- continue;
- }
- VkDeviceSize larger, smaller;
- if (combinedMemReqs.alignment > memReqs[i].alignment) {
- larger = combinedMemReqs.alignment;
- smaller = memReqs[i].alignment;
- } else {
- larger = memReqs[i].alignment;
- smaller = combinedMemReqs.alignment;
- }
- if (larger % smaller == 0) {
- combinedMemReqs.alignment = larger;
- continue;
- }
- int combined = larger * smaller;
- while ((combined / 2) % 2 == 0 && (combined / 2) % larger == 0) {
- combined /= 2;
- }
- combinedMemReqs.alignment = combined;
- }
- for (uint64_t i = 0; i < memReqsCount; ++i) {
- uint32_t alignmentPadding = memReqs[i].size % combinedMemReqs.alignment;
- memReqs[i].size += (alignmentPadding == 0 ? 0 : combinedMemReqs.alignment - alignmentPadding);
- combinedMemReqs.size += memReqs[i].size;
- }
-}
-
struct EntityTypeDetails_LoadHelperStruct {
EntityTypeDetails *etd = nullptr;
AssetHandle textureAssetHandle = AssetHandle_MAX;
@@ -644,7 +610,7 @@ void EntityType_LoadTexture(EntityType_LoadHelperStruct &helper, const int64_t i
VkDescriptorSetLayout descriptorSets[MAX_FRAMES_IN_FLIGHT];
for (long i = 0; i < MAX_FRAMES_IN_FLIGHT; ++i) {
- descriptorSets[i] = pkePipelines.vkDescriptorSetLayout_Texture;
+ descriptorSets[i] = pkePipelines.descr_layouts.named.texture;
}
VkDescriptorSetAllocateInfo vkDescriptorSetAllocateInfo;
vkDescriptorSetAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
@@ -773,8 +739,8 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh
// 2023-09-27 - JCB
// I don't know where else to put this
- etdHelper.etd->grBinds->instanceFirstBinding = index;
- etdHelper.etd->grBinds->instanceBindingCount = 1;
+ etdHelper.etd->grBinds->instanceBD.firstBinding = index;
+ etdHelper.etd->grBinds->instanceBD.bindingCount = 1;
// no index += 1 because index just happens to be the right value here for
// the binding index, whereas binding the IndexBuffer doesn't need a binding index.
@@ -878,8 +844,8 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh
etdHelper.etd->grBinds->instanceBufferMaxCount = etdHelper.etd->grBinds->instanceBufferMaxCount < 1 ? 1 : etdHelper.etd->grBinds->instanceBufferMaxCount;
bufferCI.size = sizeof(glm::mat4) * etdHelper.etd->grBinds->instanceBufferMaxCount;
bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
- vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->instanceBuffer);
- vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->instanceBuffer, helper.et.deviceMemoryInst, 0);
+ vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->instanceBD.buffer);
+ vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->instanceBD.buffer, helper.et.deviceMemoryInst, 0);
// bullet
@@ -1094,8 +1060,8 @@ void EntityType_Load(EntityType &et) {
* I don't like that we're just copying this.
* This should be moved to window.cpp.
*/
- etdHelper.etd->grBinds->vkPipelineLayout = pkePipelines.vkPipelineLayout_Texture;
- etdHelper.etd->grBinds->graphicsPipeline = pkePipelines.pipelines.named.Texture;
+ etdHelper.etd->grBinds->vkPipelineLayout = pkePipelines.pipe_layouts.named.texture;
+ etdHelper.etd->grBinds->graphicsPipeline = pkePipelines.pipelines.named.texture;
// handle texture
EntityType_LoadTexture(helper, i);
@@ -1185,14 +1151,14 @@ void EntityType_Unload(EntityType &et, CompGrBinds *grBindsArr[1]) {
grBinds->physIndxBD.bindingCount = 0;
grBinds->physIndxBD.offsets[0] = 0;
- if (grBinds->instanceBuffer != VK_NULL_HANDLE)
- vkDestroyBuffer(vkDevice, grBinds->instanceBuffer, vkAllocator);
- grBinds->instanceBuffer = VK_NULL_HANDLE;
- grBinds->instanceFirstBinding = 0;
- grBinds->instanceBindingCount = 0;
+ if (grBinds->instanceBD.buffer != VK_NULL_HANDLE)
+ vkDestroyBuffer(vkDevice, grBinds->instanceBD.buffer, vkAllocator);
+ grBinds->instanceBD.buffer = VK_NULL_HANDLE;
+ grBinds->instanceBD.firstBinding = 0;
+ grBinds->instanceBD.bindingCount = 0;
grBinds->instanceCounter = 0;
grBinds->instanceBufferMaxCount = 0;
- grBinds->instanceOffsets = 0;
+ grBinds->instanceBD.offsets[0] = 0;
}
if (etd.textureImageView != VK_NULL_HANDLE)
@@ -1277,7 +1243,7 @@ void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds) {
uint32_t oldSize = sizeof(glm::mat4) * oldCount;
VkDeviceMemory oldMemory(et.deviceMemoryInst);
- VkBuffer oldBuffer(grBinds.instanceBuffer);
+ VkBuffer oldBuffer(grBinds.instanceBD.buffer);
VkBufferCreateInfo vkBufferCreateInfo{};
vkBufferCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
@@ -1288,10 +1254,10 @@ void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds) {
vkBufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
vkBufferCreateInfo.queueFamilyIndexCount = 1;
vkBufferCreateInfo.pQueueFamilyIndices = &graphicsFamilyIndex;
- vkCreateBuffer(vkDevice, &vkBufferCreateInfo, vkAllocator, &grBinds.instanceBuffer);
+ vkCreateBuffer(vkDevice, &vkBufferCreateInfo, vkAllocator, &grBinds.instanceBD.buffer);
VkMemoryRequirements vkMemoryRequirementsInst;
- vkGetBufferMemoryRequirements(vkDevice, grBinds.instanceBuffer, &vkMemoryRequirementsInst);
+ vkGetBufferMemoryRequirements(vkDevice, grBinds.instanceBD.buffer, &vkMemoryRequirementsInst);
VkMemoryAllocateInfo vkMemoryAllocateInfo;
vkMemoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
@@ -1300,7 +1266,7 @@ void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds) {
vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(vkMemoryRequirementsInst.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &et.deviceMemoryInst);
- vkBindBufferMemory(vkDevice, grBinds.instanceBuffer, et.deviceMemoryInst, 0);
+ vkBindBufferMemory(vkDevice, grBinds.instanceBD.buffer, et.deviceMemoryInst, 0);
// copy data
{
@@ -1323,7 +1289,7 @@ void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds) {
memBarriers[1].dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
memBarriers[1].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
memBarriers[1].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
- memBarriers[1].buffer = grBinds.instanceBuffer;
+ memBarriers[1].buffer = grBinds.instanceBD.buffer;
memBarriers[1].offset = 0;
memBarriers[1].size = vkMemoryRequirementsInst.size;
@@ -1341,7 +1307,7 @@ void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds) {
vkBufferCopy.srcOffset = 0;
vkBufferCopy.dstOffset = 0;
vkBufferCopy.size = oldSize;
- vkCmdCopyBuffer(graphicsCommandBuffer, oldBuffer, grBinds.instanceBuffer, 1, &vkBufferCopy);
+ vkCmdCopyBuffer(graphicsCommandBuffer, oldBuffer, grBinds.instanceBD.buffer, 1, &vkBufferCopy);
vkEndCommandBuffer(graphicsCommandBuffer);