Skip to content

Commit 6237dbf

Browse files
Vecvecteoxoy
authored andcommitted
Unify timestamp writes.
1 parent afa96af commit 6237dbf

3 files changed

Lines changed: 41 additions & 56 deletions

File tree

wgpu-core/src/command/compute.rs

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -651,8 +651,14 @@ impl Global {
651651
query_index,
652652
} => {
653653
let scope = PassErrorScope::WriteTimestamp;
654-
write_timestamp(&mut state, cmd_buf.as_ref(), query_set, query_index)
655-
.map_pass_err(scope)?;
654+
pass::write_timestamp::<ComputePassErrorInner>(
655+
&mut state.general,
656+
cmd_buf.as_ref(),
657+
None,
658+
query_set,
659+
query_index,
660+
)
661+
.map_pass_err(scope)?;
656662
}
657663
ArcComputeCommand::BeginPipelineStatisticsQuery {
658664
query_set,
@@ -1043,25 +1049,6 @@ fn insert_debug_marker(state: &mut State, string_data: &[u8], len: usize) {
10431049
state.string_offset += len;
10441050
}
10451051

1046-
fn write_timestamp(
1047-
state: &mut State,
1048-
cmd_buf: &CommandBuffer,
1049-
query_set: Arc<resource::QuerySet>,
1050-
query_index: u32,
1051-
) -> Result<(), ComputePassErrorInner> {
1052-
query_set.same_device_as(cmd_buf)?;
1053-
1054-
state
1055-
.general
1056-
.device
1057-
.require_features(wgt::Features::TIMESTAMP_QUERY_INSIDE_PASSES)?;
1058-
1059-
let query_set = state.general.tracker.query_sets.insert_single(query_set);
1060-
1061-
query_set.validate_and_write_timestamp(state.general.raw_encoder, query_index, None)?;
1062-
Ok(())
1063-
}
1064-
10651052
// Recording a compute pass.
10661053
//
10671054
// The only error that should be returned from these methods is

wgpu-core/src/command/pass.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
use crate::binding_model::{BindError, BindGroup, PushConstantUploadError};
44
use crate::command::bind::Binder;
55
use crate::command::memory_init::{CommandBufferTextureMemoryActions, SurfacesInDiscardState};
6-
use crate::command::CommandBuffer;
7-
use crate::device::{Device, DeviceError};
6+
use crate::command::{CommandBuffer, QueryResetMap, QueryUseError};
7+
use crate::device::{Device, DeviceError, MissingFeatures};
88
use crate::init_tracker::BufferInitTrackerAction;
99
use crate::pipeline::LateSizedBufferGroup;
1010
use crate::ray_tracing::AsAction;
11-
use crate::resource::{DestroyedResourceError, Labeled, ParentDevice};
11+
use crate::resource::{DestroyedResourceError, Labeled, ParentDevice, QuerySet};
1212
use crate::snatch::SnatchGuard;
1313
use crate::track::{ResourceUsageCompatibilityError, Tracker, UsageScope};
1414
use crate::{api_log, binding_model};
@@ -263,3 +263,30 @@ where
263263
}
264264
Ok(())
265265
}
266+
267+
pub(crate) fn write_timestamp<E>(
268+
state: &mut BaseState,
269+
cmd_buf: &CommandBuffer,
270+
pending_query_resets: Option<&mut QueryResetMap>,
271+
query_set: Arc<QuerySet>,
272+
query_index: u32,
273+
) -> Result<(), E>
274+
where
275+
E: From<MissingFeatures> + From<QueryUseError> + From<DeviceError>,
276+
{
277+
api_log!(
278+
"Pass::write_timestamps {query_index} {}",
279+
query_set.error_ident()
280+
);
281+
282+
query_set.same_device_as(cmd_buf)?;
283+
284+
state
285+
.device
286+
.require_features(wgt::Features::TIMESTAMP_QUERY_INSIDE_PASSES)?;
287+
288+
let query_set = state.tracker.query_sets.insert_single(query_set);
289+
290+
query_set.validate_and_write_timestamp(state.raw_encoder, query_index, pending_query_resets)?;
291+
Ok(())
292+
}

wgpu-core/src/command/render.rs

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2050,10 +2050,10 @@ impl Global {
20502050
query_index,
20512051
} => {
20522052
let scope = PassErrorScope::WriteTimestamp;
2053-
write_timestamp(
2054-
&mut state,
2053+
pass::write_timestamp::<RenderPassErrorInner>(
2054+
&mut state.general,
20552055
cmd_buf.as_ref(),
2056-
&mut cmd_buf_data.pending_query_resets,
2056+
Some(&mut cmd_buf_data.pending_query_resets),
20572057
query_set,
20582058
query_index,
20592059
)
@@ -2892,35 +2892,6 @@ fn insert_debug_marker(state: &mut State, string_data: &[u8], len: usize) {
28922892
state.string_offset += len;
28932893
}
28942894

2895-
fn write_timestamp(
2896-
state: &mut State,
2897-
cmd_buf: &CommandBuffer,
2898-
pending_query_resets: &mut QueryResetMap,
2899-
query_set: Arc<QuerySet>,
2900-
query_index: u32,
2901-
) -> Result<(), RenderPassErrorInner> {
2902-
api_log!(
2903-
"RenderPass::write_timestamps {query_index} {}",
2904-
query_set.error_ident()
2905-
);
2906-
2907-
query_set.same_device_as(cmd_buf)?;
2908-
2909-
state
2910-
.general
2911-
.device
2912-
.require_features(wgt::Features::TIMESTAMP_QUERY_INSIDE_PASSES)?;
2913-
2914-
let query_set = state.general.tracker.query_sets.insert_single(query_set);
2915-
2916-
query_set.validate_and_write_timestamp(
2917-
state.general.raw_encoder,
2918-
query_index,
2919-
Some(pending_query_resets),
2920-
)?;
2921-
Ok(())
2922-
}
2923-
29242895
fn execute_bundle(
29252896
state: &mut State,
29262897
indirect_draw_validation_resources: &mut crate::indirect_validation::DrawResources,

0 commit comments

Comments
 (0)