diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-23 21:57:31 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-23 21:57:31 -0500 |
| commit | e93eb289ca44e98967482ab80fd5329f85ccd03e (patch) | |
| tree | 4164b6d5b9ac2e40d18ec3eea52730c9f9606ccb /src/entities.cpp | |
| parent | 846a6e1185417ee3e187edc06ef327d180bf0d9b (diff) | |
pke: first-pass 2d overlay render pass scaffolding
Diffstat (limited to 'src/entities.cpp')
| -rw-r--r-- | src/entities.cpp | 72 |
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); |
