runtime pipeline
This commit is contained in:
parent
75c9ae5087
commit
415e523a45
20 changed files with 480 additions and 45 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue