summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-06-16 09:43:23 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-06-16 09:43:23 -0400
commitc1ad6ceeb301bc1f2a4f850e08587748a6d9107b (patch)
tree4a25cd669657a983f55f150e2e06e51472111fa3 /src
parent624ff894a4ecf04b6e7d0316cf452880a21d4bd2 (diff)
pke: pkvk_buffer_create handle only instance
Diffstat (limited to 'src')
-rw-r--r--src/window.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/window.cpp b/src/window.cpp
index 69b06ab..9011a72 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -316,11 +316,15 @@ void pkvk_buffer_create(pkvk_buffer_create_data *data, pkvk_buffer_create_data_o
for (uint8_t i = 0; i < data->n_buffers; ++i) {
bufferCI.size = data->buffer_byte_length[i];
if (i == data->index_index) {
- bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
+ bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
} else if (i == data->index_instance) {
- bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+ bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
} else {
- bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+ bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
}
vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &tmpBuffer);
VkMemoryRequirements tmp;
@@ -332,7 +336,9 @@ void pkvk_buffer_create(pkvk_buffer_create_data *data, pkvk_buffer_create_data_o
}
vkDestroyBuffer(vkDevice, tmpBuffer, vkAllocator);
}
- CalculateCombinedMemReqs(arr_vert_mem_reqs.next, (VkMemoryRequirements*)arr_vert_mem_reqs.data, out->memory_requirements_vertex);
+ if (arr_vert_mem_reqs.next > 0) {
+ CalculateCombinedMemReqs(arr_vert_mem_reqs.next, (VkMemoryRequirements*)arr_vert_mem_reqs.data, out->memory_requirements_vertex);
+ }
/*
* memory allocation
@@ -345,12 +351,16 @@ void pkvk_buffer_create(pkvk_buffer_create_data *data, pkvk_buffer_create_data_o
// verts
vkMemoryAllocateInfo.allocationSize = out->memory_requirements_vertex.size;
vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(out->memory_requirements_vertex.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
- vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &out->device_memory_vertex);
+ if (vkMemoryAllocateInfo.allocationSize > 0) {
+ vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &out->device_memory_vertex);
+ }
// inst
vkMemoryAllocateInfo.allocationSize = out->memory_requirements_instance.size;
vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(out->memory_requirements_instance.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
- vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &out->device_memory_instance);
+ if (vkMemoryAllocateInfo.allocationSize > 0) {
+ vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &out->device_memory_instance);
+ }
// data transfer
PKVK_TmpBufferDetails tmpBufferDetails{};
@@ -360,7 +370,6 @@ void pkvk_buffer_create(pkvk_buffer_create_data *data, pkvk_buffer_create_data_o
VkBufferCopy buffer_copy{};
buffer_copy.dstOffset = 0;
- // vert
PKVK_BeginBuffer(transferFamilyIndex, out->memory_requirements_vertex.size, tmpBufferDetails);
VkCommandBufferBeginInfo vkCommandBufferBeginInfo;
@@ -384,11 +393,15 @@ void pkvk_buffer_create(pkvk_buffer_create_data *data, pkvk_buffer_create_data_o
bufferCI.size = size;
if (i == data->index_index) {
- bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
+ bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
} else if (i == data->index_instance) {
- bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+ bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
} else {
- bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
+ bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+ bufferCI.usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
}
vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &out->buffers[i]);