runtime pipeline

This commit is contained in:
Jorijn van der Graaf 2026-02-22 00:46:38 +01:00
commit 415e523a45
20 changed files with 480 additions and 45 deletions

View file

@ -25,29 +25,13 @@ import std;
using namespace Crafter;
std::vector<RenderingElement3DVulkan> RenderingElement3DVulkan::elements;
RenderingElement3DVulkan::RenderingElement3DVulkan(Mesh& mesh, std::uint32_t customIndex, std::uint32_t mask, std::uint32_t shaderOffset) {
VkAccelerationStructureDeviceAddressInfoKHR addrInfo {
.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR,
.accelerationStructure = mesh.accelerationStructure
};
VkDeviceAddress blasDeviceAddr = VulkanDevice::vkGetAccelerationStructureDeviceAddressKHR(VulkanDevice::device, &addrInfo);
instance = {
.instanceCustomIndex = customIndex,
.mask = mask,
.instanceShaderBindingTableRecordOffset = shaderOffset,
.flags = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR,
.accelerationStructureReference = blasDeviceAddr
};
}
std::vector<RenderingElement3DVulkan*> RenderingElement3DVulkan::elements;
void RenderingElement3DVulkan::BuildTLAS(VkCommandBuffer cmd, std::uint32_t index) {
tlases[index].instanceBuffer.Resize(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, elements.size());
for(std::uint32_t i = 0; i < elements.size(); i++) {
tlases[index].instanceBuffer.value[i] = elements[i].instance;
tlases[index].instanceBuffer.value[i] = elements[i]->instance;
}
tlases[index].instanceBuffer.FlushDevice(cmd, VK_ACCESS_MEMORY_READ_BIT, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR);