Skip to content

Commit c8e70cd

Browse files
committed
Use Magma release v1.0.
Prefer unique ownership over shared where possible. Implemented make*Buffer() functions in utilities.
1 parent 1429692 commit c8e70cd

File tree

18 files changed

+243
-202
lines changed

18 files changed

+243
-202
lines changed

01-triangle/01-triangle.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ class TriangleApp : public VulkanRayTracingApp
1212
magma::AccelerationStructureGeometryInstances geometryInstance;
1313
std::unique_ptr<magma::AccelerationStructureInputBuffer> vertexBuffer;
1414
std::unique_ptr<magma::AccelerationStructureInstanceBuffer<magma::AccelerationStructureInstance>> instanceBuffer;
15-
std::shared_ptr<magma::BottomLevelAccelerationStructure> bottomLevel;
16-
std::shared_ptr<magma::TopLevelAccelerationStructure> topLevel;
17-
std::shared_ptr<magma::DescriptorSet> descriptorSet;
18-
std::shared_ptr<magma::RayTracingPipeline> pipeline;
15+
std::unique_ptr<magma::BottomLevelAccelerationStructure> bottomLevel;
16+
std::unique_ptr<magma::TopLevelAccelerationStructure> topLevel;
17+
std::unique_ptr<magma::DescriptorSet> descriptorSet;
18+
std::unique_ptr<magma::RayTracingPipeline> pipeline;
1919
magma::ShaderBindingTable shaderBindingTable;
2020

2121
public:
@@ -38,25 +38,25 @@ class TriangleApp : public VulkanRayTracingApp
3838

3939
void createGeometry()
4040
{
41-
alignas(MAGMA_ALIGNMENT) const magma::vt::Pos3f vertices[] = {
41+
const magma::vt::Pos3f vertices[] = {
4242
{ 0.0f,-0.3f, 0.f},
4343
{-0.6f, 0.3f, 0.f},
4444
{ 0.6f, 0.3f, 0.f}
4545
};
4646
vertexBuffer = std::make_unique<magma::AccelerationStructureInputBuffer>(cmdBufferCopy, sizeof(vertices), vertices);
47-
geometry = magma::AccelerationStructureGeometryTriangles(VK_FORMAT_R32G32B32_SFLOAT, vertexBuffer);
47+
geometry = magma::AccelerationStructureGeometryTriangles(VK_FORMAT_R32G32B32_SFLOAT, vertexBuffer.get());
4848
}
4949

5050
void createAccelerationStructures()
5151
{
52-
bottomLevel = std::make_shared<magma::BottomLevelAccelerationStructure>(device,
52+
bottomLevel = std::make_unique<magma::BottomLevelAccelerationStructure>(device,
5353
std::list<magma::AccelerationStructureGeometry>{geometry},
5454
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
5555
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR);
5656
instanceBuffer = std::make_unique<magma::AccelerationStructureInstanceBuffer<magma::AccelerationStructureInstance>>(device, 1);
57-
geometryInstance = magma::AccelerationStructureGeometryInstances(instanceBuffer);
57+
geometryInstance = magma::AccelerationStructureGeometryInstances(instanceBuffer.get());
5858
instanceBuffer->getInstance(0).accelerationStructureReference = bottomLevel->getReference();
59-
topLevel = std::make_shared<magma::TopLevelAccelerationStructure>(device,
59+
topLevel = std::make_unique<magma::TopLevelAccelerationStructure>(device,
6060
geometryInstance,
6161
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
6262
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR);
@@ -87,7 +87,7 @@ class TriangleApp : public VulkanRayTracingApp
8787
void setupDescriptorSet()
8888
{
8989
setTable.topLevel = topLevel;
90-
descriptorSet = std::make_shared<magma::DescriptorSet>(descriptorPool, setTable, VK_SHADER_STAGE_RAYGEN_BIT_KHR);
90+
descriptorSet = std::make_unique<magma::DescriptorSet>(descriptorPool, setTable, VK_SHADER_STAGE_RAYGEN_BIT_KHR);
9191
}
9292

9393
void setupPipeline()
@@ -97,20 +97,20 @@ class TriangleApp : public VulkanRayTracingApp
9797
magma::TrianglesHitRayTracingShaderGroup(1),
9898
magma::GeneralRayTracingShaderGroup(2)
9999
};
100-
auto layout = std::shared_ptr<magma::PipelineLayout>(new magma::PipelineLayout(
100+
auto layout = std::unique_ptr<magma::PipelineLayout>(new magma::PipelineLayout(
101101
{
102102
descriptorSet->getLayout(),
103103
swapchainDescriptorSets.front()->getLayout(),
104104
}));
105-
pipeline = std::shared_ptr<magma::RayTracingPipeline>(new RayTracingPipeline(device,
105+
pipeline = std::unique_ptr<magma::RayTracingPipeline>(new RayTracingPipeline(device,
106106
{"trace", "hit", "miss"}, shaderGroups, 1, std::move(layout)));
107107
shaderBindingTable.build(pipeline, commandBuffers[0]);
108108
}
109109

110110
void recordCommandBuffer(uint32_t index)
111111
{
112-
auto& cmdBuffer = commandBuffers[index];
113-
auto& backBuffer = swapchainImageViews[index]->getImage();
112+
std::shared_ptr<magma::CommandBuffer>& cmdBuffer = commandBuffers[index];
113+
magma::Image *backBuffer = swapchainImageViews[index]->getImage();
114114
cmdBuffer->begin();
115115
{
116116
backBuffer->layoutTransition(VK_IMAGE_LAYOUT_GENERAL, cmdBuffer);

02-transform/02-transform.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "../framework/vulkanRtApp.h"
22
#include "../framework/rayTracingPipeline.h"
3+
#include "../framework/utilities.h"
34

45
class TransformApp : public VulkanRayTracingApp
56
{
@@ -14,11 +15,11 @@ class TransformApp : public VulkanRayTracingApp
1415
magma::AccelerationStructureGeometryInstances geometryInstance;
1516
std::unique_ptr<magma::AccelerationStructureInputBuffer> vertexBuffer;
1617
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;
2223
magma::ShaderBindingTable shaderBindingTable;
2324

2425
public:
@@ -52,7 +53,7 @@ class TransformApp : public VulkanRayTracingApp
5253
constexpr float zn = 0.1f, zf = 1.f;
5354
const rapid::matrix view = rapid::lookAtRH(eye, center, up);
5455
const rapid::matrix proj = rapid::perspectiveFovRH(fov, aspect, zn, zf);
55-
magma::helpers::mapScoped(viewUniforms,
56+
magma::map(viewUniforms,
5657
[&view, &proj](View *data)
5758
{
5859
data->viewInv = rapid::inverse(view);
@@ -74,25 +75,25 @@ class TransformApp : public VulkanRayTracingApp
7475

7576
void createGeometry()
7677
{
77-
alignas(MAGMA_ALIGNMENT) const magma::vt::Pos3f vertices[] = {
78+
const magma::vt::Pos3f vertices[] = {
7879
{ 0.0f,-0.3f, 0.f},
7980
{-0.6f, 0.3f, 0.f},
8081
{ 0.6f, 0.3f, 0.f}
8182
};
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());
8485
}
8586

8687
void createAccelerationStructures()
8788
{
88-
bottomLevel = std::make_shared<magma::BottomLevelAccelerationStructure>(device,
89+
bottomLevel = std::make_unique<magma::BottomLevelAccelerationStructure>(device,
8990
std::list<magma::AccelerationStructureGeometry>{geometry},
9091
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
9192
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR);
9293
instanceBuffer = std::make_unique<magma::AccelerationStructureInstanceBuffer<magma::AccelerationStructureInstance>>(device, 1);
93-
geometryInstance = magma::AccelerationStructureGeometryInstances(instanceBuffer);
94+
geometryInstance = magma::AccelerationStructureGeometryInstances(instanceBuffer.get());
9495
instanceBuffer->getInstance(0).accelerationStructureReference = bottomLevel->getReference();
95-
topLevel = std::make_shared<magma::TopLevelAccelerationStructure>(device,
96+
topLevel = std::make_unique<magma::TopLevelAccelerationStructure>(device,
9697
geometryInstance,
9798
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
9899
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
124125
{
125126
setTable.view = viewUniforms;
126127
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);
128129
}
129130

130131
void setupPipeline()
@@ -134,20 +135,20 @@ class TransformApp : public VulkanRayTracingApp
134135
magma::TrianglesHitRayTracingShaderGroup(1),
135136
magma::GeneralRayTracingShaderGroup(2)
136137
};
137-
auto layout = std::shared_ptr<magma::PipelineLayout>(new magma::PipelineLayout(
138+
auto layout = std::unique_ptr<magma::PipelineLayout>(new magma::PipelineLayout(
138139
{
139140
descriptorSet->getLayout(),
140141
swapchainDescriptorSets.front()->getLayout(),
141142
}));
142-
pipeline = std::shared_ptr<magma::RayTracingPipeline>(new RayTracingPipeline(device,
143+
pipeline = std::unique_ptr<magma::RayTracingPipeline>(new RayTracingPipeline(device,
143144
{"trace", "hit", "miss"}, shaderGroups, 1, std::move(layout)));
144145
shaderBindingTable.build(pipeline, cmdBufferCopy);
145146
}
146147

147148
void recordCommandBuffer(uint32_t index)
148149
{
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();
151152
cmdBuffer->begin();
152153
{
153154
backBuffer->layoutTransition(VK_IMAGE_LAYOUT_GENERAL, cmdBuffer);

03-procedural-intersection/03-procedural-intersection.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ class ProceduralIntersectionApp : public VulkanRayTracingApp
1515
magma::AccelerationStructureGeometryInstances geometryInstance;
1616
std::unique_ptr<magma::AccelerationStructureInputBuffer> aabbBuffer;
1717
std::unique_ptr<magma::AccelerationStructureInstanceBuffer<magma::AccelerationStructureInstance>> instanceBuffer;
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::BottomLevelAccelerationStructure> bottomLevel;
19+
std::unique_ptr<magma::TopLevelAccelerationStructure> topLevel;
20+
std::unique_ptr<magma::DescriptorSet> descriptorSet;
21+
std::unique_ptr<magma::RayTracingPipeline> pipeline;
2222
magma::ShaderBindingTable shaderBindingTable;
2323

2424
public:
@@ -51,7 +51,7 @@ class ProceduralIntersectionApp : public VulkanRayTracingApp
5151
constexpr float zn = 1.f, zf = 2.f;
5252
const rapid::matrix view = rapid::lookAtRH(eye, center, up);
5353
rapid::matrix proj = rapid::perspectiveFovRH(fov, aspect, zn, zf);
54-
magma::helpers::mapScoped(viewUniforms,
54+
magma::map(viewUniforms,
5555
[&view, &proj](View *data)
5656
{
5757
data->viewInv = rapid::inverse(view);
@@ -66,20 +66,20 @@ class ProceduralIntersectionApp : public VulkanRayTracingApp
6666
-1, -1, -1,
6767
1, 1, 1
6868
};
69-
aabbBuffer = magma::helpers::makeInputBuffer(aabb, cmdBufferCopy);
70-
aabbGeometry = magma::AccelerationStructureGeometryAabbs(aabbBuffer);
69+
aabbBuffer = utilities::makeInputBuffer(aabb, cmdBufferCopy, allocator);
70+
aabbGeometry = magma::AccelerationStructureGeometryAabbs(aabbBuffer.get());
7171
}
7272

7373
void createAccelerationStructures()
7474
{
75-
bottomLevel = std::make_shared<magma::BottomLevelAccelerationStructure>(device,
75+
bottomLevel = std::make_unique<magma::BottomLevelAccelerationStructure>(device,
7676
std::list<magma::AccelerationStructureGeometry>{aabbGeometry},
7777
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
7878
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR);
7979
instanceBuffer = std::make_unique<magma::AccelerationStructureInstanceBuffer<magma::AccelerationStructureInstance>>(device, 1);
80-
geometryInstance = magma::AccelerationStructureGeometryInstances(instanceBuffer);
80+
geometryInstance = magma::AccelerationStructureGeometryInstances(instanceBuffer.get());
8181
instanceBuffer->getInstance(0).accelerationStructureReference = bottomLevel->getReference();
82-
topLevel = std::make_shared<magma::TopLevelAccelerationStructure>(device,
82+
topLevel = std::make_unique<magma::TopLevelAccelerationStructure>(device,
8383
geometryInstance,
8484
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
8585
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR | VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR);
@@ -111,7 +111,7 @@ class ProceduralIntersectionApp : public VulkanRayTracingApp
111111
{
112112
setTable.view = viewUniforms;
113113
setTable.topLevel = topLevel;
114-
descriptorSet = std::make_shared<magma::DescriptorSet>(descriptorPool, setTable, VK_SHADER_STAGE_RAYGEN_BIT_KHR);
114+
descriptorSet = std::make_unique<magma::DescriptorSet>(descriptorPool, setTable, VK_SHADER_STAGE_RAYGEN_BIT_KHR);
115115
}
116116

117117
void setupPipeline()
@@ -127,15 +127,15 @@ class ProceduralIntersectionApp : public VulkanRayTracingApp
127127
swapchainDescriptorSets.front()->getLayout(),
128128
}));
129129
constexpr uint32_t maxRecursionDepth = 1;
130-
pipeline = std::shared_ptr<magma::RayTracingPipeline>(new RayTracingPipeline(device,
130+
pipeline = std::unique_ptr<magma::RayTracingPipeline>(new RayTracingPipeline(device,
131131
{"trace", "miss", "hit", "raySphere"}, shaderGroups, maxRecursionDepth, std::move(layout)));
132132
shaderBindingTable.build(pipeline, cmdBufferCopy);
133133
}
134134

135135
void recordCommandBuffer(uint32_t index)
136136
{
137-
auto& cmdBuffer = commandBuffers[index];
138-
auto& backBuffer = swapchainImageViews[index]->getImage();
137+
std::shared_ptr<magma::CommandBuffer>& cmdBuffer = commandBuffers[index];
138+
magma::Image *backBuffer = swapchainImageViews[index]->getImage();
139139
cmdBuffer->begin();
140140
{
141141
backBuffer->layoutTransition(VK_IMAGE_LAYOUT_GENERAL, cmdBuffer);

0 commit comments

Comments
 (0)