1
1
#include " ../framework/vulkanRtApp.h"
2
2
#include " ../framework/rayTracingPipeline.h"
3
+ #include " ../framework/utilities.h"
3
4
4
5
class TransformApp : public VulkanRayTracingApp
5
6
{
@@ -14,11 +15,11 @@ class TransformApp : public VulkanRayTracingApp
14
15
magma::AccelerationStructureGeometryInstances geometryInstance;
15
16
std::unique_ptr<magma::AccelerationStructureInputBuffer> vertexBuffer;
16
17
std::unique_ptr<magma::AccelerationStructureInstanceBuffer<magma::AccelerationStructureInstance>> instanceBuffer;
17
- std::shared_ptr <magma::Buffer> scratchBuffer;
18
- std::shared_ptr <magma::BottomLevelAccelerationStructure> bottomLevel;
19
- std::shared_ptr <magma::TopLevelAccelerationStructure> topLevel;
20
- std::shared_ptr <magma::DescriptorSet> descriptorSet;
21
- std::shared_ptr <magma::RayTracingPipeline> pipeline;
18
+ std::unique_ptr <magma::Buffer> scratchBuffer;
19
+ std::unique_ptr <magma::BottomLevelAccelerationStructure> bottomLevel;
20
+ std::unique_ptr <magma::TopLevelAccelerationStructure> topLevel;
21
+ std::unique_ptr <magma::DescriptorSet> descriptorSet;
22
+ std::unique_ptr <magma::RayTracingPipeline> pipeline;
22
23
magma::ShaderBindingTable shaderBindingTable;
23
24
24
25
public:
@@ -52,7 +53,7 @@ class TransformApp : public VulkanRayTracingApp
52
53
constexpr float zn = 0 .1f , zf = 1 .f ;
53
54
const rapid::matrix view = rapid::lookAtRH (eye, center, up);
54
55
const rapid::matrix proj = rapid::perspectiveFovRH (fov, aspect, zn, zf);
55
- magma::helpers::mapScoped (viewUniforms,
56
+ magma::map (viewUniforms,
56
57
[&view, &proj](View *data)
57
58
{
58
59
data->viewInv = rapid::inverse (view);
@@ -74,25 +75,25 @@ class TransformApp : public VulkanRayTracingApp
74
75
75
76
void createGeometry ()
76
77
{
77
- alignas (MAGMA_ALIGNMENT) const magma::vt::Pos3f vertices[] = {
78
+ const magma::vt::Pos3f vertices[] = {
78
79
{ 0 .0f ,-0 .3f , 0 .f },
79
80
{-0 .6f , 0 .3f , 0 .f },
80
81
{ 0 .6f , 0 .3f , 0 .f }
81
82
};
82
- vertexBuffer = magma::helpers:: makeInputBuffer (vertices, cmdBufferCopy);
83
- geometry = magma::AccelerationStructureGeometryTriangles (VK_FORMAT_R32G32B32_SFLOAT, vertexBuffer);
83
+ vertexBuffer = utilities:: makeInputBuffer (vertices, cmdBufferCopy, allocator );
84
+ geometry = magma::AccelerationStructureGeometryTriangles (VK_FORMAT_R32G32B32_SFLOAT, vertexBuffer. get () );
84
85
}
85
86
86
87
void createAccelerationStructures ()
87
88
{
88
- bottomLevel = std::make_shared <magma::BottomLevelAccelerationStructure>(device,
89
+ bottomLevel = std::make_unique <magma::BottomLevelAccelerationStructure>(device,
89
90
std::list<magma::AccelerationStructureGeometry>{geometry},
90
91
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
91
92
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR);
92
93
instanceBuffer = std::make_unique<magma::AccelerationStructureInstanceBuffer<magma::AccelerationStructureInstance>>(device, 1 );
93
- geometryInstance = magma::AccelerationStructureGeometryInstances (instanceBuffer);
94
+ geometryInstance = magma::AccelerationStructureGeometryInstances (instanceBuffer. get () );
94
95
instanceBuffer->getInstance (0 ).accelerationStructureReference = bottomLevel->getReference ();
95
- topLevel = std::make_shared <magma::TopLevelAccelerationStructure>(device,
96
+ topLevel = std::make_unique <magma::TopLevelAccelerationStructure>(device,
96
97
geometryInstance,
97
98
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
98
99
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR | VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR);
@@ -124,7 +125,7 @@ class TransformApp : public VulkanRayTracingApp
124
125
{
125
126
setTable.view = viewUniforms;
126
127
setTable.topLevel = topLevel;
127
- descriptorSet = std::make_shared <magma::DescriptorSet>(descriptorPool, setTable, VK_SHADER_STAGE_RAYGEN_BIT_KHR);
128
+ descriptorSet = std::make_unique <magma::DescriptorSet>(descriptorPool, setTable, VK_SHADER_STAGE_RAYGEN_BIT_KHR);
128
129
}
129
130
130
131
void setupPipeline ()
@@ -134,20 +135,20 @@ class TransformApp : public VulkanRayTracingApp
134
135
magma::TrianglesHitRayTracingShaderGroup (1 ),
135
136
magma::GeneralRayTracingShaderGroup (2 )
136
137
};
137
- auto layout = std::shared_ptr <magma::PipelineLayout>(new magma::PipelineLayout (
138
+ auto layout = std::unique_ptr <magma::PipelineLayout>(new magma::PipelineLayout (
138
139
{
139
140
descriptorSet->getLayout (),
140
141
swapchainDescriptorSets.front ()->getLayout (),
141
142
}));
142
- pipeline = std::shared_ptr <magma::RayTracingPipeline>(new RayTracingPipeline (device,
143
+ pipeline = std::unique_ptr <magma::RayTracingPipeline>(new RayTracingPipeline (device,
143
144
{" trace" , " hit" , " miss" }, shaderGroups, 1 , std::move (layout)));
144
145
shaderBindingTable.build (pipeline, cmdBufferCopy);
145
146
}
146
147
147
148
void recordCommandBuffer (uint32_t index)
148
149
{
149
- auto & cmdBuffer = commandBuffers[index];
150
- auto & backBuffer = swapchainImageViews[index]->getImage ();
150
+ std::shared_ptr<magma::CommandBuffer> & cmdBuffer = commandBuffers[index];
151
+ magma::Image * backBuffer = swapchainImageViews[index]->getImage ();
151
152
cmdBuffer->begin ();
152
153
{
153
154
backBuffer->layoutTransition (VK_IMAGE_LAYOUT_GENERAL, cmdBuffer);
0 commit comments