summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-01-16 14:57:16 -0500
committerJonathan Bradley <jcb@pikum.xyz>2025-01-16 14:57:16 -0500
commit15524958f409b1f13a1deffc4dd8c1fbddefaf28 (patch)
tree803313d44006be0f35e393e43a04b02dbed82989 /src
parent727c5e90798455703b88834aa864df94837e8956 (diff)
pke: CompGrBinds sub-structs
Diffstat (limited to 'src')
-rw-r--r--src/components.hpp22
-rw-r--r--src/entities.cpp90
-rw-r--r--src/window.cpp8
3 files changed, 54 insertions, 66 deletions
diff --git a/src/components.hpp b/src/components.hpp
index 6b99a8b..eb891a4 100644
--- a/src/components.hpp
+++ b/src/components.hpp
@@ -1,7 +1,6 @@
#ifndef PKE_COMPONENTS_HPP
#define PKE_COMPONENTS_HPP
-#include "dynamic-array.hpp"
#include "pk.h"
#include "physics.hpp"
#include "plugin-types.hpp"
@@ -39,27 +38,16 @@ struct CompGrBinds {
VkPipelineLayout vkPipelineLayout = VK_NULL_HANDLE;
VkPipeline graphicsPipeline = VK_NULL_HANDLE;
VkDescriptorSet *vkDescriptorSets = nullptr;
- VkBuffer vertexBuffer = VK_NULL_HANDLE;
- uint32_t vertexFirstBinding = 0;
- uint32_t vertexBindingCount = 0;
- VkDeviceSize vertexOffsets = 0;
- VkBuffer normalsBuffer = VK_NULL_HANDLE;
- uint32_t normalsFirstBinding = 0;
- uint32_t normalsBindingCount = 0;
- VkDeviceSize normalsOffsets = 0;
- VkBuffer uvBuffer = VK_NULL_HANDLE;
- uint32_t uvFirstBinding = 0;
- uint32_t uvBindingCount = 0;
- VkDeviceSize uvOffsets = 0;
- VkBuffer indexBuffer = VK_NULL_HANDLE;
- uint32_t indexBindingCount = 0;
- VkDeviceSize indexOffsets = 0;
- VkDeviceSize indexCount = 0;
+ BufferBindingDetails vertexBD;
+ BufferBindingDetails normalsBD;
+ BufferBindingDetails uvBD;
+ BufferBindingDetails indexBD;
BufferBindingDetails physVertBD;
BufferBindingDetails physNormBD;
BufferBindingDetails physUvBD;
BufferBindingDetails physIndxBD;
VkBuffer instanceBuffer = VK_NULL_HANDLE;
+ uint32_t indexCount;
uint32_t instanceFirstBinding = 0;
uint32_t instanceBindingCount = 0;
uint32_t instanceCounter = 0;
diff --git a/src/entities.cpp b/src/entities.cpp
index a81c5be..179ce4b 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -729,15 +729,15 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh
const auto &accVert = helper.gltfData->accessors[accessorIndexVertex];
uint32_t offsetVert = runningOffset;
uint32_t sizeVert = accVert.buffer_view->size;
- etdHelper.etd->grBinds->vertexFirstBinding = index;
- etdHelper.etd->grBinds->vertexBindingCount = 1;
+ etdHelper.etd->grBinds->vertexBD.firstBinding = index;
+ etdHelper.etd->grBinds->vertexBD.bindingCount = 1;
alignmentPadding = sizeVert % helper.vertMemoryRequirementsCombined.alignment;
alignmentPadding = alignmentPadding == 0 ? 0 : helper.vertMemoryRequirementsCombined.alignment - alignmentPadding;
sizeVert += alignmentPadding;
bufferCI.size = sizeVert;
bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
- vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->vertexBuffer);
- vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->vertexBuffer, helper.et.deviceMemoryVert, offsetVert);
+ vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->vertexBD.buffer);
+ vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->vertexBD.buffer, helper.et.deviceMemoryVert, offsetVert);
runningOffset += sizeVert;
index += 1;
@@ -745,14 +745,14 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh
const auto &accNorm = helper.gltfData->accessors[accessorIndexNormal];
uint32_t offsetNorm = runningOffset;
uint32_t sizeNorm = accNorm.buffer_view->size;
- etdHelper.etd->grBinds->normalsFirstBinding = index;
- etdHelper.etd->grBinds->normalsBindingCount = 1;
+ etdHelper.etd->grBinds->normalsBD.firstBinding = index;
+ etdHelper.etd->grBinds->normalsBD.bindingCount = 1;
alignmentPadding = sizeNorm % helper.vertMemoryRequirementsCombined.alignment;
alignmentPadding = alignmentPadding == 0 ? 0 : helper.vertMemoryRequirementsCombined.alignment - alignmentPadding;
sizeNorm += alignmentPadding;
bufferCI.size = sizeNorm;
- vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->normalsBuffer);
- vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->normalsBuffer, helper.et.deviceMemoryVert, offsetNorm);
+ vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->normalsBD.buffer);
+ vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->normalsBD.buffer, helper.et.deviceMemoryVert, offsetNorm);
runningOffset += sizeNorm;
index += 1;
@@ -760,14 +760,14 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh
const auto &accUV = helper.gltfData->accessors[accessorIndexUV];
uint32_t offsetUV = runningOffset;
uint32_t sizeUV = accUV.buffer_view->size;
- etdHelper.etd->grBinds->uvFirstBinding = index;
- etdHelper.etd->grBinds->uvBindingCount = 1;
+ etdHelper.etd->grBinds->uvBD.firstBinding = index;
+ etdHelper.etd->grBinds->uvBD.bindingCount = 1;
alignmentPadding = sizeUV % helper.vertMemoryRequirementsCombined.alignment;
alignmentPadding = alignmentPadding == 0 ? 0 : helper.vertMemoryRequirementsCombined.alignment - alignmentPadding;
sizeUV += alignmentPadding;
bufferCI.size = sizeUV;
- vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->uvBuffer);
- vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->uvBuffer , helper.et.deviceMemoryVert, offsetUV);
+ vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->uvBD.buffer);
+ vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->uvBD.buffer, helper.et.deviceMemoryVert, offsetUV);
runningOffset += sizeUV;
index += 1;
@@ -782,15 +782,15 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh
const auto &accIndex = helper.gltfData->accessors[accessorIndexIndex];
uint32_t offsetIndex = runningOffset;
uint32_t sizeIndex = accIndex.buffer_view->size;
- etdHelper.etd->grBinds->indexBindingCount = 1;
+ etdHelper.etd->grBinds->indexBD.bindingCount = 1;
etdHelper.etd->grBinds->indexCount = accIndex.count;
alignmentPadding = sizeIndex % helper.vertMemoryRequirementsCombined.alignment;
alignmentPadding = alignmentPadding == 0 ? 0 : helper.vertMemoryRequirementsCombined.alignment - alignmentPadding;
sizeIndex += alignmentPadding;
bufferCI.size = sizeIndex;
bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
- vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->indexBuffer);
- vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->indexBuffer, helper.et.deviceMemoryVert, offsetIndex);
+ vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &etdHelper.etd->grBinds->indexBD.buffer);
+ vkBindBufferMemory(vkDevice, etdHelper.etd->grBinds->indexBD.buffer, helper.et.deviceMemoryVert, offsetIndex);
runningOffset += sizeIndex;
// index += 1;
@@ -837,22 +837,22 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh
index = 0;
bufferCopys[index].srcOffset = offsetVert;
bufferCopys[index].size = sizeVert;
- vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->vertexBuffer, 1, &bufferCopys[index]);
+ vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->vertexBD.buffer, 1, &bufferCopys[index]);
index+=1;
bufferCopys[index].srcOffset = offsetNorm;
bufferCopys[index].size = sizeNorm;
- vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->normalsBuffer, 1, &bufferCopys[index]);
+ vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->normalsBD.buffer, 1, &bufferCopys[index]);
index+=1;
bufferCopys[index].srcOffset = offsetUV;
bufferCopys[index].size = sizeUV;
- vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->uvBuffer, 1, &bufferCopys[index]);
+ vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->uvBD.buffer, 1, &bufferCopys[index]);
index+=1;
bufferCopys[index].srcOffset = offsetIndex;
bufferCopys[index].size = sizeIndex;
- vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->indexBuffer, 1, &bufferCopys[index]);
+ vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, etdHelper.etd->grBinds->indexBD.buffer, 1, &bufferCopys[index]);
// index+=1;
vkEndCommandBuffer(transferCommandBuffer);
@@ -1129,32 +1129,32 @@ void EntityType_Unload(EntityType &et, CompGrBinds *grBindsArr[1]) {
vkDestroyDescriptorPool(vkDevice, etd.vkDescriptorPool, vkAllocator);
grBinds->vkDescriptorSets = CAFE_BABE(VkDescriptorSet);
}
- if (grBinds->vertexBuffer != VK_NULL_HANDLE)
- vkDestroyBuffer(vkDevice, grBinds->vertexBuffer, vkAllocator);
- grBinds->vertexBuffer = VK_NULL_HANDLE;
- grBinds->vertexFirstBinding = 0;
- grBinds->vertexBindingCount = 0;
- grBinds->vertexOffsets = 0;
-
- if (grBinds->normalsBuffer != VK_NULL_HANDLE)
- vkDestroyBuffer(vkDevice, grBinds->normalsBuffer, vkAllocator);
- grBinds->normalsBuffer = VK_NULL_HANDLE;
- grBinds->normalsFirstBinding = 0;
- grBinds->normalsBindingCount = 0;
- grBinds->normalsOffsets = 0;
-
- if (grBinds->uvBuffer != VK_NULL_HANDLE)
- vkDestroyBuffer(vkDevice, grBinds->uvBuffer, vkAllocator);
- grBinds->uvBuffer = VK_NULL_HANDLE;
- grBinds->uvFirstBinding = 0;
- grBinds->uvBindingCount = 0;
- grBinds->uvOffsets = 0;
-
- if (grBinds->indexBuffer != VK_NULL_HANDLE)
- vkDestroyBuffer(vkDevice, grBinds->indexBuffer, vkAllocator);
- grBinds->indexBuffer = VK_NULL_HANDLE;
- grBinds->indexBindingCount = 0;
- grBinds->indexOffsets = 0;
+ if (grBinds->vertexBD.buffer != VK_NULL_HANDLE)
+ vkDestroyBuffer(vkDevice, grBinds->vertexBD.buffer, vkAllocator);
+ grBinds->vertexBD.buffer = VK_NULL_HANDLE;
+ grBinds->vertexBD.firstBinding = 0;
+ grBinds->vertexBD.bindingCount = 0;
+ grBinds->vertexBD.offsets[0] = 0;
+
+ if (grBinds->normalsBD.buffer != VK_NULL_HANDLE)
+ vkDestroyBuffer(vkDevice, grBinds->normalsBD.buffer, vkAllocator);
+ grBinds->normalsBD.buffer = VK_NULL_HANDLE;
+ grBinds->normalsBD.firstBinding = 0;
+ grBinds->normalsBD.bindingCount = 0;
+ grBinds->normalsBD.offsets[0] = 0;
+
+ if (grBinds->uvBD.buffer != VK_NULL_HANDLE)
+ vkDestroyBuffer(vkDevice, grBinds->uvBD.buffer, vkAllocator);
+ grBinds->uvBD.buffer = VK_NULL_HANDLE;
+ grBinds->uvBD.firstBinding = 0;
+ grBinds->uvBD.bindingCount = 0;
+ grBinds->uvBD.offsets[0] = 0;
+
+ if (grBinds->indexBD.buffer != VK_NULL_HANDLE)
+ vkDestroyBuffer(vkDevice, grBinds->indexBD.buffer, vkAllocator);
+ grBinds->indexBD.buffer = VK_NULL_HANDLE;
+ grBinds->indexBD.bindingCount = 0;
+ grBinds->indexBD.offsets[0] = 0;
grBinds->indexCount = 0;
if (grBinds->physVertBD.buffer != VK_NULL_HANDLE)
diff --git a/src/window.cpp b/src/window.cpp
index 215fd0d..b83ef9a 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -2469,11 +2469,11 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) {
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, binder->graphicsPipeline);
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, binder->vkPipelineLayout, 0, 1, &binder->vkDescriptorSets[imageIndex], 0, {});
vkCmdBindVertexBuffers(commandBuffer, 0, 1, &UniformBuffers[imageIndex], offsets);
- vkCmdBindIndexBuffer(commandBuffer, binder->indexBuffer, binder->indexOffsets, VK_INDEX_TYPE_UINT16);
+ vkCmdBindIndexBuffer(commandBuffer, binder->indexBD.buffer, binder->indexBD.offsets[0], VK_INDEX_TYPE_UINT16);
- vkCmdBindVertexBuffers(commandBuffer, binder->vertexFirstBinding, binder->vertexBindingCount, &binder->vertexBuffer, &binder->vertexOffsets);
- vkCmdBindVertexBuffers(commandBuffer, binder->normalsFirstBinding, binder->normalsBindingCount, &binder->normalsBuffer, &binder->normalsOffsets);
- vkCmdBindVertexBuffers(commandBuffer, binder->uvFirstBinding, binder->uvBindingCount, &binder->uvBuffer, &binder->uvOffsets);
+ vkCmdBindVertexBuffers(commandBuffer, binder->vertexBD.firstBinding, binder->vertexBD.bindingCount, &binder->vertexBD.buffer, binder->vertexBD.offsets);
+ vkCmdBindVertexBuffers(commandBuffer, binder->normalsBD.firstBinding, binder->normalsBD.bindingCount, &binder->normalsBD.buffer, binder->normalsBD.offsets);
+ vkCmdBindVertexBuffers(commandBuffer, binder->uvBD.firstBinding, binder->uvBD.bindingCount, &binder->uvBD.buffer, binder->uvBD.offsets);
vkCmdBindVertexBuffers(commandBuffer, binder->instanceFirstBinding, binder->instanceBindingCount, &binder->instanceBuffer, &binder->instanceOffsets);
vkCmdDrawIndexed(commandBuffer, binder->indexCount, binder->instanceCounter, 0, 0, 0);