More ray tracing changes
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user