diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-06-16 09:43:23 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-06-16 09:43:23 -0400 |
| commit | c1ad6ceeb301bc1f2a4f850e08587748a6d9107b (patch) | |
| tree | 4a25cd669657a983f55f150e2e06e51472111fa3 /src | |
| parent | 624ff894a4ecf04b6e7d0316cf452880a21d4bd2 (diff) | |
pke: pkvk_buffer_create handle only instance
Diffstat (limited to 'src')
| -rw-r--r-- | src/window.cpp | 33 |
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]); |
