Skip to content

Commit 94385a0

Browse files
committed
Make scene textures the last descriptor + free DDGI resources upon exit
1 parent b7719df commit 94385a0

File tree

17 files changed

+77
-42
lines changed

17 files changed

+77
-42
lines changed

src/Framework/Shader.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,9 @@ int Shader::compile(RenderPass* pass) {
589589
std::cout << "SPIR-V assembly:" << std::endl << assembly <<
590590
std::endl;*/
591591
binary = compile_file(filename, mstages[get_ext(filename)], str);
592+
if (filename == "src/shaders/integrators/path/path.rgen") {
593+
int a = 4;
594+
}
592595
/* std::cout << "Compiled to a binary module with " << binary.size()
593596
<< " words." << std::endl;*/
594597
}

src/Framework/VkUtils.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ VkImageLayout get_image_layout(VkDescriptorType type) {
312312
switch (type) {
313313
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
314314
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
315+
case VK_DESCRIPTOR_TYPE_SAMPLER:
315316
return VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL;
316317
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
317318
return VK_IMAGE_LAYOUT_GENERAL;

src/RayTracer/BDPT.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ void BDPT::render() {
7878
scene_ubo_buffer,
7979
scene_desc_buffer,
8080
})
81-
.bind_texture_array(diffuse_textures)
8281
.bind(mesh_lights_buffer)
82+
.bind_texture_array(scene_textures)
8383
.bind_tlas(instance->vkb.tlas);
8484
//.finalize();
8585

src/RayTracer/DDGI.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ void DDGI::render() {
166166
.push_constants(&pc_ray)
167167
.zero(g_buffer)
168168
.bind(rt_bindings)
169-
.bind_texture_array(diffuse_textures)
170169
.bind(mesh_lights_buffer)
170+
.bind_texture_array(scene_textures)
171171
.bind_tlas(instance->vkb.tlas);
172172
// Trace rays from probes
173173
uint32_t grid_size = probe_counts.x * probe_counts.y * probe_counts.z;
@@ -182,8 +182,8 @@ void DDGI::render() {
182182
.accel = instance->vkb.tlas.accel})
183183
.push_constants(&pc_ray)
184184
.bind(rt_bindings)
185-
.bind_texture_array(diffuse_textures)
186185
.bind({mesh_lights_buffer, ddgi_ubo_buffer, rt.radiance_tex, rt.dir_depth_tex})
186+
.bind_texture_array(scene_textures)
187187
.bind_tlas(instance->vkb.tlas);
188188
// Classify
189189
uint32_t wg_x = (probe_counts.x * probe_counts.y * probe_counts.z + 31) / 32;
@@ -282,8 +282,34 @@ void DDGI::destroy() {
282282
Integrator::destroy();
283283
std::vector<Buffer*> buffer_list = {
284284
&g_buffer,
285+
&direct_lighting_buffer,
286+
&ddgi_ubo_buffer,
287+
&probe_offsets_buffer
285288
};
289+
290+
std::vector<Texture*> tex_list = {
291+
&rt.radiance_tex,
292+
&rt.dir_depth_tex,
293+
&output.tex
294+
};
295+
286296
for (auto b : buffer_list) {
287297
b->destroy();
288298
}
299+
300+
for (auto t : tex_list) {
301+
t->destroy();
302+
}
303+
304+
vkDestroySampler(instance->vkb.ctx.device, bilinear_sampler, nullptr);
305+
vkDestroySampler(instance->vkb.ctx.device, nearest_sampler, nullptr);
306+
307+
for (auto& irr_tex : irr_texes) {
308+
irr_tex.destroy();
309+
}
310+
311+
for (auto& depth_tex : depth_texes) {
312+
depth_tex.destroy();
313+
}
314+
289315
}

src/RayTracer/Integrator.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,15 @@ void Integrator::init() {
129129

130130
auto add_default_texture = [this, instance]() {
131131
std::array<uint8_t, 4> nil = {0, 0, 0, 0};
132-
diffuse_textures.resize(1);
132+
scene_textures.resize(1);
133133
auto ci = make_img2d_ci(VkExtent2D{1, 1});
134-
diffuse_textures[0].load_from_data(&instance->vkb.ctx, nil.data(), 4, ci, texture_sampler);
134+
scene_textures[0].load_from_data(&instance->vkb.ctx, nil.data(), 4, ci, texture_sampler);
135135
};
136136

137137
if (!lumen_scene->textures.size()) {
138138
add_default_texture();
139139
} else {
140-
diffuse_textures.resize(lumen_scene->textures.size());
140+
scene_textures.resize(lumen_scene->textures.size());
141141
int i = 0;
142142
for (const auto& texture_path : lumen_scene->textures) {
143143
int x, y, n;
@@ -146,7 +146,7 @@ void Integrator::init() {
146146
auto size = x * y * 4;
147147
auto img_dims = VkExtent2D{(uint32_t)x, (uint32_t)y};
148148
auto ci = make_img2d_ci(img_dims, VK_FORMAT_R8G8B8A8_SRGB, VK_IMAGE_USAGE_SAMPLED_BIT, false);
149-
diffuse_textures[i].load_from_data(&instance->vkb.ctx, data, size, ci, texture_sampler, false);
149+
scene_textures[i].load_from_data(&instance->vkb.ctx, data, size, ci, texture_sampler, false);
150150
stbi_image_free(data);
151151
i++;
152152
}
@@ -299,7 +299,7 @@ void Integrator::destroy() {
299299
b->destroy();
300300
}
301301
output_tex.destroy();
302-
for (auto& tex : diffuse_textures) {
302+
for (auto& tex : scene_textures) {
303303
tex.destroy();
304304
}
305305
vkDestroySampler(instance->vkb.ctx.device, texture_sampler, nullptr);

src/RayTracer/Integrator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class Integrator {
4141
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR};
4242
LumenInstance* instance;
4343
std::vector<Light> lights;
44-
std::vector<Texture2D> diffuse_textures;
44+
std::vector<Texture2D> scene_textures;
4545
uint32_t total_light_triangle_cnt = 0;
4646
float total_light_area = 0;
4747
LumenScene* lumen_scene;

src/RayTracer/PSSMLT.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ void PSSMLT::render() {
225225
.push_constants(&pc_ray)
226226
.zero({light_path_buffer, camera_path_buffer})
227227
.bind(rt_bindings)
228-
.bind_texture_array(diffuse_textures)
229228
.bind(mesh_lights_buffer)
229+
.bind_texture_array(scene_textures)
230230
.bind_tlas(instance->vkb.tlas);
231231

232232
int counter = 0;
@@ -295,8 +295,8 @@ void PSSMLT::render() {
295295
.push_constants(&pc_ray)
296296
.zero({light_path_buffer, camera_path_buffer})
297297
.bind(rt_bindings)
298-
.bind_texture_array(diffuse_textures)
299298
.bind(mesh_lights_buffer)
299+
.bind_texture_array(scene_textures)
300300
.bind_tlas(instance->vkb.tlas);
301301

302302
instance->vkb.rg->run_and_submit(cmd);
@@ -316,8 +316,8 @@ void PSSMLT::render() {
316316
.push_constants(&pc_ray)
317317
.zero({light_path_buffer, camera_path_buffer})
318318
.bind(rt_bindings)
319-
.bind_texture_array(diffuse_textures)
320319
.bind(mesh_lights_buffer)
320+
.bind_texture_array(scene_textures)
321321
.bind_tlas(instance->vkb.tlas);
322322
};
323323
const uint32_t iter_cnt = 100;

src/RayTracer/Path.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ void Path::render() {
4545
scene_ubo_buffer,
4646
scene_desc_buffer,
4747
})
48-
.bind_texture_array(diffuse_textures)
4948
.bind(mesh_lights_buffer)
49+
.bind_texture_array(scene_textures)
5050
//.write(output_tex) // Needed if the automatic shader inference is disabled
5151
.bind_tlas(instance->vkb.tlas);
5252
instance->vkb.rg->run_and_submit(cmd);

src/RayTracer/ReSTIR.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ void ReSTIR::render() {
9797
scene_ubo_buffer,
9898
scene_desc_buffer,
9999
})
100-
.bind_texture_array(diffuse_textures)
101100
.bind(mesh_lights_buffer)
101+
.bind_texture_array(scene_textures)
102102
.bind_tlas(instance->vkb.tlas);
103103
// Spatial pass
104104
instance->vkb.rg
@@ -116,8 +116,8 @@ void ReSTIR::render() {
116116
scene_ubo_buffer,
117117
scene_desc_buffer,
118118
})
119-
.bind_texture_array(diffuse_textures)
120119
.bind(mesh_lights_buffer)
120+
.bind_texture_array(scene_textures)
121121
.bind_tlas(instance->vkb.tlas);
122122

123123
// Output
@@ -136,8 +136,8 @@ void ReSTIR::render() {
136136
scene_ubo_buffer,
137137
scene_desc_buffer,
138138
})
139-
.bind_texture_array(diffuse_textures)
140139
.bind(mesh_lights_buffer)
140+
.bind_texture_array(scene_textures)
141141
.bind_tlas(instance->vkb.tlas);
142142

143143
if (!do_spatiotemporal) {

src/RayTracer/ReSTIRGI.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ void ReSTIRGI::render() {
9898
scene_ubo_buffer,
9999
scene_desc_buffer,
100100
})
101-
.bind_texture_array(diffuse_textures)
102101
.bind(mesh_lights_buffer)
102+
.bind_texture_array(scene_textures)
103103
.bind_tlas(instance->vkb.tlas)
104104
.copy(restir_samples_buffer, restir_samples_old_buffer);
105105

@@ -119,8 +119,8 @@ void ReSTIRGI::render() {
119119
scene_ubo_buffer,
120120
scene_desc_buffer,
121121
})
122-
.bind_texture_array(diffuse_textures)
123122
.bind(mesh_lights_buffer)
123+
.bind_texture_array(scene_textures)
124124
.bind_tlas(instance->vkb.tlas);
125125

126126
// Spatial reuse
@@ -139,8 +139,8 @@ void ReSTIRGI::render() {
139139
scene_ubo_buffer,
140140
scene_desc_buffer,
141141
})
142-
.bind_texture_array(diffuse_textures)
143142
.bind(mesh_lights_buffer)
143+
.bind_texture_array(scene_textures)
144144
.bind_tlas(instance->vkb.tlas);
145145
// Output
146146
instance->vkb.rg

0 commit comments

Comments
 (0)