Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion apps/demo/src/plugin-demos/canvas-perf.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { EventData, Observable, Page } from '@nativescript/core';
import { runCanvasPerf, runWebGLPerf, runImageBitmapPerf, profileDemo, swarm, touchParticles, runBoundsProbe, runCallBound, runWebGPUSample } from '@demo/shared';
import { runCanvasPerf, runWebGLPerf, runWebGPUPerf, runImageBitmapPerf, profileDemo, swarm, touchParticles, runBoundsProbe, runCallBound, runWebGPUSample } from '@demo/shared';
import { launchArgs } from '../launch-args';

export function navigatingTo(args: EventData) {
Expand Down Expand Up @@ -70,6 +70,8 @@ class PerfModel extends Observable {
profileDemo(canvas, start, profile, launchArgs.frames ?? 180, () => {
this.set('status', `${profile} profiled — see logcat (PROF|…)`);
});
} else if (suite === 'webgpu') {
runWebGPUPerf(canvas).then(() => this.set('status', 'webgpu perf done — see log (PERF|…)'));
} else if (suite?.startsWith('webgpu:')) {
const sample = suite.substring('webgpu:'.length);
const started = runWebGPUSample(sample, canvas);
Expand Down
9 changes: 0 additions & 9 deletions crates/canvas-c/src/webgpu/gpu_compute_pass_encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_dispatch_work
}

let compute_pass = &*compute_pass;
let error_sink = compute_pass.error_sink.as_ref();

let mut lock = compute_pass.pass.lock();
if let Some(compute_pass) = lock.as_mut() {
Expand All @@ -93,7 +92,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_dispatch_work
}

let compute_pass = &*compute_pass;
let error_sink = compute_pass.error_sink.as_ref();
let mut lock = compute_pass.pass.lock();
if let Some(compute_pass) = lock.as_mut() {
let indirect_buffer = &*indirect_buffer;
Expand All @@ -113,8 +111,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_end(
}

let compute_pass = &*compute_pass;
let label = compute_pass.label.clone();
let error_sink = compute_pass.error_sink.as_ref();

let mut lock = compute_pass.pass.lock();

Expand All @@ -135,7 +131,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_insert_debug_
}

let compute_pass = &*compute_pass;
let error_sink = compute_pass.error_sink.as_ref();

let label = CStr::from_ptr(label);
let label = label.to_str().unwrap();
Expand All @@ -154,7 +149,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_pop_debug_gro
}

let compute_pass = &*compute_pass;
let error_sink = compute_pass.error_sink.as_ref();

let mut lock = compute_pass.pass.lock();
if let Some(compute_pass) = lock.as_mut() {
Expand All @@ -171,7 +165,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_push_debug_gr
}

let compute_pass = &*compute_pass;
let error_sink = compute_pass.error_sink.as_ref();

let mut lock = compute_pass.pass.lock();
if let Some(compute_pass) = lock.as_mut() {
Expand All @@ -197,7 +190,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_set_bind_grou


let compute_pass = &*compute_pass;
let error_sink = compute_pass.error_sink.as_ref();

let mut lock = compute_pass.pass.lock();
if let Some(compute_pass) = lock.as_mut() {
Expand Down Expand Up @@ -237,7 +229,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_compute_pass_encoder_set_pipeline(
}

let compute_pass = &*compute_pass;
let error_sink = compute_pass.error_sink.as_ref();

let mut lock = compute_pass.pass.lock();
if let Some(compute_pass) = lock.as_mut() {
Expand Down
56 changes: 9 additions & 47 deletions crates/canvas-c/src/webgpu/gpu_render_bundle_encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -326,43 +326,13 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_bundle_encoder_set_index_bu
let buffer_id = Arc::clone(&buffer.buffer);

let offset: u64 = offset.try_into().unwrap_or_default();
// <= 0: the rest of the buffer.
let size = u64::try_from(size).ok().filter(|v| *v > 0);

let size: Option<u64> = size.try_into().ok();

let mut sizeValue: Option<std::num::NonZero<u64>> = None;

if let Some(value) = size {
sizeValue = std::num::NonZero::new(value);
}

if size.is_some() {
if let Some(size) = sizeValue {
if let Some(encoder) = render_bundle.encoder.as_mut() {
if let Some(encoder) = encoder {
if let Some(encoder) = encoder.as_mut() {
encoder.set_index_buffer(
buffer_id,
index_format.into(),
offset,
Some(size.get()),
);
}
}
}
} else {
// todo error ??
}
} else {
if let Some(encoder) = render_bundle.encoder.as_mut() {
if let Some(encoder) = encoder {
if let Some(encoder) = encoder.as_mut() {
encoder.set_index_buffer(
buffer_id,
index_format.into(),
offset,
None,
);
}
if let Some(encoder) = render_bundle.encoder.as_mut() {
if let Some(encoder) = encoder {
if let Some(encoder) = encoder.as_mut() {
encoder.set_index_buffer(buffer_id, index_format.into(), offset, size);
}
}
}
Expand Down Expand Up @@ -424,16 +394,8 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_bundle_encoder_set_vertex_b
}
};

let size: Option<u64> = size.try_into().ok();

let sizeValue = if let Some(value) = size {
std::num::NonZero::new(value)
} else if !buffer.is_null() {
let buffer = &*buffer;
std::num::NonZero::new(buffer.size)
} else {
None
};
// <= 0: the rest of the buffer.
let size = u64::try_from(size).ok().filter(|v| *v > 0);

if let Some(encoder) = render_bundle.encoder.as_mut() {
if let Some(encoder) = encoder {
Expand All @@ -442,7 +404,7 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_bundle_encoder_set_vertex_b
slot,
buffer_id,
offset.try_into().unwrap_or_default(),
sizeValue.map(|v| v.get()),
size,
);
}
}
Expand Down
75 changes: 7 additions & 68 deletions crates/canvas-c/src/webgpu/gpu_render_pass_encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_begin_occlusio
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let mut pass = render_pass.pass.lock();

Expand All @@ -78,8 +76,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw(
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let mut pass = render_pass.pass.lock();

Expand All @@ -105,8 +101,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indexed(
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let mut pass = render_pass.pass.lock();

Expand All @@ -130,8 +124,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indexed_i
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let indirect_buffer = &*indirect_buffer;

Expand All @@ -155,8 +147,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_multi_draw_ind
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let indirect_buffer = &*indirect_buffer;

Expand All @@ -179,8 +169,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_draw_indirect(
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let indirect_buffer = &*indirect_buffer;

Expand All @@ -203,8 +191,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_multi_draw_ind
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let indirect_buffer = &*indirect_buffer;

Expand All @@ -224,8 +210,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_end(
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();

let mut lock = render_pass.pass.lock();

Expand All @@ -247,8 +231,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_end_occlusion_
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -267,8 +249,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_execute_bundle
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -290,8 +270,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_insert_debug_m
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -310,8 +288,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_pop_debug_grou
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -328,8 +304,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_push_debug_gro
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -354,8 +328,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_bind_group
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand Down Expand Up @@ -394,8 +366,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_blend_cons
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -417,28 +387,17 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_index_buff
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
let buffer = &*buffer;
let buffer_id = Arc::clone(&buffer.buffer);

let offset: u64 = offset.try_into().unwrap_or_default();
// <= 0: the rest of the buffer.
let size = u64::try_from(size).ok().filter(|v| *v > 0);

let size: Option<u64> = size.try_into().ok();

// wgpu takes Option<BufferAddress> now; zero means "no explicit size",
// which is what NonZero used to encode.
let sizeValue = size.filter(|value| *value > 0);

pass.set_index_buffer(
Arc::clone(&buffer_id),
index_format.into(),
offset,
sizeValue,
);
pass.set_index_buffer(buffer_id, index_format.into(), offset, size);
}
}

Expand All @@ -452,8 +411,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_pipeline(
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -476,8 +433,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_scissor_re
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -494,8 +449,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_stencil_re
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -515,8 +468,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_vertex_buf
}

let render_pass = &*render_pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand All @@ -529,21 +480,11 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_vertex_buf
}
};

let size: Option<u64> = size.try_into().ok();
// <= 0: the rest of the buffer.
let size = u64::try_from(size).ok().filter(|v| *v > 0);

let sizeValue = if let Some(value) = size {
Some(value).filter(|v| *v > 0)
} else if !buffer.is_null() {
let buffer = &*buffer;
Some(buffer.size).filter(|v| *v > 0)
} else {
None
};

pass.set_vertex_buffer(slot,
buffer_id,
offset.try_into().unwrap_or_default(),
sizeValue);}
pass.set_vertex_buffer(slot, buffer_id, offset.try_into().unwrap_or_default(), size);
}
}

#[no_mangle]
Expand All @@ -561,8 +502,6 @@ pub unsafe extern "C" fn canvas_native_webgpu_render_pass_encoder_set_viewport(
}

let render_pass = &*pass;
let label = render_pass.label.clone();
let error_sink = render_pass.error_sink.as_ref();
let mut pass = render_pass.pass.lock();

if let Some(pass) = pass.as_mut() {
Expand Down
Loading
Loading