More ray tracing changes

This commit is contained in:
Dynamitos
2024-07-12 13:33:52 +02:00
parent a9089bd997
commit 8387ad6ffe
33 changed files with 527 additions and 292 deletions
+26 -2
View File
@@ -1,5 +1,6 @@
#pragma once
#include "Buffer.h"
#include "Descriptor.h"
#include "Graphics.h"
#include "Graphics/Initializer.h"
#include "Graphics/RayTracing.h"
@@ -12,12 +13,23 @@ class BottomLevelAS : public Gfx::BottomLevelAS {
BottomLevelAS(PGraphics graphics, const Gfx::BottomLevelASCreateInfo& createInfo);
~BottomLevelAS();
uint64 getDeviceAddress() const { return buffer->deviceAddress; }
constexpr VkTransformMatrixKHR getTransform() const { return matrix; }
constexpr uint64 getIndexOffset() const { return indexOffset; }
constexpr uint64 getVertexOffset() const { return vertexOffset; }
constexpr uint64 getVertexCount() const { return vertexCount; }
constexpr uint32 getPrimitiveCount() const { return primitiveCount; }
private:
PGraphics graphics;
VkAccelerationStructureKHR handle;
OBufferAllocation buffer;
PMaterialInstance material;
VkTransformMatrixKHR matrix;
uint64 indexOffset;
uint64 vertexOffset;
uint64 vertexCount;
uint32 primitiveCount;
friend class Graphics;
};
DEFINE_REF(BottomLevelAS)
class TopLevelAS : public Gfx::TopLevelAS {
@@ -31,13 +43,14 @@ class TopLevelAS : public Gfx::TopLevelAS {
VkAccelerationStructureKHR handle;
OBufferAllocation instanceAllocation;
OBufferAllocation buffer;
friend class DescriptorSet;
};
DEFINE_REF(TopLevelAS)
class RayTracingPipeline : public Gfx::RayTracingPipeline {
public:
RayTracingPipeline(PGraphics graphics, VkPipeline handle, OBufferAllocation rayGen, uint64 rayGenStride, OBufferAllocation hit,
uint64 hitStride, OBufferAllocation miss, uint64 missStride, Gfx::PPipelineLayout layout);
uint64 hitStride, OBufferAllocation miss, uint64 missStride, OBufferAllocation callable, uint64 callableStride,
Gfx::PPipelineLayout layout);
virtual ~RayTracingPipeline();
void bind(VkCommandBuffer handle);
VkStridedDeviceAddressRegionKHR getRayGenRegion() {
@@ -61,6 +74,15 @@ class RayTracingPipeline : public Gfx::RayTracingPipeline {
.size = miss->size,
};
}
VkStridedDeviceAddressRegionKHR getCallableRegion() {
return VkStridedDeviceAddressRegionKHR{
.deviceAddress = callable->deviceAddress,
.stride = callableStride,
.size = callable->size,
};
}
VkPipelineLayout getLayout() const { return layout.cast<PipelineLayout>()->getHandle(); }
private:
PGraphics graphics;
VkPipeline pipeline;
@@ -70,6 +92,8 @@ class RayTracingPipeline : public Gfx::RayTracingPipeline {
uint64 hitStride;
OBufferAllocation miss;
uint64 missStride;
OBufferAllocation callable;
uint64 callableStride;
};
DEFINE_REF(RayTracingPipeline)
} // namespace Vulkan