Skip to content

Commit c204536

Browse files
committed
PR feedback.
1 parent 618d7e3 commit c204536

39 files changed

+559
-599
lines changed

demo/src/components.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ use rafx::visibility::ViewFrustumArc;
66

77
#[derive(Clone)]
88
pub struct MeshComponent {
9-
pub handle: RenderObjectHandle,
9+
pub render_object_handle: RenderObjectHandle,
1010
}
1111

1212
#[derive(Clone)]
1313
pub struct SpriteComponent {
14-
pub handle: RenderObjectHandle,
14+
pub render_object_handle: RenderObjectHandle,
1515
}
1616

1717
#[derive(Clone)]
1818
pub struct VisibilityComponent {
19-
pub handle: VisibilityObjectArc,
19+
pub visibility_object_handle: VisibilityObjectArc,
2020
}
2121

2222
#[derive(Clone, Copy)]

demo/src/demo_renderer_thread_pool.rs

+50-50
Original file line numberDiff line numberDiff line change
@@ -9,56 +9,6 @@ use rafx::renderer::{RenderFrameJob, Renderer, RendererThreadPool};
99
use std::collections::HashMap;
1010
use std::sync::Arc;
1111

12-
#[derive(Default)]
13-
struct ParallelChunkSizes {
14-
extract_chunk_size: Option<usize>,
15-
extract_per_view_chunk_size: Option<usize>,
16-
prepare_chunk_size: Option<usize>,
17-
prepare_per_view_chunk_size: Option<usize>,
18-
}
19-
20-
impl ParallelChunkSizes {
21-
pub fn extract_chunk_size(
22-
self,
23-
num: usize,
24-
) -> Self {
25-
Self {
26-
extract_chunk_size: Some(num),
27-
..self
28-
}
29-
}
30-
31-
pub fn extract_per_view_chunk_size(
32-
self,
33-
num: usize,
34-
) -> Self {
35-
Self {
36-
extract_per_view_chunk_size: Some(num),
37-
..self
38-
}
39-
}
40-
41-
pub fn prepare_chunk_size(
42-
self,
43-
num: usize,
44-
) -> Self {
45-
Self {
46-
prepare_chunk_size: Some(num),
47-
..self
48-
}
49-
}
50-
51-
pub fn prepare_per_view_chunk_size(
52-
self,
53-
num: usize,
54-
) -> Self {
55-
Self {
56-
prepare_per_view_chunk_size: Some(num),
57-
..self
58-
}
59-
}
60-
}
61-
6212
#[derive(Clone)]
6313
pub struct DemoRendererThreadPool {
6414
task_pool: TaskPool,
@@ -397,3 +347,53 @@ impl RendererThreadPool for DemoRendererThreadPool {
397347
Box::new(self.clone())
398348
}
399349
}
350+
351+
#[derive(Default)]
352+
struct ParallelChunkSizes {
353+
extract_chunk_size: Option<usize>,
354+
extract_per_view_chunk_size: Option<usize>,
355+
prepare_chunk_size: Option<usize>,
356+
prepare_per_view_chunk_size: Option<usize>,
357+
}
358+
359+
impl ParallelChunkSizes {
360+
pub fn extract_chunk_size(
361+
self,
362+
num: usize,
363+
) -> Self {
364+
Self {
365+
extract_chunk_size: Some(num),
366+
..self
367+
}
368+
}
369+
370+
pub fn extract_per_view_chunk_size(
371+
self,
372+
num: usize,
373+
) -> Self {
374+
Self {
375+
extract_per_view_chunk_size: Some(num),
376+
..self
377+
}
378+
}
379+
380+
pub fn prepare_chunk_size(
381+
self,
382+
num: usize,
383+
) -> Self {
384+
Self {
385+
prepare_chunk_size: Some(num),
386+
..self
387+
}
388+
}
389+
390+
pub fn prepare_per_view_chunk_size(
391+
self,
392+
num: usize,
393+
) -> Self {
394+
Self {
395+
prepare_per_view_chunk_size: Some(num),
396+
..self
397+
}
398+
}
399+
}

demo/src/features/debug3d/jobs/extract.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use rafx::base::resource_ref_map::ResourceRefBorrowMut;
77
use rafx::distill::loader::handle::Handle;
88

99
pub struct Debug3DExtractJob<'extract> {
10-
debug3d_resource: Mutex<ResourceRefBorrowMut<'extract, Debug3DResource>>,
10+
debug3d_resource: TrustCell<ResourceRefBorrowMut<'extract, Debug3DResource>>,
1111
asset_manager: ReadBorrow<'extract, AssetManagerRenderResource>,
1212
debug3d_material: Handle<MaterialAsset>,
1313
}
@@ -20,7 +20,7 @@ impl<'extract> Debug3DExtractJob<'extract> {
2020
) -> Arc<dyn RenderFeatureExtractJob<'extract> + 'extract> {
2121
Arc::new(ExtractJob::new(
2222
Self {
23-
debug3d_resource: Mutex::new(
23+
debug3d_resource: TrustCell::new(
2424
extract_context
2525
.extract_resources
2626
.fetch_mut::<Debug3DResource>(),
@@ -38,10 +38,9 @@ impl<'extract> Debug3DExtractJob<'extract> {
3838
impl<'extract> ExtractJobEntryPoints<'extract> for Debug3DExtractJob<'extract> {
3939
fn begin_per_frame_extract(
4040
&self,
41-
_render_objects: &RenderObjectsMap<Debug3DRenderObjectStaticData>,
4241
context: &ExtractPerFrameContext<'extract, '_, Self>,
4342
) {
44-
let debug3d_resource_mut = &mut self.debug3d_resource.lock();
43+
let debug3d_resource_mut = &mut self.debug3d_resource.borrow_mut();
4544
context
4645
.frame_packet()
4746
.per_frame_data()
@@ -64,6 +63,8 @@ impl<'extract> ExtractJobEntryPoints<'extract> for Debug3DExtractJob<'extract> {
6463
super::render_feature_index()
6564
}
6665

67-
type RenderObjectStaticDataT = Debug3DRenderObjectStaticData;
66+
type RenderObjectInstanceJobContextT = DefaultJobContext;
67+
type RenderObjectInstancePerViewJobContextT = DefaultJobContext;
68+
6869
type FramePacketDataT = Debug3DRenderFeatureTypes;
6970
}

demo/src/features/debug3d/jobs/prepare.rs

+11-23
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ use rafx::render_feature_prepare_job_predule::*;
33
use super::*;
44
use crate::phases::OpaqueRenderPhase;
55
use rafx::api::{RafxBufferDef, RafxDeviceContext, RafxMemoryUsage, RafxResourceType};
6-
use rafx::framework::{DescriptorSetAllocatorRef, DynResourceAllocatorSet};
6+
use rafx::framework::ResourceContext;
77

88
pub struct Debug3DPrepareJob {
9-
descriptor_set_allocator: Mutex<DescriptorSetAllocatorRef>,
10-
dyn_resource_allocator_set: DynResourceAllocatorSet,
9+
resource_context: ResourceContext,
1110
device_context: RafxDeviceContext,
1211
}
1312

@@ -19,18 +18,7 @@ impl Debug3DPrepareJob {
1918
) -> Arc<dyn RenderFeaturePrepareJob<'prepare> + 'prepare> {
2019
Arc::new(PrepareJob::new(
2120
Self {
22-
descriptor_set_allocator: {
23-
Mutex::new(
24-
prepare_context
25-
.resource_context
26-
.create_descriptor_set_allocator(),
27-
)
28-
},
29-
dyn_resource_allocator_set: {
30-
prepare_context
31-
.resource_context
32-
.create_dyn_resource_allocator_set()
33-
},
21+
resource_context: prepare_context.resource_context.clone(),
3422
device_context: prepare_context.device_context.clone(),
3523
},
3624
frame_packet,
@@ -42,7 +30,6 @@ impl Debug3DPrepareJob {
4230
impl<'prepare> PrepareJobEntryPoints<'prepare> for Debug3DPrepareJob {
4331
fn begin_per_frame_prepare(
4432
&self,
45-
_render_objects: &RenderObjectsMap<Debug3DRenderObjectStaticData>,
4633
context: &PreparePerFrameContext<'prepare, '_, Self>,
4734
) {
4835
let mut per_frame_submit_data = Debug3DPerFrameSubmitData::default();
@@ -69,6 +56,7 @@ impl<'prepare> PrepareJobEntryPoints<'prepare> for Debug3DPrepareJob {
6956

7057
// We would probably want to support multiple buffers at some point
7158

59+
let dyn_resource_allocator_set = self.resource_context.create_dyn_resource_allocator_set();
7260
per_frame_submit_data.vertex_buffer = if !per_frame_submit_data.draw_calls.is_empty() {
7361
let vertex_buffer_size = per_frame_submit_data.vertex_list.len() as u64
7462
* std::mem::size_of::<Debug3DVertex>() as u64;
@@ -87,7 +75,7 @@ impl<'prepare> PrepareJobEntryPoints<'prepare> for Debug3DPrepareJob {
8775
.copy_to_host_visible_buffer(per_frame_submit_data.vertex_list.as_slice())
8876
.unwrap();
8977

90-
Some(self.dyn_resource_allocator_set.insert_buffer(vertex_buffer))
78+
Some(dyn_resource_allocator_set.insert_buffer(vertex_buffer))
9179
} else {
9280
None
9381
};
@@ -100,7 +88,6 @@ impl<'prepare> PrepareJobEntryPoints<'prepare> for Debug3DPrepareJob {
10088

10189
fn end_per_view_prepare(
10290
&self,
103-
_render_objects: &RenderObjectsMap<Debug3DRenderObjectStaticData>,
10491
context: &PreparePerViewContext<'prepare, '_, Self>,
10592
) {
10693
let per_frame_data = context.per_frame_data();
@@ -118,14 +105,13 @@ impl<'prepare> PrepareJobEntryPoints<'prepare> for Debug3DPrepareJob {
118105
view_proj: (view.projection_matrix() * view.view_matrix()).to_cols_array_2d(),
119106
};
120107

108+
let mut descriptor_set_allocator = self.resource_context.create_descriptor_set_allocator();
121109
context
122110
.view_submit_packet()
123111
.per_view_submit_data()
124112
.set(Debug3DPerViewSubmitData {
125-
descriptor_set_arc: self
126-
.descriptor_set_allocator
127-
.lock()
128-
.create_descriptor_set(
113+
descriptor_set_arc: descriptor_set_allocator
114+
.create_descriptor_set_with_writer(
129115
per_view_descriptor_set_layout,
130116
shaders::debug_vert::DescriptorSet0Args {
131117
per_frame_data: &debug3d_view,
@@ -147,7 +133,9 @@ impl<'prepare> PrepareJobEntryPoints<'prepare> for Debug3DPrepareJob {
147133
super::render_feature_index()
148134
}
149135

150-
type RenderObjectStaticDataT = Debug3DRenderObjectStaticData;
136+
type RenderObjectInstanceJobContextT = DefaultJobContext;
137+
type RenderObjectInstancePerViewJobContextT = DefaultJobContext;
138+
151139
type FramePacketDataT = Debug3DRenderFeatureTypes;
152140
type SubmitPacketDataT = Debug3DRenderFeatureTypes;
153141
}

demo/src/features/imgui/internal/imgui_draw_data.rs

-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#[derive(Clone)]
21
pub enum ImGuiDrawCmd {
32
Elements {
43
count: usize,
@@ -20,7 +19,6 @@ impl From<imgui::DrawCmd> for ImGuiDrawCmd {
2019
}
2120
}
2221

23-
#[derive(Clone)]
2422
pub struct ImGuiDrawList {
2523
vertex_buffer: Vec<imgui::DrawVert>,
2624
index_buffer: Vec<imgui::DrawIdx>,
@@ -39,7 +37,6 @@ impl ImGuiDrawList {
3937
}
4038
}
4139

42-
#[derive(Clone)]
4340
pub struct ImGuiDrawData {
4441
draw_lists: Vec<ImGuiDrawList>,
4542
pub total_idx_count: i32,

demo/src/features/imgui/jobs/extract.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rafx::distill::loader::handle::Handle;
88
use rafx::graph::SwapchainSurfaceInfo;
99

1010
pub struct ImGuiExtractJob<'extract> {
11-
sdl2_imgui_manager: Mutex<ResourceRefBorrowMut<'extract, Sdl2ImguiManager>>,
11+
sdl2_imgui_manager: TrustCell<ResourceRefBorrowMut<'extract, Sdl2ImguiManager>>,
1212
swapchain_surface_info: ReadBorrow<'extract, SwapchainSurfaceInfo>,
1313
asset_manager: ReadBorrow<'extract, AssetManagerRenderResource>,
1414
imgui_material: Handle<MaterialAsset>,
@@ -22,7 +22,7 @@ impl<'extract> ImGuiExtractJob<'extract> {
2222
) -> Arc<dyn RenderFeatureExtractJob<'extract> + 'extract> {
2323
Arc::new(ExtractJob::new(
2424
Self {
25-
sdl2_imgui_manager: Mutex::new(
25+
sdl2_imgui_manager: TrustCell::new(
2626
extract_context
2727
.extract_resources
2828
.fetch_mut::<Sdl2ImguiManager>(),
@@ -43,10 +43,9 @@ impl<'extract> ImGuiExtractJob<'extract> {
4343
impl<'extract> ExtractJobEntryPoints<'extract> for ImGuiExtractJob<'extract> {
4444
fn begin_per_frame_extract(
4545
&self,
46-
_render_objects: &RenderObjectsMap<ImGuiRenderObjectStaticData>,
4746
context: &ExtractPerFrameContext<'extract, '_, Self>,
4847
) {
49-
let sdl2_imgui_manager_mut = &mut self.sdl2_imgui_manager.lock();
48+
let sdl2_imgui_manager_mut = &mut self.sdl2_imgui_manager.borrow_mut();
5049
let imgui_draw_data = sdl2_imgui_manager_mut.copy_draw_data();
5150
let view_ubo = {
5251
let framebuffer_scale = match &imgui_draw_data {
@@ -94,6 +93,8 @@ impl<'extract> ExtractJobEntryPoints<'extract> for ImGuiExtractJob<'extract> {
9493
super::render_feature_index()
9594
}
9695

97-
type RenderObjectStaticDataT = ImGuiRenderObjectStaticData;
96+
type RenderObjectInstanceJobContextT = DefaultJobContext;
97+
type RenderObjectInstancePerViewJobContextT = DefaultJobContext;
98+
9899
type FramePacketDataT = ImGuiRenderFeatureTypes;
99100
}

0 commit comments

Comments
 (0)