Skip to content

Commit 63a2dbf

Browse files
EguiRenderer profiling
1 parent 2c869f5 commit 63a2dbf

File tree

3 files changed

+44
-19
lines changed

3 files changed

+44
-19
lines changed

src/graphics_backend/egui_renderer.rs

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::push_constants::PushConstants;
22
use super::vertex::UIVertex;
33
use crate::error::Error;
4-
use egui::epaint::{ImageDelta, Primitive};
4+
use egui::epaint::{ImageDelta, Primitive, Vertex};
55
use egui::{ClippedPrimitive, ImageData, Rect, TextureId, TexturesDelta};
66
use log::trace;
77
use nalgebra_glm::Mat4;
@@ -20,6 +20,20 @@ struct MeshDrawInfo {
2020
pub rect: Rect,
2121
}
2222

23+
impl Default for MeshDrawInfo {
24+
fn default() -> Self {
25+
Self {
26+
tex_id: TextureId::default(),
27+
indices_count: 0,
28+
vertices_count: 0,
29+
rect: Rect {
30+
min: egui::Pos2 { x: 0.0, y: 0.0 },
31+
max: egui::Pos2 { x: 0.0, y: 0.0 },
32+
},
33+
}
34+
}
35+
}
36+
2337
pub(crate) struct EguiRenderer {
2438
index_buffers: Vec<VMABuffer>,
2539
vertex_buffers: Vec<VMABuffer>,
@@ -32,6 +46,7 @@ pub(crate) struct EguiRenderer {
3246

3347
images: HashMap<TextureId, (VMAImage, DescriptorSet)>,
3448
mesh_draw_infos: Vec<MeshDrawInfo>,
49+
mesh_draw_count: usize,
3550
}
3651

3752
impl EguiRenderer {
@@ -161,7 +176,7 @@ impl EguiRenderer {
161176
.unwrap();
162177

163178
let images = HashMap::new();
164-
let mesh_draw_infos = Vec::new();
179+
let mesh_draw_infos = vec![MeshDrawInfo::default(); 1024];
165180

166181
Ok(Self {
167182
index_buffers,
@@ -172,6 +187,7 @@ impl EguiRenderer {
172187
sampler,
173188
images,
174189
mesh_draw_infos,
190+
mesh_draw_count: 0,
175191
})
176192
}
177193

@@ -214,11 +230,14 @@ impl EguiRenderer {
214230
self.update_image(vk_init, &delta.0, &delta.1, cmd_buffer)?;
215231
}
216232

217-
let mut indices = Vec::new();
218-
let mut vertices = Vec::new();
219-
let mut mesh_draw_infos = Vec::new();
233+
let index_buffer = &self.index_buffers[frame];
234+
let vertex_buffer = &self.vertex_buffers[frame];
220235

221236
{
237+
let mut indices_count = 0;
238+
let mut vertices_count = 0;
239+
let mut draw_infos_count = 0;
240+
222241
profiling::scope!("EguiRenderer::Input::DataIterator");
223242
for clip in clipped_primitives.into_iter() {
224243
let Primitive::Mesh(mesh) = clip.primitive else {
@@ -232,19 +251,25 @@ impl EguiRenderer {
232251
rect: clip.clip_rect,
233252
};
234253

235-
indices.extend(mesh.indices);
236-
vertices.extend(mesh.vertices);
237-
mesh_draw_infos.push(mesh_draw_info);
254+
unsafe {
255+
let ptr = index_buffer.allocation_info.mapped_data as *mut u32;
256+
let ptr = ptr.add(indices_count);
257+
ptr.copy_from_nonoverlapping(mesh.indices.as_ptr(), mesh.indices.len());
258+
}
259+
unsafe {
260+
let ptr = vertex_buffer.allocation_info.mapped_data as *mut Vertex;
261+
let ptr = ptr.add(vertices_count);
262+
ptr.copy_from_nonoverlapping(mesh.vertices.as_ptr(), mesh.vertices.len());
263+
}
264+
265+
self.mesh_draw_infos[draw_infos_count] = mesh_draw_info;
266+
267+
indices_count += mesh.indices.len();
268+
vertices_count += mesh.vertices.len();
269+
draw_infos_count += 1;
238270
}
239-
}
240271

241-
{
242-
profiling::scope!("EguiRenderer::Input::SetData");
243-
let index_buffer = &self.index_buffers[frame];
244-
let vertex_buffer = &self.vertex_buffers[frame];
245-
self.mesh_draw_infos = mesh_draw_infos;
246-
index_buffer.set_data(&indices)?;
247-
vertex_buffer.set_data(&vertices)?;
272+
self.mesh_draw_count = draw_infos_count;
248273
}
249274

250275
Ok(())
@@ -320,7 +345,7 @@ impl EguiRenderer {
320345
let mut index_offset = 0;
321346
let mut vertex_offset = 0;
322347

323-
for info in self.mesh_draw_infos.iter() {
348+
for info in &self.mesh_draw_infos[0..self.mesh_draw_count] {
324349
let (_, desc_set) = self
325350
.images
326351
.get(&info.tex_id)

src/graphics_backend/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl Graphics {
4141
};
4242

4343
vk_init_create_info.request_img_count = MAX_FRAMES_IN_FLIGHT as u32;
44-
vk_init_create_info.present_mode = PresentModeKHR::FIFO;
44+
vk_init_create_info.present_mode = PresentModeKHR::IMMEDIATE;
4545

4646
let vk_init = VkInit::new(
4747
Some(&window.raw_display_handle()),

src/rebind/rebind_processor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::path::Path;
22

3-
use log::error;
3+
use log::{error, info};
44

55
use crate::{
66
config::Config,

0 commit comments

Comments
 (0)