diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-29 20:07:31 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-29 20:07:31 -0500 |
| commit | 2adb5f008c289d533d1d2310d7fade2206153144 (patch) | |
| tree | ca3eafb1e0e20459e76e28e93042a64318e2d012 /src/font.cpp | |
| parent | 4c241454f5698de3e6a5be07feb22ce930d63002 (diff) | |
pke: refactor: reduce image resource var ambiguity
Diffstat (limited to 'src/font.cpp')
| -rw-r--r-- | src/font.cpp | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/src/font.cpp b/src/font.cpp index 59fb2af..f65866e 100644 --- a/src/font.cpp +++ b/src/font.cpp @@ -43,6 +43,7 @@ FontType* FontType_GetFonts(FontTypeIndex &count) } FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle, AssetHandle glyphsHandle) { + PKVK_TmpBufferDetails tmpBufferDetails{}; VkResult vkResult; pk_arr arr_vert_mem_reqs; memset(&arr_vert_mem_reqs, 0, sizeof(pk_arr)); @@ -241,12 +242,10 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle /* * Vulkan data transfer */ - VkBuffer transferBuffer; - VkDeviceMemory transferMemory; - void *deviceData; - VkDeviceSize runningOffset, alignmentPadding; + VkDeviceSize runningOffset = 0; + VkDeviceSize alignmentPadding = 0; // vert - BeginTransferBuffer(combined_vert_mem_reqs.size, transferBuffer, transferMemory, deviceData); + PKVK_BeginBuffer(transferFamilyIndex, combined_vert_mem_reqs.size, tmpBufferDetails); { index = 0; runningOffset = 0; @@ -309,17 +308,17 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle char *dstPtr = nullptr; char *srcPtr = nullptr; - dstPtr = static_cast<char *>(deviceData) + runningOffset; + dstPtr = static_cast<char *>(tmpBufferDetails.deviceData) + runningOffset; srcPtr = reinterpret_cast<char *>(pkeIntrinsicsPlane.vert); memcpy(dstPtr, srcPtr, sizeVert); runningOffset += sizeVert; - dstPtr = static_cast<char *>(deviceData) + runningOffset; + dstPtr = static_cast<char *>(tmpBufferDetails.deviceData) + runningOffset; srcPtr = reinterpret_cast<char *>(pkeIntrinsicsPlane.uv); memcpy(dstPtr, srcPtr, sizeUV); runningOffset += sizeUV; - dstPtr = static_cast<char *>(deviceData) + runningOffset; + dstPtr = static_cast<char *>(tmpBufferDetails.deviceData) + runningOffset; srcPtr = reinterpret_cast<char *>(pkeIntrinsicsPlane.index); memcpy(dstPtr, srcPtr, sizeIndex); // runningOffset += sizeIndex; @@ -330,7 +329,7 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle // TODO consider single-use? vkCommandBufferBeginInfo.flags = 0; vkCommandBufferBeginInfo.pInheritanceInfo = nullptr; - vkBeginCommandBuffer(transferCommandBuffer, &vkCommandBufferBeginInfo); + vkBeginCommandBuffer(tmpBufferDetails.cmdBuffer, &vkCommandBufferBeginInfo); VkBufferCopy bufferCopys[expectedBufferCount]; for (VkDeviceSize i = 0; i < expectedBufferCount; ++i) { bufferCopys[i].dstOffset = 0; @@ -338,20 +337,20 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle index = 0; bufferCopys[index].srcOffset = offsetVert; bufferCopys[index].size = sizeVert; - vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, ft->bindings.vertexBD.buffer, 1, &bufferCopys[index]); + vkCmdCopyBuffer(tmpBufferDetails.cmdBuffer, tmpBufferDetails.buffer, ft->bindings.vertexBD.buffer, 1, &bufferCopys[index]); index+=1; bufferCopys[index].srcOffset = offsetUV; bufferCopys[index].size = sizeUV; - vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, ft->bindings.uvBD.buffer, 1, &bufferCopys[index]); + vkCmdCopyBuffer(tmpBufferDetails.cmdBuffer, tmpBufferDetails.buffer, ft->bindings.uvBD.buffer, 1, &bufferCopys[index]); index+=1; bufferCopys[index].srcOffset = offsetIndex; bufferCopys[index].size = sizeIndex; - vkCmdCopyBuffer(transferCommandBuffer, transferBuffer, ft->bindings.indexBD.buffer, 1, &bufferCopys[index]); + vkCmdCopyBuffer(tmpBufferDetails.cmdBuffer, tmpBufferDetails.buffer, ft->bindings.indexBD.buffer, 1, &bufferCopys[index]); // index+=1; - vkEndCommandBuffer(transferCommandBuffer); + vkEndCommandBuffer(tmpBufferDetails.cmdBuffer); VkSubmitInfo submitInfo; submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; @@ -360,13 +359,13 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle submitInfo.pWaitSemaphores = nullptr; submitInfo.pWaitDstStageMask = nullptr; submitInfo.commandBufferCount = 1; - submitInfo.pCommandBuffers = &transferCommandBuffer; + submitInfo.pCommandBuffers = &tmpBufferDetails.cmdBuffer; submitInfo.signalSemaphoreCount = 0; submitInfo.pSignalSemaphores = nullptr; - vkQueueSubmit(transferQueue, 1, &submitInfo, nullptr); - vkQueueWaitIdle(transferQueue); + vkQueueSubmit(tmpBufferDetails.queue, 1, &submitInfo, nullptr); + vkQueueWaitIdle(tmpBufferDetails.queue); } - EndTransferBuffer(transferBuffer, transferMemory); + PKVK_EndBuffer(tmpBufferDetails); // set up instance buffer { ft->bindings.instanceBufferMaxCount = startingGlyphCount; @@ -376,8 +375,8 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle vkBindBufferMemory(vkDevice, ft->bindings.instanceBD.buffer, ft->deviceMemoryInst, 0); } // texture // transition image layout and copy to buffer - BeginTransferBuffer(combined_texture_mem_reqs.size, transferBuffer, transferMemory, deviceData); - memcpy(deviceData, txtr_bytes, combined_texture_mem_reqs.size); + PKVK_BeginBuffer(transferFamilyIndex, combined_texture_mem_reqs.size, tmpBufferDetails); + memcpy(tmpBufferDetails.deviceData, txtr_bytes, combined_texture_mem_reqs.size); { VkImageMemoryBarrier vkImageMemoryBarrier; vkImageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; @@ -404,9 +403,9 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle vkCommandBufferBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; vkCommandBufferBeginInfo.pInheritanceInfo = nullptr; - vkBeginCommandBuffer(transferCommandBuffer, &vkCommandBufferBeginInfo); + vkBeginCommandBuffer(tmpBufferDetails.cmdBuffer, &vkCommandBufferBeginInfo); - vkCmdPipelineBarrier(transferCommandBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &vkImageMemoryBarrier); + vkCmdPipelineBarrier(tmpBufferDetails.cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &vkImageMemoryBarrier); VkBufferImageCopy vkBufferImageCopy; vkBufferImageCopy.bufferOffset = 0; @@ -428,9 +427,9 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle .height = static_cast<uint32_t>(txtr_y), .depth = 1, }; - vkCmdCopyBufferToImage(transferCommandBuffer, transferBuffer, ft->textureImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &vkBufferImageCopy); + vkCmdCopyBufferToImage(tmpBufferDetails.cmdBuffer, tmpBufferDetails.buffer, ft->textureImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &vkBufferImageCopy); - vkEndCommandBuffer(transferCommandBuffer); + vkEndCommandBuffer(tmpBufferDetails.cmdBuffer); VkSubmitInfo submitInfo; submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; @@ -439,14 +438,15 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle submitInfo.pWaitSemaphores = nullptr; submitInfo.pWaitDstStageMask = nullptr; submitInfo.commandBufferCount = 1; - submitInfo.pCommandBuffers = &transferCommandBuffer; + submitInfo.pCommandBuffers = &tmpBufferDetails.cmdBuffer; submitInfo.signalSemaphoreCount = 0; submitInfo.pSignalSemaphores = nullptr; - vkQueueSubmit(transferQueue, 1, &submitInfo, nullptr); - vkQueueWaitIdle(transferQueue); - vkResetCommandBuffer(transferCommandBuffer, 0); + vkQueueSubmit(tmpBufferDetails.queue, 1, &submitInfo, nullptr); + vkQueueWaitIdle(tmpBufferDetails.queue); + vkResetCommandBuffer(tmpBufferDetails.cmdBuffer, 0); } - EndTransferBuffer(transferBuffer, transferMemory); + PKVK_EndBuffer(tmpBufferDetails); + PKVK_BeginBuffer(graphicsFamilyIndex, 0, tmpBufferDetails); { VkImageMemoryBarrier vkImageMemoryBarrier; vkImageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; @@ -473,11 +473,11 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle vkCommandBufferBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; vkCommandBufferBeginInfo.pInheritanceInfo = nullptr; - vkBeginCommandBuffer(graphicsCommandBuffer, &vkCommandBufferBeginInfo); + vkBeginCommandBuffer(tmpBufferDetails.cmdBuffer, &vkCommandBufferBeginInfo); - vkCmdPipelineBarrier(graphicsCommandBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, 0, nullptr, 0, nullptr, 1, &vkImageMemoryBarrier); + vkCmdPipelineBarrier(tmpBufferDetails.cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, 0, nullptr, 0, nullptr, 1, &vkImageMemoryBarrier); - vkEndCommandBuffer(graphicsCommandBuffer); + vkEndCommandBuffer(tmpBufferDetails.cmdBuffer); VkSubmitInfo submitInfo; submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; @@ -486,12 +486,13 @@ FontTypeIndex FontType_RegisterFont(pk_cstr title, AssetHandle fontTextureHandle submitInfo.pWaitSemaphores = nullptr; submitInfo.pWaitDstStageMask = nullptr; submitInfo.commandBufferCount = 1; - submitInfo.pCommandBuffers = &graphicsCommandBuffer; + submitInfo.pCommandBuffers = &tmpBufferDetails.cmdBuffer; submitInfo.signalSemaphoreCount = 0; submitInfo.pSignalSemaphores = nullptr; - vkQueueSubmit(graphicsQueue, 1, &submitInfo, nullptr); - vkQueueWaitIdle(graphicsQueue); + vkQueueSubmit(tmpBufferDetails.queue, 1, &submitInfo, nullptr); + vkQueueWaitIdle(tmpBufferDetails.queue); } + PKVK_EndBuffer(tmpBufferDetails); /* * Vulkan descriptor sets |
