Skip to content

Commit c19becc

Browse files
committed
Fixed bug in command buffer data transfer
1 parent e964e03 commit c19becc

File tree

11 files changed

+80
-83
lines changed

11 files changed

+80
-83
lines changed

include/engine/graphics/accel.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ struct Accel {
3030

3131
void cleanup();
3232
};
33-
typedef Accel BLAS;
34-
typedef Accel TLAS;
33+
typedef Accel BLAS; //Bottom level acceleration structure
34+
typedef Accel TLAS; //Top level acceleration structure
3535
/*
3636
Instance of a Bottom Level Acceleration Structure. Has a unique transform.
3737
*/

include/engine/graphics/frame.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ struct Frame {
2424
Semaphore renderSemaphore = {};
2525
Fence renderFence = {};
2626
// Command
27-
CommandPool* commandPool = nullptr;
28-
CommandBuffer* commandBuffer = nullptr;
27+
CommandPool commandPool = {};
28+
CommandBuffer commandBuffer = {};
2929
// Uniforms
3030
std::vector<Buffer> uniformBuffers;
3131
uint32_t index = 0;

src/core/renderpasses/forward_pass.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,9 @@ void ForwardPass::setup_shader_passes() {
262262
void ForwardPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex) {
263263
PROFILING_EVENT()
264264

265-
CommandBuffer* cmd = currentFrame.commandBuffer;
266-
cmd->begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
267-
cmd->set_viewport(m_handle.extent);
265+
CommandBuffer cmd = currentFrame.commandBuffer;
266+
cmd.begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
267+
cmd.set_viewport(m_handle.extent);
268268

269269
if (scene->get_active_camera() && scene->get_active_camera()->is_active())
270270
{
@@ -288,29 +288,29 @@ void ForwardPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint
288288
Geometry* g = m->get_geometry(i);
289289
IMaterial* mat = m->get_material(g->get_material_ID());
290290

291-
cmd->set_depth_test_enable(mat->get_parameters().depthTest);
292-
cmd->set_depth_write_enable(mat->get_parameters().depthWrite);
293-
cmd->set_cull_mode(mat->get_parameters().faceCulling ? mat->get_parameters().culling
291+
cmd.set_depth_test_enable(mat->get_parameters().depthTest);
292+
cmd.set_depth_write_enable(mat->get_parameters().depthWrite);
293+
cmd.set_cull_mode(mat->get_parameters().faceCulling ? mat->get_parameters().culling
294294
: CullingMode::NO_CULLING);
295295

296296
ShaderPass* shaderPass = m_shaderPasses[mat->get_shaderpass_ID()];
297297

298298
// Bind pipeline
299-
cmd->bind_shaderpass(*shaderPass);
299+
cmd.bind_shaderpass(*shaderPass);
300300
// GLOBAL LAYOUT BINDING
301-
cmd->bind_descriptor_set(
301+
cmd.bind_descriptor_set(
302302
m_descriptors[currentFrame.index].globalDescritor, 0, *shaderPass, {0, 0});
303303
// PER OBJECT LAYOUT BINDING
304-
cmd->bind_descriptor_set(m_descriptors[currentFrame.index].objectDescritor,
304+
cmd.bind_descriptor_set(m_descriptors[currentFrame.index].objectDescritor,
305305
1,
306306
*shaderPass,
307307
{objectOffset, objectOffset});
308308
// TEXTURE LAYOUT BINDING
309309
if (shaderPass->settings.descriptorSetLayoutIDs[DescriptorLayoutType::OBJECT_TEXTURE_LAYOUT])
310-
cmd->bind_descriptor_set(mat->get_texture_descriptor(), 2, *shaderPass);
310+
cmd.bind_descriptor_set(mat->get_texture_descriptor(), 2, *shaderPass);
311311

312312
// DRAW
313-
cmd->draw_geometry(*get_VAO(g));
313+
cmd.draw_geometry(*get_VAO(g));
314314
}
315315
}
316316
}
@@ -322,28 +322,28 @@ void ForwardPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint
322322
if (scene->get_skybox()->is_active())
323323
{
324324

325-
cmd->set_depth_test_enable(true);
326-
cmd->set_depth_write_enable(true);
327-
cmd->set_cull_mode(CullingMode::NO_CULLING);
325+
cmd.set_depth_test_enable(true);
326+
cmd.set_depth_write_enable(true);
327+
cmd.set_cull_mode(CullingMode::NO_CULLING);
328328

329329
ShaderPass* shaderPass = m_shaderPasses["skybox"];
330330

331331
// Bind pipeline
332-
cmd->bind_shaderpass(*shaderPass);
332+
cmd.bind_shaderpass(*shaderPass);
333333

334334
// GLOBAL LAYOUT BINDING
335-
cmd->bind_descriptor_set(m_descriptors[currentFrame.index].globalDescritor, 0, *shaderPass, {0, 0});
335+
cmd.bind_descriptor_set(m_descriptors[currentFrame.index].globalDescritor, 0, *shaderPass, {0, 0});
336336

337-
cmd->draw_geometry(*get_VAO(scene->get_skybox()->get_box()));
337+
cmd.draw_geometry(*get_VAO(scene->get_skybox()->get_box()));
338338
}
339339
}
340340
}
341341

342342
// Draw gui contents
343343
if (m_isDefault && Frame::guiEnabled)
344-
cmd->draw_gui_data();
344+
cmd.draw_gui_data();
345345

346-
cmd->end_renderpass();
346+
cmd.end_renderpass();
347347
}
348348

349349
void ForwardPass::update_uniforms(uint32_t frameIndex, Scene* const scene) {

src/core/renderpasses/fxaa_pass.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,23 @@ void FXAAPass::setup_shader_passes() {
5757

5858
void FXAAPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex) {
5959

60-
CommandBuffer* cmd = currentFrame.commandBuffer;
61-
cmd->begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
62-
cmd->set_viewport(m_handle.extent);
60+
CommandBuffer cmd = currentFrame.commandBuffer;
61+
cmd.begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
62+
cmd.set_viewport(m_handle.extent);
6363

6464
ShaderPass* shaderPass = m_shaderPasses["fxaa"];
6565

66-
cmd->bind_shaderpass(*shaderPass);
67-
cmd->bind_descriptor_set(m_imageDescriptorSet, 0, *shaderPass);
66+
cmd.bind_shaderpass(*shaderPass);
67+
cmd.bind_descriptor_set(m_imageDescriptorSet, 0, *shaderPass);
6868

6969
Geometry* g = m_vignette->get_geometry();
70-
cmd->draw_geometry(*get_VAO(g));
70+
cmd.draw_geometry(*get_VAO(g));
7171

7272
// Draw gui contents
7373
if (m_isDefault && Frame::guiEnabled)
74-
cmd->draw_gui_data();
74+
cmd.draw_gui_data();
7575

76-
cmd->end_renderpass();
76+
cmd.end_renderpass();
7777
}
7878

7979
void FXAAPass::connect_to_previous_images(std::vector<Image> images) {

src/core/renderpasses/irradiance_compute_pass.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,18 @@ void IrrandianceComputePass::setup_shader_passes() {
5555

5656
void IrrandianceComputePass::render(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex) {
5757

58-
CommandBuffer* cmd = currentFrame.commandBuffer;
59-
cmd->begin_renderpass(m_handle, m_framebuffers[0]);
60-
cmd->set_viewport(m_handle.extent);
58+
CommandBuffer cmd = currentFrame.commandBuffer;
59+
cmd.begin_renderpass(m_handle, m_framebuffers[0]);
60+
cmd.set_viewport(m_handle.extent);
6161

6262
ShaderPass* shaderPass = m_shaderPasses["irr"];
63-
cmd->bind_shaderpass(*shaderPass);
64-
cmd->bind_descriptor_set(m_captureDescriptorSet, 0, *shaderPass);
63+
cmd.bind_shaderpass(*shaderPass);
64+
cmd.bind_descriptor_set(m_captureDescriptorSet, 0, *shaderPass);
6565

6666
Geometry* g = scene->get_skybox()->get_box();
67-
cmd->draw_geometry(*get_VAO(g));
67+
cmd.draw_geometry(*get_VAO(g));
6868

69-
cmd->end_renderpass();
69+
cmd.end_renderpass();
7070
}
7171

7272
void IrrandianceComputePass::update_uniforms(uint32_t frameIndex, Scene* const scene) {

src/core/renderpasses/panorama_conversion_pass.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,17 @@ void PanoramaConverterPass::setup_shader_passes() {
5454

5555
void PanoramaConverterPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex) {
5656

57-
CommandBuffer* cmd = currentFrame.commandBuffer;
58-
cmd->begin_renderpass(m_handle, m_framebuffers[0]);
59-
cmd->set_viewport(m_handle.extent);
57+
CommandBuffer cmd = currentFrame.commandBuffer;
58+
cmd.begin_renderpass(m_handle, m_framebuffers[0]);
59+
cmd.set_viewport(m_handle.extent);
6060

6161
ShaderPass* shaderPass = m_shaderPasses["converter"];
62-
cmd->bind_shaderpass(*shaderPass);
63-
cmd->bind_descriptor_set(m_panoramaDescriptorSet, 0, *shaderPass);
62+
cmd.bind_shaderpass(*shaderPass);
63+
cmd.bind_descriptor_set(m_panoramaDescriptorSet, 0, *shaderPass);
6464

6565
Geometry* g = m_vignette->get_geometry();
66-
cmd->draw_geometry(*get_VAO(g));
67-
cmd->end_renderpass();
66+
cmd.draw_geometry(*get_VAO(g));
67+
cmd.end_renderpass();
6868
}
6969

7070
void PanoramaConverterPass::update_uniforms(uint32_t frameIndex, Scene* const scene) {

src/core/renderpasses/shadow_pass.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,14 @@ void ShadowPass::setup_shader_passes() {
149149
void ShadowPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex) {
150150
PROFILING_EVENT()
151151

152-
CommandBuffer* cmd = currentFrame.commandBuffer;
153-
cmd->begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
154-
cmd->set_viewport(m_handle.extent);
152+
CommandBuffer cmd = currentFrame.commandBuffer;
153+
cmd.begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
154+
cmd.set_viewport(m_handle.extent);
155155

156-
cmd->set_depth_bias_enable(true);
156+
cmd.set_depth_bias_enable(true);
157157
float depthBiasConstant = 0.0;
158158
float depthBiasSlope = 0.0f;
159-
cmd->set_depth_bias(depthBiasConstant, 0.0f, depthBiasSlope);
159+
cmd.set_depth_bias(depthBiasConstant, 0.0f, depthBiasSlope);
160160

161161
int mesh_idx = 0;
162162
for (Mesh* m : scene->get_meshes())
@@ -178,30 +178,30 @@ void ShadowPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint3
178178
? m_shaderPasses["shadow"]
179179
: m_shaderPasses["shadowLine"];
180180

181-
cmd->set_depth_test_enable(mat->get_parameters().depthTest);
182-
cmd->set_depth_write_enable(mat->get_parameters().depthWrite);
183-
cmd->set_cull_mode(mat->get_parameters().faceCulling ? mat->get_parameters().culling
181+
cmd.set_depth_test_enable(mat->get_parameters().depthTest);
182+
cmd.set_depth_write_enable(mat->get_parameters().depthWrite);
183+
cmd.set_cull_mode(mat->get_parameters().faceCulling ? mat->get_parameters().culling
184184
: CullingMode::NO_CULLING);
185185

186-
cmd->bind_shaderpass(*shaderPass);
186+
cmd.bind_shaderpass(*shaderPass);
187187
// GLOBAL LAYOUT BINDING
188-
cmd->bind_descriptor_set(m_descriptors[currentFrame.index].globalDescritor, 0, *shaderPass, {0, 0});
188+
cmd.bind_descriptor_set(m_descriptors[currentFrame.index].globalDescritor, 0, *shaderPass, {0, 0});
189189
// PER OBJECT LAYOUT BINDING
190-
cmd->bind_descriptor_set(m_descriptors[currentFrame.index].objectDescritor,
190+
cmd.bind_descriptor_set(m_descriptors[currentFrame.index].objectDescritor,
191191
1,
192192
*shaderPass,
193193
{objectOffset, objectOffset});
194194

195195
// DRAW
196196
Geometry* g = m->get_geometry(i);
197-
cmd->draw_geometry(*get_VAO(g));
197+
cmd.draw_geometry(*get_VAO(g));
198198
}
199199
}
200200
mesh_idx++;
201201
}
202202
}
203203

204-
cmd->end_renderpass();
204+
cmd.end_renderpass();
205205
}
206206

207207
} // namespace Core

src/core/renderpasses/variance_shadow_pass.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,14 @@ void VarianceShadowPass::setup_shader_passes() {
150150
void VarianceShadowPass::render(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex) {
151151
PROFILING_EVENT()
152152

153-
CommandBuffer* cmd = currentFrame.commandBuffer;
154-
cmd->begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
155-
cmd->set_viewport(m_handle.extent);
153+
CommandBuffer cmd = currentFrame.commandBuffer;
154+
cmd.begin_renderpass(m_handle, m_framebuffers[presentImageIndex]);
155+
cmd.set_viewport(m_handle.extent);
156156

157-
cmd->set_depth_bias_enable(true);
157+
cmd.set_depth_bias_enable(true);
158158
float depthBiasConstant = 0.0;
159159
float depthBiasSlope = 0.0f;
160-
cmd->set_depth_bias(depthBiasConstant, 0.0f, depthBiasSlope);
160+
cmd.set_depth_bias(depthBiasConstant, 0.0f, depthBiasSlope);
161161

162162
int mesh_idx = 0;
163163
for (Mesh* m : scene->get_meshes())
@@ -179,30 +179,30 @@ void VarianceShadowPass::render(Graphics::Frame& currentFrame, Scene* const scen
179179
? m_shaderPasses["shadowTri"]
180180
: m_shaderPasses["shadowLine"];
181181

182-
cmd->set_depth_test_enable(mat->get_parameters().depthTest);
183-
cmd->set_depth_write_enable(mat->get_parameters().depthWrite);
184-
cmd->set_cull_mode(mat->get_parameters().faceCulling ? mat->get_parameters().culling
182+
cmd.set_depth_test_enable(mat->get_parameters().depthTest);
183+
cmd.set_depth_write_enable(mat->get_parameters().depthWrite);
184+
cmd.set_cull_mode(mat->get_parameters().faceCulling ? mat->get_parameters().culling
185185
: CullingMode::NO_CULLING);
186186

187-
cmd->bind_shaderpass(*shaderPass);
187+
cmd.bind_shaderpass(*shaderPass);
188188
// GLOBAL LAYOUT BINDING
189-
cmd->bind_descriptor_set(m_descriptors[currentFrame.index].globalDescritor, 0, *shaderPass, {0, 0});
189+
cmd.bind_descriptor_set(m_descriptors[currentFrame.index].globalDescritor, 0, *shaderPass, {0, 0});
190190
// PER OBJECT LAYOUT BINDING
191-
cmd->bind_descriptor_set(m_descriptors[currentFrame.index].objectDescritor,
191+
cmd.bind_descriptor_set(m_descriptors[currentFrame.index].objectDescritor,
192192
1,
193193
*shaderPass,
194194
{objectOffset, objectOffset});
195195

196196
// DRAW
197197
Geometry* g = m->get_geometry(i);
198-
cmd->draw_geometry(*get_VAO(g));
198+
cmd.draw_geometry(*get_VAO(g));
199199
}
200200
}
201201
mesh_idx++;
202202
}
203203
}
204204

205-
cmd->end_renderpass();
205+
cmd.end_renderpass();
206206
}
207207

208208
} // namespace Core

src/graphics/device.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -382,13 +382,10 @@ Fence Device::create_fence() {
382382
return fence;
383383
}
384384
Frame Device::create_frame(uint16_t id) {
385-
Frame frame = {};
386-
frame.index = id;
387-
frame.commandPool = new CommandPool;
388-
frame.commandBuffer = new CommandBuffer;
389-
*frame.commandPool = create_command_pool(QueueType::GRAPHIC_QUEUE, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
390-
*frame.commandBuffer = create_command_buffer(*frame.commandPool);
391-
385+
Frame frame = {};
386+
frame.index = id;
387+
frame.commandPool = create_command_pool(QueueType::GRAPHIC_QUEUE, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
388+
frame.commandBuffer = create_command_buffer(frame.commandPool);
392389
frame.renderFence = create_fence();
393390
frame.renderSemaphore = create_semaphore();
394391
frame.presentSemaphore = create_semaphore();

src/graphics/frame.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Graphics {
77
bool Frame::guiEnabled = false;
88

99
void Frame::cleanup() {
10-
commandPool->cleanup();
10+
commandPool.cleanup();
1111
renderFence.cleanup();
1212
renderSemaphore.cleanup();
1313
presentSemaphore.cleanup();

0 commit comments

Comments
 (0)